{
  "version": 3,
  "sources": ["<define:process>", "../../../node_modules/jquery/dist/jquery.js", "../../javascript/jquery.js", "../../../node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js", "../../../node_modules/@rails/activestorage/app/assets/javascripts/activestorage.js", "../../../node_modules/intl-tel-input/build/js/intlTelInput.js", "../../../node_modules/intl-tel-input/index.js", "../../../node_modules/select2/dist/js/select2.js", "../../../node_modules/select2/dist/js/i18n/en.js", "../../../node_modules/select2/dist/js/i18n/es.js", "../../../node_modules/select2/dist/js/i18n/pt.js", "../../../node_modules/select2/dist/js/i18n/ja.js", "../../../node_modules/tom-select/src/contrib/microevent.ts", "../../../node_modules/tom-select/src/contrib/microplugin.ts", "../../../node_modules/tom-select/node_modules/@orchidjs/unicode-variants/dist/esm/regex.js", "../../../node_modules/tom-select/node_modules/@orchidjs/unicode-variants/dist/esm/strings.js", "../../../node_modules/tom-select/node_modules/@orchidjs/unicode-variants/dist/esm/index.js", "../../../node_modules/tom-select/node_modules/@orchidjs/sifter/dist/esm/utils.js", "../../../node_modules/tom-select/node_modules/@orchidjs/sifter/dist/esm/sifter.js", "../../../node_modules/tom-select/node_modules/@orchidjs/sifter/lib/utils.ts", "../../../node_modules/tom-select/src/vanilla.ts", "../../../node_modules/tom-select/src/contrib/highlight.ts", "../../../node_modules/tom-select/src/constants.ts", "../../../node_modules/tom-select/src/defaults.ts", "../../../node_modules/tom-select/src/utils.ts", "../../../node_modules/tom-select/src/getSettings.ts", "../../../node_modules/tom-select/src/tom-select.ts", "../../../node_modules/tom-select/src/plugins/change_listener/plugin.ts", "../../../node_modules/tom-select/src/plugins/checkbox_options/plugin.ts", "../../../node_modules/tom-select/src/plugins/clear_button/plugin.ts", "../../../node_modules/tom-select/src/plugins/drag_drop/plugin.ts", "../../../node_modules/tom-select/src/plugins/dropdown_header/plugin.ts", "../../../node_modules/tom-select/src/plugins/caret_position/plugin.ts", "../../../node_modules/tom-select/src/plugins/dropdown_input/plugin.ts", "../../../node_modules/tom-select/src/plugins/input_autogrow/plugin.ts", "../../../node_modules/tom-select/src/plugins/no_backspace_delete/plugin.ts", "../../../node_modules/tom-select/src/plugins/no_active_items/plugin.ts", "../../../node_modules/tom-select/src/plugins/optgroup_columns/plugin.ts", "../../../node_modules/tom-select/src/plugins/remove_button/plugin.ts", "../../../node_modules/tom-select/src/plugins/restore_on_backspace/plugin.ts", "../../../node_modules/tom-select/src/plugins/virtual_scroll/plugin.ts", "../../../node_modules/tom-select/src/tom-select.complete.ts", "../../../node_modules/tributejs/src/utils.js", "../../../node_modules/tributejs/src/TributeEvents.js", "../../../node_modules/tributejs/src/TributeMenuEvents.js", "../../../node_modules/tributejs/src/TributeRange.js", "../../../node_modules/tributejs/src/TributeSearch.js", "../../../node_modules/tributejs/src/Tribute.js", "../../../node_modules/lodash.merge/index.js", "../../../node_modules/cropperjs/dist/cropper.js", "../../../node_modules/lodash/lodash.js", "../../../node_modules/lazysizes/lazysizes.js", "../../../node_modules/jstz/dist/jstz.js", "../../../node_modules/jstz/index.js", "../../javascript/entrypoints/customer-center/customer-center.js", "../../javascript/customer_center/application.js", "../../../node_modules/cable_ready/dist/cable_ready.js", "../../../node_modules/morphdom/dist/morphdom-esm.js", "../../../node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js", "../../../node_modules/form-request-submit-polyfill/form-request-submit-polyfill.js", "../../../node_modules/@ungap/custom-elements/index.js", "../../../projects/cf_utils/ApplicationCable/index.js", "../../../node_modules/@anycable/web/index.js", "../../../node_modules/@anycable/core/index.js", "../../../node_modules/@anycable/core/channel/index.js", "../../../node_modules/nanoevents/index.js", "../../../node_modules/@anycable/core/protocol/index.js", "../../../node_modules/@anycable/core/stringify-params/index.js", "../../../node_modules/@anycable/core/hub/index.js", "../../../node_modules/@anycable/core/logger/index.js", "../../../node_modules/@anycable/core/encoder/index.js", "../../../node_modules/@anycable/core/action_cable/index.js", "../../../node_modules/@anycable/core/action_cable_ext/index.js", "../../../node_modules/@anycable/core/cable/index.js", "../../../node_modules/@anycable/core/monitor/index.js", "../../../node_modules/@anycable/core/transport/index.js", "../../../node_modules/@anycable/core/websocket/index.js", "../../../node_modules/@anycable/core/create-cable/index.js", "../../../node_modules/@anycable/web/logger/index.js", "../../../node_modules/@anycable/web/monitor/index.js", "../../../projects/cf_utils/ApplicationCable/ActionCableGetConfigShim.js", "../../../node_modules/@anycable/turbo-stream/index.js", "../../../node_modules/@anycable/turbo-stream/channel.js", "../../../node_modules/@anycable/turbo-stream/start.js", "../../../node_modules/@anycable/turbo-stream/stream_source_element.js", "../../../node_modules/@anycable/turbo-stream/snakeize.js", "../../../node_modules/@anycable/turbo-stream/turbo.js", "../../javascript/channels/index.js", "../../../node_modules/@stimulus_reflex/futurism/javascript/futurism_channel.js", "../../../node_modules/@stimulus_reflex/futurism/javascript/elements/futurism_utils.js", "../../../node_modules/@stimulus_reflex/futurism/javascript/elements/futurism_element.js", "../../../node_modules/@stimulus_reflex/futurism/javascript/elements/futurism_table_row.js", "../../../node_modules/@stimulus_reflex/futurism/javascript/elements/futurism_li.js", "../../../node_modules/@stimulus_reflex/futurism/javascript/elements/index.js", "../../../node_modules/@stimulus_reflex/futurism/javascript/utils/crypto.js", "import-glob:./**/*_channel.js", "../../javascript/channels/users_channel.js", "../../javascript/customer_center/controllers/index.js", "../../../node_modules/@hotwired/stimulus/dist/stimulus.js", "../../javascript/controllers/alert_controller.js", "../../javascript/controllers/application_controller.js", "../../javascript/controllers/auto_enable_controller.js", "../../javascript/controllers/autofocus_controller.js", "../../javascript/controllers/classlist_controller.js", "../../javascript/controllers/clipboard_copy_controller.js", "../../../node_modules/@github/clipboard-copy-element/dist/index.esm.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/index.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/enums.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/modifiers/index.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/modifiers/applyStyles.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/dom-utils/getNodeName.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/dom-utils/instanceOf.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/dom-utils/getWindow.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/modifiers/arrow.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/utils/getBasePlacement.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/dom-utils/contains.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/dom-utils/isTableElement.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/dom-utils/getParentNode.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/utils/within.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/utils/math.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/utils/mergePaddingObject.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/utils/getFreshSideObject.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/utils/expandToHashMap.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/modifiers/computeStyles.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/modifiers/eventListeners.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/modifiers/flip.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/utils/getOppositePlacement.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/utils/detectOverflow.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/utils/rectToClientRect.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/utils/computeOffsets.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/utils/getVariation.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/modifiers/hide.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/modifiers/offset.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/modifiers/popperOffsets.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/modifiers/preventOverflow.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/utils/getAltAxis.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/createPopper.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/utils/orderModifiers.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/utils/debounce.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/utils/validateModifiers.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/utils/format.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/utils/uniqueBy.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/utils/mergeByName.js", "../../../node_modules/tippy.js/node_modules/@popperjs/core/lib/popper.js", "../../../node_modules/tippy.js/src/constants.ts", "../../../node_modules/tippy.js/src/utils.ts", "../../../node_modules/tippy.js/src/dom-utils.ts", "../../../node_modules/tippy.js/src/bindGlobalEventListeners.ts", "../../../node_modules/tippy.js/src/browser.ts", "../../../node_modules/tippy.js/src/validation.ts", "../../../node_modules/tippy.js/src/props.ts", "../../../node_modules/tippy.js/src/template.ts", "../../../node_modules/tippy.js/src/createTippy.ts", "../../../node_modules/tippy.js/src/index.ts", "../../../node_modules/tippy.js/src/addons/createSingleton.ts", "../../../node_modules/tippy.js/src/addons/delegate.ts", "../../../node_modules/tippy.js/src/plugins/animateFill.ts", "../../../node_modules/tippy.js/src/plugins/followCursor.ts", "../../../node_modules/tippy.js/src/plugins/inlinePositioning.ts", "../../../node_modules/tippy.js/src/plugins/sticky.ts", "../../../node_modules/tippy.js/build/base.js", "../../javascript/i18n-js/config.js", "../../../node_modules/i18next/dist/esm/i18next.js", "../../../node_modules/@babel/runtime/helpers/esm/typeof.js", "../../../node_modules/@babel/runtime/helpers/esm/objectSpread.js", "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js", "../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js", "../../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js", "../../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js", "../../../node_modules/@babel/runtime/helpers/esm/createClass.js", "../../../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js", "../../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js", "../../../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js", "../../../node_modules/@babel/runtime/helpers/esm/inherits.js", "../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js", "../../javascript/i18n-js/locales/locales.json", "../../../node_modules/js-cookie/dist/js.cookie.mjs", "../../javascript/controllers/affiliates/code_controller.js", "../../javascript/controllers/country_and_region_select_controller.js", "../../javascript/controllers/fields/phone_controller.js", "../../javascript/controllers/fields/phone_verification_controller.js", "../../javascript/controllers/iframe_message_relay_controller.js", "../../javascript/controllers/components/image_loader_controller.js", "../../javascript/controllers/image_file_field_preview_controller.js", "../../javascript/controllers/orders/payment_methods_controller.js", "../../../node_modules/@rails/request.js/src/index.js", "../../../node_modules/@rails/request.js/src/fetch_request.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/verbs.js", "../../javascript/utils/toast.js", "../../javascript/controllers/orders/reactivate_payment_guard_controller.js", "../../javascript/controllers/orders/stripe_payment_controller.js", "../../javascript/controllers/orders/plan_preview_controller.js", "../../javascript/controllers/payment_method_form_controller.js", "../../javascript/controllers/prefetch_handler_controller.js", "../../javascript/controllers/redirect_action_controller.js", "../../javascript/controllers/scroll_to_controller.js", "../../javascript/controllers/mixpanel_controller.js", "../../javascript/controllers/share_controller.js", "../../javascript/utils/hotwire_native.js", "../../javascript/controllers/short_token_controller.js", "../../javascript/controllers/fields/super_select_add_option_controller.js", "../../javascript/controllers/fields/super_select_controller.js", "../../javascript/controllers/toggle_controller.js", "../../../node_modules/stimulus-use/src/index.ts", "../../../node_modules/stimulus-use/src/support/index.ts", "../../../node_modules/stimulus-use/src/use-click-outside/index.ts", "../../../node_modules/stimulus-use/src/use-click-outside/use-click-outside.ts", "../../javascript/controllers/fields/tom_select_controller.js", "../../../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs", "../../../node_modules/@floating-ui/core/dist/floating-ui.core.mjs", "../../../node_modules/@floating-ui/core/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs", "../../../node_modules/@floating-ui/dom/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs", "../../../node_modules/@floating-ui/dom/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs", "../../javascript/controllers/fields/combobox_controller.js", "../../javascript/controllers/tooltip_controller.js", "../../javascript/customer_center/controllers/trix_code_block_controller.js", "../../javascript/controllers/trix_content_links_target_blank_controller.js", "../../javascript/controllers/trix_editor_controller.js", "../../javascript/controllers/truncated_tooltip_controller.js", "../../javascript/controllers/unsaved_changes_controller.js", "../../javascript/trix/index.js", "../../../node_modules/@rails/actiontext/app/javascript/actiontext/index.js", "../../../node_modules/@rails/actiontext/app/javascript/actiontext/attachment_upload.js", "../../../node_modules/trix/src/trix/config/attachments.js", "../../../node_modules/trix/src/trix/config/block_attributes.js", "../../../node_modules/trix/src/trix/config/browser.js", "../../../node_modules/trix/src/trix/config/dompurify.js", "../../../node_modules/trix/src/trix/config/lang.js", "../../../node_modules/trix/src/trix/config/file_size_formatting.js", "../../../node_modules/trix/src/trix/constants.js", "../../../node_modules/trix/src/trix/core/helpers/extend.js", "../../../node_modules/trix/src/trix/core/helpers/dom.js", "../../../node_modules/trix/src/trix/config/input.js", "../../../node_modules/trix/src/trix/config/key_names.js", "../../../node_modules/trix/src/trix/config/parser.js", "../../../node_modules/trix/src/trix/config/text_attributes.js", "../../../node_modules/trix/src/trix/config/toolbar.js", "../../../node_modules/trix/src/trix/config/undo.js", "../../../node_modules/trix/src/trix/config/css.js", "../../../node_modules/trix/src/trix/core/basic_object.js", "../../../node_modules/trix/src/trix/core/utilities/utf16_string.js", "../../../node_modules/trix/src/trix/core/object.js", "../../../node_modules/trix/src/trix/core/helpers/arrays.js", "../../../node_modules/trix/src/trix/core/helpers/bidi.js", "../../../node_modules/trix/src/trix/core/helpers/config.js", "../../../node_modules/trix/src/trix/core/helpers/custom_elements.js", "../../../node_modules/trix/src/trix/core/helpers/events.js", "../../../node_modules/trix/src/trix/core/helpers/functions.js", "../../../node_modules/trix/src/trix/core/helpers/objects.js", "../../../node_modules/trix/src/trix/core/helpers/ranges.js", "../../../node_modules/trix/src/trix/observers/selection_change_observer.js", "../../../node_modules/trix/src/trix/core/helpers/strings.js", "../../../node_modules/trix/src/trix/core/collections/hash.js", "../../../node_modules/trix/src/trix/core/collections/object_group.js", "../../../node_modules/trix/src/trix/core/collections/object_map.js", "../../../node_modules/trix/src/trix/core/collections/element_store.js", "../../../node_modules/trix/src/trix/core/utilities/operation.js", "../../../node_modules/trix/src/trix/views/object_view.js", "../../../node_modules/trix/node_modules/dompurify/dist/purify.es.mjs", "../../../node_modules/trix/src/trix/models/html_sanitizer.js", "../../../node_modules/trix/src/trix/views/attachment_view.js", "../../../node_modules/trix/src/trix/views/previewable_attachment_view.js", "../../../node_modules/trix/src/trix/views/piece_view.js", "../../../node_modules/trix/src/trix/views/text_view.js", "../../../node_modules/trix/src/trix/views/block_view.js", "../../../node_modules/trix/src/trix/views/document_view.js", "../../../node_modules/trix/src/trix/models/piece.js", "../../../node_modules/trix/src/trix/operations/image_preload_operation.js", "../../../node_modules/trix/src/trix/models/attachment.js", "../../../node_modules/trix/src/trix/models/attachment_piece.js", "../../../node_modules/trix/src/trix/models/string_piece.js", "../../../node_modules/trix/src/trix/models/splittable_list.js", "../../../node_modules/trix/src/trix/models/text.js", "../../../node_modules/trix/src/trix/models/block.js", "../../../node_modules/trix/src/trix/models/document.js", "../../../node_modules/trix/src/trix/models/html_parser.js", "../../../node_modules/trix/src/trix/core/serialization.js", "../../../node_modules/trix/src/trix/models/managed_attachment.js", "../../../node_modules/trix/src/trix/models/attachment_manager.js", "../../../node_modules/trix/src/trix/models/line_break_insertion.js", "../../../node_modules/trix/src/trix/models/composition.js", "../../../node_modules/trix/src/trix/models/undo_manager.js", "../../../node_modules/trix/src/trix/filters/filter.js", "../../../node_modules/trix/src/trix/filters/attachment_gallery_filter.js", "../../../node_modules/trix/src/trix/models/editor.js", "../../../node_modules/trix/src/trix/models/location_mapper.js", "../../../node_modules/trix/src/trix/models/point_mapper.js", "../../../node_modules/trix/src/trix/models/selection_manager.js", "../../../node_modules/trix/src/trix/controllers/attachment_editor_controller.js", "../../../node_modules/trix/src/trix/controllers/composition_controller.js", "../../../node_modules/trix/src/trix/controllers/controller.js", "../../../node_modules/trix/src/trix/observers/mutation_observer.js", "../../../node_modules/trix/src/trix/operations/file_verification_operation.js", "../../../node_modules/trix/src/trix/models/flaky_android_keyboard_detector.js", "../../../node_modules/trix/src/trix/controllers/input_controller.js", "../../../node_modules/trix/src/trix/controllers/level_0_input_controller.js", "../../../node_modules/trix/src/trix/controllers/level_2_input_controller.js", "../../../node_modules/trix/src/trix/controllers/toolbar_controller.js", "../../../node_modules/trix/src/trix/controllers/editor_controller.js", "../../../node_modules/trix/src/trix/elements/trix_toolbar_element.js", "../../../node_modules/trix/src/trix/elements/trix_editor_element.js", "../../../node_modules/trix/src/trix/trix.js", "../../../node_modules/trix-embed/app/assets/builds/trix-embed.js", "../../javascript/controllers/web_awesome/alert_controller.js", "../../javascript/controllers/web_awesome/base_controller.js", "../../javascript/controllers/web_awesome/confirm_controller.js", "../../javascript/controllers/web_awesome/dialog_controller.js", "../../javascript/controllers/web_awesome/drawer_controller.js", "../../javascript/controllers/web_awesome/dropdown_menu_controller.js", "../../javascript/controllers/web_awesome/switch_controller.js", "../../javascript/controllers/web_awesome/tab_group_controller.js", "../../javascript/customer_center/controllers/mobile_nav_controller.js", "../../javascript/customer_center/controllers/dark_mode_toggle_controller.js", "../../javascript/customer_center/controllers/community_post_controller.js", "../../javascript/customer_center/controllers/community_post_view_controller.js", "../../javascript/customer_center/controllers/comment_form_controller.js", "../../javascript/customer_center/controllers/confirm_delete_controller.js", "../../javascript/customer_center/controllers/dropdown_controller.js", "../../javascript/customer_center/controllers/lesson_tree_controller.js", "../../javascript/customer_center/controllers/post_form_controller.js", "../../javascript/customer_center/controllers/iframe_resizer_controller.js", "../../javascript/customer_center/controllers/trix_mentions_controller.js", "../../javascript/customer_center/controllers/activity_chart_controller.js", "../../../node_modules/stimulus-chartjs/dist/stimulus-chartjs.es.js", "../../../node_modules/stimulus-chartjs/node_modules/chart.js/auto/auto.mjs", "../../../node_modules/stimulus-chartjs/node_modules/chart.js/dist/chart.mjs", "../../../node_modules/stimulus-chartjs/node_modules/chart.js/dist/chunks/helpers.segment.mjs", "../../javascript/customer_center/controllers/image_crop_controller.js", "../../javascript/customer_center/controllers/toast_controller.js", "../../javascript/customer_center/controllers/direct_image_uploads_controller.js", "../../javascript/customer_center/controllers/lightbox_controller.js", "../../../node_modules/src/lg-events.ts", "../../../node_modules/src/lg-settings.ts", "../../../node_modules/src/lgQuery.ts", "../../../node_modules/src/lg-utils.ts", "../../../node_modules/src/lightgallery.ts", "../../../node_modules/src/index.ts", "../../../node_modules/src/plugins/zoom/lg-zoom-settings.ts", "../../../node_modules/src/lg-events.ts", "../../../node_modules/src/plugins/zoom/lg-zoom.ts", "../../../node_modules/src/plugins/video/lg-video-settings.ts", "../../../node_modules/src/lg-events.ts", "../../../node_modules/src/plugins/video/lg-video-utils.ts", "../../../node_modules/src/plugins/video/lg-video.ts", "../../javascript/customer_center/controllers/video_embeds_controller.js", "../../javascript/customer_center/controllers/emoji_dropdown_controller.js", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/index.js", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/Picker/index.js", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/Picker/Picker.js", "../../../node_modules/emoji-mart/dist/node_modules/@swc/helpers/src/index.js", "../../../node_modules/emoji-mart/dist/node_modules/@swc/helpers/src/_define_property.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/jsx-runtime/src/index.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/dist/preact.module.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/src/constants.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/src/util.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/src/options.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/src/create-element.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/src/component.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/src/create-context.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/src/diff/children.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/src/diff/props.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/src/diff/index.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/src/render.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/src/clone-element.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/src/diff/catch-error.js", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/utils.js", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/helpers/index.js", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/helpers/store.js", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/helpers/native-support.js", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/helpers/frequently-used.js", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/helpers/search-index.js", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/config.js", "../../../node_modules/emoji-mart/dist/packages/emoji-mart-data/i18n/en.json", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/Picker/PickerProps.js", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/icons.js", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/Emoji/index.js", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/Emoji/Emoji.js", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/Emoji/EmojiElement.js", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/HTMLElement/index.js", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/HTMLElement/HTMLElement.js", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/HTMLElement/ShadowElement.js", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/Emoji/EmojiProps.js", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/Navigation/index.js", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/Navigation/Navigation.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/compat/dist/compat.module.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/compat/src/util.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/compat/src/PureComponent.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/compat/src/memo.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/compat/src/forwardRef.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/compat/src/Children.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/compat/src/suspense.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/compat/src/suspense-list.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/compat/src/portals.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/compat/src/render.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/compat/src/index.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/hooks/dist/hooks.module.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/hooks/src/index.js", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/HOCs/index.js", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/HOCs/PureInlineComponent.js", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/Picker/PickerElement.js", "../../../node_modules/emoji-mart/dist/node_modules/@parcel/runtime-js/lib/bundles/runtime-b9bfef6c942a1431.js", "../../javascript/customer_center/controllers/trix_emojis_controller.js", "../../javascript/customer_center/controllers/form_controller.js", "../../javascript/customer_center/controllers/guest_interaction_prompt_controller.js", "../../javascript/customer_center/controllers/scroll_nav_controller.js", "../../../node_modules/@stimulus-components/read-more/dist/stimulus-read-more.mjs", "../../javascript/customer_center/controllers/search_controller.js", "../../javascript/customer_center/controllers/scroll_tabs_controller.js", "../../javascript/customer_center/controllers/notifications_controller.js", "../../javascript/customer_center/controllers/web_push_subscription_controller.js", "../../javascript/customer_center/controllers/web_push_sign_out_controller.js", "../../javascript/customer_center/controllers/web_push_sync_controller.js", "../../javascript/customer_center/controllers/bridge/left_button_controller.js", "../../../node_modules/@hotwired/hotwire-native-bridge/dist/hotwire-native-bridge.js", "../../javascript/customer_center/controllers/bridge/right_button_controller.js", "../../javascript/customer_center/controllers/bridge/form_controller.js", "../../javascript/customer_center/controllers/bridge/menu_controller.js", "../../javascript/customer_center/controllers/bridge/nav_controller.js", "../../javascript/customer_center/controllers/bridge/notification_badge_controller.js", "../../javascript/customer_center/controllers/bridge/notification_token_controller.js", "../../javascript/customer_center/controllers/bridge/notification_permission_controller.js", "../../javascript/customer_center/controllers/bridge/overflow_menu_controller.js", "../../javascript/customer_center/controllers/bridge/reset_app_controller.js", "../../javascript/customer_center/controllers/bridge/review_prompt_controller.js", "../../javascript/customer_center/controllers/bridge/sign_out_controller.js", "../../javascript/customer_center/controllers/bridge/open_settings_controller.js", "../../javascript/customer_center/trix_editor.js", "../../javascript/turbo_boost/index.js", "../../../node_modules/@turbo-boost/streams/app/javascript/version.js", "../../../node_modules/@turbo-boost/streams/app/javascript/schema.js", "../../../node_modules/@turbo-boost/streams/node_modules/idiomorph/dist/idiomorph.esm.js", "../../../node_modules/@turbo-boost/streams/app/javascript/morph.js", "../../../node_modules/@turbo-boost/streams/app/javascript/invoke.js", "../../../node_modules/@turbo-boost/streams/app/javascript/index.js", "../../../node_modules/@turbo-boost/commands/app/javascript/headers.js", "../../../node_modules/@turbo-boost/commands/app/javascript/renderer.js", "../../../node_modules/@turbo-boost/commands/app/javascript/turbo.js", "../../../node_modules/@turbo-boost/commands/app/javascript/schema.js", "../../../node_modules/@turbo-boost/commands/app/javascript/events.js", "../../../node_modules/@turbo-boost/commands/app/javascript/activity.js", "../../../node_modules/@turbo-boost/commands/app/javascript/confirmation.js", "../../../node_modules/@turbo-boost/commands/app/javascript/delegates.js", "../../../node_modules/@turbo-boost/commands/app/javascript/elements.js", "../../../node_modules/@turbo-boost/commands/app/javascript/drivers/form.js", "../../../node_modules/@turbo-boost/commands/app/javascript/lifecycle.js", "../../../node_modules/@turbo-boost/commands/app/javascript/urls.js", "../../../node_modules/@turbo-boost/commands/app/javascript/invoker.js", "../../../node_modules/@turbo-boost/commands/app/javascript/drivers/frame.js", "../../../node_modules/@turbo-boost/commands/app/javascript/drivers/method.js", "../../../node_modules/@turbo-boost/commands/app/javascript/drivers/window.js", "../../../node_modules/@turbo-boost/commands/app/javascript/drivers/index.js", "../../../node_modules/@turbo-boost/commands/app/javascript/logger.js", "../../../node_modules/@turbo-boost/commands/app/javascript/state/observable.js", "../../../node_modules/@turbo-boost/commands/app/javascript/state/page.js", "../../../node_modules/@turbo-boost/commands/app/javascript/state/storage.js", "../../../node_modules/@turbo-boost/commands/app/javascript/state/index.js", "../../../node_modules/@turbo-boost/commands/app/javascript/uuids.js", "../../../node_modules/@turbo-boost/commands/app/javascript/version.js", "../../../node_modules/@turbo-boost/commands/app/javascript/index.js", "../../../node_modules/@turbo-boost/elements/app/javascript/index.js", "../../../node_modules/@turbo-boost/elements/node_modules/@turbo-boost/devtools/src/version.js", "../../../node_modules/@turbo-boost/elements/node_modules/@turbo-boost/devtools/src/utils/dom.js", "../../../node_modules/@turbo-boost/elements/node_modules/@turbo-boost/devtools/src/elements/devtool_element.js", "../../../node_modules/@turbo-boost/elements/node_modules/@turbo-boost/devtools/src/elements/supervisor_element.js", "../../../node_modules/@turbo-boost/elements/node_modules/@turbo-boost/devtools/src/elements/tooltip_element.js", "../../../node_modules/@turbo-boost/elements/node_modules/@turbo-boost/devtools/src/dependencies.js", "../../../node_modules/@turbo-boost/elements/node_modules/@turbo-boost/devtools/src/supervisor.js", "../../../node_modules/@turbo-boost/elements/node_modules/@turbo-boost/devtools/src/devtool.js", "../../../node_modules/@turbo-boost/elements/node_modules/@turbo-boost/devtools/src/index.js", "../../../node_modules/@turbo-boost/elements/app/javascript/version.js", "../../../node_modules/@turbo-boost/elements/app/javascript/elements/turbo_boost_element/index.js", "../../../node_modules/@turbo-boost/elements/app/javascript/elements/toggle_elements/toggle_element/index.js", "../../../node_modules/@turbo-boost/elements/app/javascript/elements/toggle_elements/target_element/index.js", "../../../node_modules/@turbo-boost/elements/app/javascript/elements/toggle_elements/trigger_element/focus.js", "../../../node_modules/@turbo-boost/elements/app/javascript/elements/toggle_elements/trigger_element/index.js", "../../../node_modules/@turbo-boost/elements/app/javascript/elements/index.js", "../../javascript/turbo_boost/commands.js", "../../javascript/account/rails_ujs_overrides.js", "../../javascript/account/turbo_confirm.js", "../../../node_modules/debounced/src/index.js", "../../../node_modules/debounced/src/events.js"],
  "sourcesContent": ["", "/*!\n * jQuery JavaScript Library v3.5.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2020-05-04T22:49Z\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      // Support: Chrome <=57, Firefox <=52\n      // In some browsers, typeof returns \"function\" for HTML <object> elements\n      // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n      // We don't want to classify *any* DOM node as a function.\n      return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n  };\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.5.1\",\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[ 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( \" \" ),\nfunction( _i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\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.5\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: 2020-03-14\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.namespaceURI,\n\t\tdocElem = ( 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  return 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 master Deferred\n\t\t\tmaster = 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\tmaster.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, master.done( updateFunc( i ) ).resolve, master.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 ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.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 ), master.reject );\n\t\t}\n\n\t\treturn master.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\tvalue :\n\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\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\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\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\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\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\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\t\t\t\t\t\treturn 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\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\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\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\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\";\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\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 ) > 3;\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\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\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\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\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/* 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\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\t\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\"\" :\n\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\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 = (\n\t\t\t\t\tdataPriv.get( cur, \"events\" ) || Object.create( null )\n\t\t\t\t)[ 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;\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\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\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} )\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} )\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\toriginAnchor.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\t\tjQuery( callbackContext ) :\n\t\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\n\t\t\tif ( !isSuccess && jQuery.inArray( \"script\", s.dataTypes ) > -1 ) {\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\tif ( typeof props.top === \"number\" ) {\n\t\t\t\tprops.top += \"px\";\n\t\t\t}\n\t\t\tif ( typeof props.left === \"number\" ) {\n\t\t\t\tprops.left += \"px\";\n\t\t\t}\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( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( 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( ( \"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// 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", "import jquery from 'jquery'\n\nfunction defineJQuery(target) {\n  if (typeof target !== 'undefined' && target.$ === undefined) {\n    target.$ = target.jQuery = target.jquery = jquery\n  }\n}\n\n// Define jQuery in window scope\nif (typeof window !== 'undefined') {\n  defineJQuery(window)\n}\n\n// Define jQuery in global scope\nif (typeof global !== 'undefined') {\n  defineJQuery(global)\n}\n", "/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/main/actionview/app/assets/javascripts\nReleased under the MIT license\n */;\n\n(function() {\n  var context = this;\n\n  (function() {\n    (function() {\n      this.Rails = {\n        linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n        buttonClickSelector: {\n          selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',\n          exclude: 'form button'\n        },\n        inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n        formSubmitSelector: 'form:not([data-turbo=true])',\n        formInputClickSelector: 'form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n        formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n        formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n        fileInputSelector: 'input[name][type=file]:not([disabled])',\n        linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n        buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'\n      };\n\n    }).call(this);\n  }).call(context);\n\n  var Rails = context.Rails;\n\n  (function() {\n    (function() {\n      var nonce;\n\n      nonce = null;\n\n      Rails.loadCSPNonce = function() {\n        var ref;\n        return nonce = (ref = document.querySelector(\"meta[name=csp-nonce]\")) != null ? ref.content : void 0;\n      };\n\n      Rails.cspNonce = function() {\n        return nonce != null ? nonce : Rails.loadCSPNonce();\n      };\n\n    }).call(this);\n    (function() {\n      var expando, m;\n\n      m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\n      Rails.matches = function(element, selector) {\n        if (selector.exclude != null) {\n          return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n        } else {\n          return m.call(element, selector);\n        }\n      };\n\n      expando = '_ujsData';\n\n      Rails.getData = function(element, key) {\n        var ref;\n        return (ref = element[expando]) != null ? ref[key] : void 0;\n      };\n\n      Rails.setData = function(element, key, value) {\n        if (element[expando] == null) {\n          element[expando] = {};\n        }\n        return element[expando][key] = value;\n      };\n\n      Rails.$ = function(selector) {\n        return Array.prototype.slice.call(document.querySelectorAll(selector));\n      };\n\n    }).call(this);\n    (function() {\n      var $, csrfParam, csrfToken;\n\n      $ = Rails.$;\n\n      csrfToken = Rails.csrfToken = function() {\n        var meta;\n        meta = document.querySelector('meta[name=csrf-token]');\n        return meta && meta.content;\n      };\n\n      csrfParam = Rails.csrfParam = function() {\n        var meta;\n        meta = document.querySelector('meta[name=csrf-param]');\n        return meta && meta.content;\n      };\n\n      Rails.CSRFProtection = function(xhr) {\n        var token;\n        token = csrfToken();\n        if (token != null) {\n          return xhr.setRequestHeader('X-CSRF-Token', token);\n        }\n      };\n\n      Rails.refreshCSRFTokens = function() {\n        var param, token;\n        token = csrfToken();\n        param = csrfParam();\n        if ((token != null) && (param != null)) {\n          return $('form input[name=\"' + param + '\"]').forEach(function(input) {\n            return input.value = token;\n          });\n        }\n      };\n\n    }).call(this);\n    (function() {\n      var CustomEvent, fire, matches, preventDefault;\n\n      matches = Rails.matches;\n\n      CustomEvent = window.CustomEvent;\n\n      if (typeof CustomEvent !== 'function') {\n        CustomEvent = function(event, params) {\n          var evt;\n          evt = document.createEvent('CustomEvent');\n          evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n          return evt;\n        };\n        CustomEvent.prototype = window.Event.prototype;\n        preventDefault = CustomEvent.prototype.preventDefault;\n        CustomEvent.prototype.preventDefault = function() {\n          var result;\n          result = preventDefault.call(this);\n          if (this.cancelable && !this.defaultPrevented) {\n            Object.defineProperty(this, 'defaultPrevented', {\n              get: function() {\n                return true;\n              }\n            });\n          }\n          return result;\n        };\n      }\n\n      fire = Rails.fire = function(obj, name, data) {\n        var event;\n        event = new CustomEvent(name, {\n          bubbles: true,\n          cancelable: true,\n          detail: data\n        });\n        obj.dispatchEvent(event);\n        return !event.defaultPrevented;\n      };\n\n      Rails.stopEverything = function(e) {\n        fire(e.target, 'ujs:everythingStopped');\n        e.preventDefault();\n        e.stopPropagation();\n        return e.stopImmediatePropagation();\n      };\n\n      Rails.delegate = function(element, selector, eventType, handler) {\n        return element.addEventListener(eventType, function(e) {\n          var target;\n          target = e.target;\n          while (!(!(target instanceof Element) || matches(target, selector))) {\n            target = target.parentNode;\n          }\n          if (target instanceof Element && handler.call(target, e) === false) {\n            e.preventDefault();\n            return e.stopPropagation();\n          }\n        });\n      };\n\n    }).call(this);\n    (function() {\n      var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;\n\n      cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;\n\n      AcceptHeaders = {\n        '*': '*/*',\n        text: 'text/plain',\n        html: 'text/html',\n        xml: 'application/xml, text/xml',\n        json: 'application/json, text/javascript',\n        script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'\n      };\n\n      Rails.ajax = function(options) {\n        var xhr;\n        options = prepareOptions(options);\n        xhr = createXHR(options, function() {\n          var ref, response;\n          response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));\n          if (Math.floor(xhr.status / 100) === 2) {\n            if (typeof options.success === \"function\") {\n              options.success(response, xhr.statusText, xhr);\n            }\n          } else {\n            if (typeof options.error === \"function\") {\n              options.error(response, xhr.statusText, xhr);\n            }\n          }\n          return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n        });\n        if ((options.beforeSend != null) && !options.beforeSend(xhr, options)) {\n          return false;\n        }\n        if (xhr.readyState === XMLHttpRequest.OPENED) {\n          return xhr.send(options.data);\n        }\n      };\n\n      prepareOptions = function(options) {\n        options.url = options.url || location.href;\n        options.type = options.type.toUpperCase();\n        if (options.type === 'GET' && options.data) {\n          if (options.url.indexOf('?') < 0) {\n            options.url += '?' + options.data;\n          } else {\n            options.url += '&' + options.data;\n          }\n        }\n        if (AcceptHeaders[options.dataType] == null) {\n          options.dataType = '*';\n        }\n        options.accept = AcceptHeaders[options.dataType];\n        if (options.dataType !== '*') {\n          options.accept += ', */*; q=0.01';\n        }\n        return options;\n      };\n\n      createXHR = function(options, done) {\n        var xhr;\n        xhr = new XMLHttpRequest();\n        xhr.open(options.type, options.url, true);\n        xhr.setRequestHeader('Accept', options.accept);\n        if (typeof options.data === 'string') {\n          xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n        }\n        if (!options.crossDomain) {\n          xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n          CSRFProtection(xhr);\n        }\n        xhr.withCredentials = !!options.withCredentials;\n        xhr.onreadystatechange = function() {\n          if (xhr.readyState === XMLHttpRequest.DONE) {\n            return done(xhr);\n          }\n        };\n        return xhr;\n      };\n\n      processResponse = function(response, type) {\n        var parser, script;\n        if (typeof response === 'string' && typeof type === 'string') {\n          if (type.match(/\\bjson\\b/)) {\n            try {\n              response = JSON.parse(response);\n            } catch (error) {}\n          } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n            script = document.createElement('script');\n            script.setAttribute('nonce', cspNonce());\n            script.text = response;\n            document.head.appendChild(script).parentNode.removeChild(script);\n          } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n            parser = new DOMParser();\n            type = type.replace(/;.+/, '');\n            try {\n              response = parser.parseFromString(response, type);\n            } catch (error) {}\n          }\n        }\n        return response;\n      };\n\n      Rails.href = function(element) {\n        return element.href;\n      };\n\n      Rails.isCrossDomain = function(url) {\n        var e, originAnchor, urlAnchor;\n        originAnchor = document.createElement('a');\n        originAnchor.href = location.href;\n        urlAnchor = document.createElement('a');\n        try {\n          urlAnchor.href = url;\n          return !(((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host) || (originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host));\n        } catch (error) {\n          e = error;\n          return true;\n        }\n      };\n\n    }).call(this);\n    (function() {\n      var matches, toArray;\n\n      matches = Rails.matches;\n\n      toArray = function(e) {\n        return Array.prototype.slice.call(e);\n      };\n\n      Rails.serializeElement = function(element, additionalParam) {\n        var inputs, params;\n        inputs = [element];\n        if (matches(element, 'form')) {\n          inputs = toArray(element.elements);\n        }\n        params = [];\n        inputs.forEach(function(input) {\n          if (!input.name || input.disabled) {\n            return;\n          }\n          if (matches(input, 'fieldset[disabled] *')) {\n            return;\n          }\n          if (matches(input, 'select')) {\n            return toArray(input.options).forEach(function(option) {\n              if (option.selected) {\n                return params.push({\n                  name: input.name,\n                  value: option.value\n                });\n              }\n            });\n          } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {\n            return params.push({\n              name: input.name,\n              value: input.value\n            });\n          }\n        });\n        if (additionalParam) {\n          params.push(additionalParam);\n        }\n        return params.map(function(param) {\n          if (param.name != null) {\n            return (encodeURIComponent(param.name)) + \"=\" + (encodeURIComponent(param.value));\n          } else {\n            return param;\n          }\n        }).join('&');\n      };\n\n      Rails.formElements = function(form, selector) {\n        if (matches(form, 'form')) {\n          return toArray(form.elements).filter(function(el) {\n            return matches(el, selector);\n          });\n        } else {\n          return toArray(form.querySelectorAll(selector));\n        }\n      };\n\n    }).call(this);\n    (function() {\n      var allowAction, fire, stopEverything;\n\n      fire = Rails.fire, stopEverything = Rails.stopEverything;\n\n      Rails.handleConfirm = function(e) {\n        if (!allowAction(this)) {\n          return stopEverything(e);\n        }\n      };\n\n      Rails.confirm = function(message, element) {\n        return confirm(message);\n      };\n\n      allowAction = function(element) {\n        var answer, callback, message;\n        message = element.getAttribute('data-confirm');\n        if (!message) {\n          return true;\n        }\n        answer = false;\n        if (fire(element, 'confirm')) {\n          try {\n            answer = Rails.confirm(message, element);\n          } catch (error) {}\n          callback = fire(element, 'confirm:complete', [answer]);\n        }\n        return answer && callback;\n      };\n\n    }).call(this);\n    (function() {\n      var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, isXhrRedirect, matches, setData, stopEverything;\n\n      matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements;\n\n      Rails.handleDisabledElement = function(e) {\n        var element;\n        element = this;\n        if (element.disabled) {\n          return stopEverything(e);\n        }\n      };\n\n      Rails.enableElement = function(e) {\n        var element;\n        if (e instanceof Event) {\n          if (isXhrRedirect(e)) {\n            return;\n          }\n          element = e.target;\n        } else {\n          element = e;\n        }\n        if (matches(element, Rails.linkDisableSelector)) {\n          return enableLinkElement(element);\n        } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {\n          return enableFormElement(element);\n        } else if (matches(element, Rails.formSubmitSelector)) {\n          return enableFormElements(element);\n        }\n      };\n\n      Rails.disableElement = function(e) {\n        var element;\n        element = e instanceof Event ? e.target : e;\n        if (matches(element, Rails.linkDisableSelector)) {\n          return disableLinkElement(element);\n        } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {\n          return disableFormElement(element);\n        } else if (matches(element, Rails.formSubmitSelector)) {\n          return disableFormElements(element);\n        }\n      };\n\n      disableLinkElement = function(element) {\n        var replacement;\n        if (getData(element, 'ujs:disabled')) {\n          return;\n        }\n        replacement = element.getAttribute('data-disable-with');\n        if (replacement != null) {\n          setData(element, 'ujs:enable-with', element.innerHTML);\n          element.innerHTML = replacement;\n        }\n        element.addEventListener('click', stopEverything);\n        return setData(element, 'ujs:disabled', true);\n      };\n\n      enableLinkElement = function(element) {\n        var originalText;\n        originalText = getData(element, 'ujs:enable-with');\n        if (originalText != null) {\n          element.innerHTML = originalText;\n          setData(element, 'ujs:enable-with', null);\n        }\n        element.removeEventListener('click', stopEverything);\n        return setData(element, 'ujs:disabled', null);\n      };\n\n      disableFormElements = function(form) {\n        return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);\n      };\n\n      disableFormElement = function(element) {\n        var replacement;\n        if (getData(element, 'ujs:disabled')) {\n          return;\n        }\n        replacement = element.getAttribute('data-disable-with');\n        if (replacement != null) {\n          if (matches(element, 'button')) {\n            setData(element, 'ujs:enable-with', element.innerHTML);\n            element.innerHTML = replacement;\n          } else {\n            setData(element, 'ujs:enable-with', element.value);\n            element.value = replacement;\n          }\n        }\n        element.disabled = true;\n        return setData(element, 'ujs:disabled', true);\n      };\n\n      enableFormElements = function(form) {\n        return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);\n      };\n\n      enableFormElement = function(element) {\n        var originalText;\n        originalText = getData(element, 'ujs:enable-with');\n        if (originalText != null) {\n          if (matches(element, 'button')) {\n            element.innerHTML = originalText;\n          } else {\n            element.value = originalText;\n          }\n          setData(element, 'ujs:enable-with', null);\n        }\n        element.disabled = false;\n        return setData(element, 'ujs:disabled', null);\n      };\n\n      isXhrRedirect = function(event) {\n        var ref, xhr;\n        xhr = (ref = event.detail) != null ? ref[0] : void 0;\n        return (xhr != null ? xhr.getResponseHeader(\"X-Xhr-Redirect\") : void 0) != null;\n      };\n\n    }).call(this);\n    (function() {\n      var stopEverything;\n\n      stopEverything = Rails.stopEverything;\n\n      Rails.handleMethod = function(e) {\n        var csrfParam, csrfToken, form, formContent, href, link, method;\n        link = this;\n        method = link.getAttribute('data-method');\n        if (!method) {\n          return;\n        }\n        href = Rails.href(link);\n        csrfToken = Rails.csrfToken();\n        csrfParam = Rails.csrfParam();\n        form = document.createElement('form');\n        formContent = \"<input name='_method' value='\" + method + \"' type='hidden' />\";\n        if ((csrfParam != null) && (csrfToken != null) && !Rails.isCrossDomain(href)) {\n          formContent += \"<input name='\" + csrfParam + \"' value='\" + csrfToken + \"' type='hidden' />\";\n        }\n        formContent += '<input type=\"submit\" />';\n        form.method = 'post';\n        form.action = href;\n        form.target = link.target;\n        form.innerHTML = formContent;\n        form.style.display = 'none';\n        document.body.appendChild(form);\n        form.querySelector('[type=\"submit\"]').click();\n        return stopEverything(e);\n      };\n\n    }).call(this);\n    (function() {\n      var ajax, fire, getData, isCrossDomain, isRemote, matches, serializeElement, setData, stopEverything,\n        slice = [].slice;\n\n      matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement;\n\n      isRemote = function(element) {\n        var value;\n        value = element.getAttribute('data-remote');\n        return (value != null) && value !== 'false';\n      };\n\n      Rails.handleRemote = function(e) {\n        var button, data, dataType, element, method, url, withCredentials;\n        element = this;\n        if (!isRemote(element)) {\n          return true;\n        }\n        if (!fire(element, 'ajax:before')) {\n          fire(element, 'ajax:stopped');\n          return false;\n        }\n        withCredentials = element.getAttribute('data-with-credentials');\n        dataType = element.getAttribute('data-type') || 'script';\n        if (matches(element, Rails.formSubmitSelector)) {\n          button = getData(element, 'ujs:submit-button');\n          method = getData(element, 'ujs:submit-button-formmethod') || element.method;\n          url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;\n          if (method.toUpperCase() === 'GET') {\n            url = url.replace(/\\?.*$/, '');\n          }\n          if (element.enctype === 'multipart/form-data') {\n            data = new FormData(element);\n            if (button != null) {\n              data.append(button.name, button.value);\n            }\n          } else {\n            data = serializeElement(element, button);\n          }\n          setData(element, 'ujs:submit-button', null);\n          setData(element, 'ujs:submit-button-formmethod', null);\n          setData(element, 'ujs:submit-button-formaction', null);\n        } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {\n          method = element.getAttribute('data-method');\n          url = element.getAttribute('data-url');\n          data = serializeElement(element, element.getAttribute('data-params'));\n        } else {\n          method = element.getAttribute('data-method');\n          url = Rails.href(element);\n          data = element.getAttribute('data-params');\n        }\n        ajax({\n          type: method || 'GET',\n          url: url,\n          data: data,\n          dataType: dataType,\n          beforeSend: function(xhr, options) {\n            if (fire(element, 'ajax:beforeSend', [xhr, options])) {\n              return fire(element, 'ajax:send', [xhr]);\n            } else {\n              fire(element, 'ajax:stopped');\n              return false;\n            }\n          },\n          success: function() {\n            var args;\n            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n            return fire(element, 'ajax:success', args);\n          },\n          error: function() {\n            var args;\n            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n            return fire(element, 'ajax:error', args);\n          },\n          complete: function() {\n            var args;\n            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n            return fire(element, 'ajax:complete', args);\n          },\n          crossDomain: isCrossDomain(url),\n          withCredentials: (withCredentials != null) && withCredentials !== 'false'\n        });\n        return stopEverything(e);\n      };\n\n      Rails.formSubmitButtonClick = function(e) {\n        var button, form;\n        button = this;\n        form = button.form;\n        if (!form) {\n          return;\n        }\n        if (button.name) {\n          setData(form, 'ujs:submit-button', {\n            name: button.name,\n            value: button.value\n          });\n        }\n        setData(form, 'ujs:formnovalidate-button', button.formNoValidate);\n        setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));\n        return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));\n      };\n\n      Rails.preventInsignificantClick = function(e) {\n        var data, insignificantMetaClick, link, metaClick, method, nonPrimaryMouseClick;\n        link = this;\n        method = (link.getAttribute('data-method') || 'GET').toUpperCase();\n        data = link.getAttribute('data-params');\n        metaClick = e.metaKey || e.ctrlKey;\n        insignificantMetaClick = metaClick && method === 'GET' && !data;\n        nonPrimaryMouseClick = (e.button != null) && e.button !== 0;\n        if (nonPrimaryMouseClick || insignificantMetaClick) {\n          return e.stopImmediatePropagation();\n        }\n      };\n\n    }).call(this);\n    (function() {\n      var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, loadCSPNonce, preventInsignificantClick, refreshCSRFTokens;\n\n      fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, loadCSPNonce = Rails.loadCSPNonce, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;\n\n      if ((typeof jQuery !== \"undefined\" && jQuery !== null) && (jQuery.ajax != null)) {\n        if (jQuery.rails) {\n          throw new Error('If you load both jquery_ujs and rails-ujs, use rails-ujs only.');\n        }\n        jQuery.rails = Rails;\n        jQuery.ajaxPrefilter(function(options, originalOptions, xhr) {\n          if (!options.crossDomain) {\n            return CSRFProtection(xhr);\n          }\n        });\n      }\n\n      Rails.start = function() {\n        if (window._rails_loaded) {\n          throw new Error('rails-ujs has already been loaded!');\n        }\n        window.addEventListener('pageshow', function() {\n          $(Rails.formEnableSelector).forEach(function(el) {\n            if (getData(el, 'ujs:disabled')) {\n              return enableElement(el);\n            }\n          });\n          return $(Rails.linkDisableSelector).forEach(function(el) {\n            if (getData(el, 'ujs:disabled')) {\n              return enableElement(el);\n            }\n          });\n        });\n        delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);\n        delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);\n        delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);\n        delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);\n        delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);\n        delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);\n        delegate(document, Rails.linkClickSelector, 'click', handleConfirm);\n        delegate(document, Rails.linkClickSelector, 'click', disableElement);\n        delegate(document, Rails.linkClickSelector, 'click', handleRemote);\n        delegate(document, Rails.linkClickSelector, 'click', handleMethod);\n        delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);\n        delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);\n        delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);\n        delegate(document, Rails.buttonClickSelector, 'click', disableElement);\n        delegate(document, Rails.buttonClickSelector, 'click', handleRemote);\n        delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);\n        delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);\n        delegate(document, Rails.inputChangeSelector, 'change', handleRemote);\n        delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);\n        delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);\n        delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);\n        delegate(document, Rails.formSubmitSelector, 'submit', function(e) {\n          return setTimeout((function() {\n            return disableElement(e);\n          }), 13);\n        });\n        delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);\n        delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);\n        delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);\n        delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);\n        delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);\n        delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);\n        document.addEventListener('DOMContentLoaded', refreshCSRFTokens);\n        document.addEventListener('DOMContentLoaded', loadCSPNonce);\n        return window._rails_loaded = true;\n      };\n\n      if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {\n        Rails.start();\n      }\n\n    }).call(this);\n  }).call(this);\n\n  if (typeof module === \"object\" && module.exports) {\n    module.exports = Rails;\n  } else if (typeof define === \"function\" && define.amd) {\n    define(Rails);\n  }\n}).call(this);\n", "(function(global, factory) {\n  typeof exports === \"object\" && typeof module !== \"undefined\" ? factory(exports) : typeof define === \"function\" && define.amd ? define([ \"exports\" ], factory) : factory(global.ActiveStorage = {});\n})(this, function(exports) {\n  \"use strict\";\n  function createCommonjsModule(fn, module) {\n    return module = {\n      exports: {}\n    }, fn(module, module.exports), module.exports;\n  }\n  var sparkMd5 = createCommonjsModule(function(module, exports) {\n    (function(factory) {\n      {\n        module.exports = factory();\n      }\n    })(function(undefined) {\n      var hex_chr = [ \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\" ];\n      function md5cycle(x, k) {\n        var a = x[0], b = x[1], c = x[2], d = x[3];\n        a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n        a = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n        d = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n        c = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n        b = (b << 22 | b >>> 10) + c | 0;\n        a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n        a = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n        d = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n        c = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n        b = (b << 22 | b >>> 10) + c | 0;\n        a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n        a = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n        d = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[10] - 42063 | 0;\n        c = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n        b = (b << 22 | b >>> 10) + c | 0;\n        a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n        a = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n        d = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n        c = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n        b = (b << 22 | b >>> 10) + c | 0;\n        a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n        a = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n        d = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n        c = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n        b = (b << 20 | b >>> 12) + c | 0;\n        a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n        a = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n        d = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n        c = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n        b = (b << 20 | b >>> 12) + c | 0;\n        a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n        a = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n        d = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n        c = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n        b = (b << 20 | b >>> 12) + c | 0;\n        a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n        a = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n        d = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n        c = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n        b = (b << 20 | b >>> 12) + c | 0;\n        a += (b ^ c ^ d) + k[5] - 378558 | 0;\n        a = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n        d = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n        c = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n        b = (b << 23 | b >>> 9) + c | 0;\n        a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n        a = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n        d = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n        c = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n        b = (b << 23 | b >>> 9) + c | 0;\n        a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n        a = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n        d = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n        c = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n        b = (b << 23 | b >>> 9) + c | 0;\n        a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n        a = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n        d = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n        c = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n        b = (b << 23 | b >>> 9) + c | 0;\n        a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n        a = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n        d = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n        c = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n        b = (b << 21 | b >>> 11) + c | 0;\n        a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n        a = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n        d = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n        c = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n        b = (b << 21 | b >>> 11) + c | 0;\n        a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n        a = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n        d = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n        c = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n        b = (b << 21 | b >>> 11) + c | 0;\n        a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n        a = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n        d = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n        c = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n        b = (b << 21 | b >>> 11) + c | 0;\n        x[0] = a + x[0] | 0;\n        x[1] = b + x[1] | 0;\n        x[2] = c + x[2] | 0;\n        x[3] = d + x[3] | 0;\n      }\n      function md5blk(s) {\n        var md5blks = [], i;\n        for (i = 0; i < 64; i += 4) {\n          md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n        }\n        return md5blks;\n      }\n      function md5blk_array(a) {\n        var md5blks = [], i;\n        for (i = 0; i < 64; i += 4) {\n          md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n        }\n        return md5blks;\n      }\n      function md51(s) {\n        var n = s.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n        for (i = 64; i <= n; i += 64) {\n          md5cycle(state, md5blk(s.substring(i - 64, i)));\n        }\n        s = s.substring(i - 64);\n        length = s.length;\n        tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n        for (i = 0; i < length; i += 1) {\n          tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n        }\n        tail[i >> 2] |= 128 << (i % 4 << 3);\n        if (i > 55) {\n          md5cycle(state, tail);\n          for (i = 0; i < 16; i += 1) {\n            tail[i] = 0;\n          }\n        }\n        tmp = n * 8;\n        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n        lo = parseInt(tmp[2], 16);\n        hi = parseInt(tmp[1], 16) || 0;\n        tail[14] = lo;\n        tail[15] = hi;\n        md5cycle(state, tail);\n        return state;\n      }\n      function md51_array(a) {\n        var n = a.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n        for (i = 64; i <= n; i += 64) {\n          md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n        }\n        a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n        length = a.length;\n        tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n        for (i = 0; i < length; i += 1) {\n          tail[i >> 2] |= a[i] << (i % 4 << 3);\n        }\n        tail[i >> 2] |= 128 << (i % 4 << 3);\n        if (i > 55) {\n          md5cycle(state, tail);\n          for (i = 0; i < 16; i += 1) {\n            tail[i] = 0;\n          }\n        }\n        tmp = n * 8;\n        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n        lo = parseInt(tmp[2], 16);\n        hi = parseInt(tmp[1], 16) || 0;\n        tail[14] = lo;\n        tail[15] = hi;\n        md5cycle(state, tail);\n        return state;\n      }\n      function rhex(n) {\n        var s = \"\", j;\n        for (j = 0; j < 4; j += 1) {\n          s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n        }\n        return s;\n      }\n      function hex(x) {\n        var i;\n        for (i = 0; i < x.length; i += 1) {\n          x[i] = rhex(x[i]);\n        }\n        return x.join(\"\");\n      }\n      if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n      if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n        (function() {\n          function clamp(val, length) {\n            val = val | 0 || 0;\n            if (val < 0) {\n              return Math.max(val + length, 0);\n            }\n            return Math.min(val, length);\n          }\n          ArrayBuffer.prototype.slice = function(from, to) {\n            var length = this.byteLength, begin = clamp(from, length), end = length, num, target, targetArray, sourceArray;\n            if (to !== undefined) {\n              end = clamp(to, length);\n            }\n            if (begin > end) {\n              return new ArrayBuffer(0);\n            }\n            num = end - begin;\n            target = new ArrayBuffer(num);\n            targetArray = new Uint8Array(target);\n            sourceArray = new Uint8Array(this, begin, num);\n            targetArray.set(sourceArray);\n            return target;\n          };\n        })();\n      }\n      function toUtf8(str) {\n        if (/[\\u0080-\\uFFFF]/.test(str)) {\n          str = unescape(encodeURIComponent(str));\n        }\n        return str;\n      }\n      function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n        var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i;\n        for (i = 0; i < length; i += 1) {\n          arr[i] = str.charCodeAt(i);\n        }\n        return returnUInt8Array ? arr : buff;\n      }\n      function arrayBuffer2Utf8Str(buff) {\n        return String.fromCharCode.apply(null, new Uint8Array(buff));\n      }\n      function concatenateArrayBuffers(first, second, returnUInt8Array) {\n        var result = new Uint8Array(first.byteLength + second.byteLength);\n        result.set(new Uint8Array(first));\n        result.set(new Uint8Array(second), first.byteLength);\n        return returnUInt8Array ? result : result.buffer;\n      }\n      function hexToBinaryString(hex) {\n        var bytes = [], length = hex.length, x;\n        for (x = 0; x < length - 1; x += 2) {\n          bytes.push(parseInt(hex.substr(x, 2), 16));\n        }\n        return String.fromCharCode.apply(String, bytes);\n      }\n      function SparkMD5() {\n        this.reset();\n      }\n      SparkMD5.prototype.append = function(str) {\n        this.appendBinary(toUtf8(str));\n        return this;\n      };\n      SparkMD5.prototype.appendBinary = function(contents) {\n        this._buff += contents;\n        this._length += contents.length;\n        var length = this._buff.length, i;\n        for (i = 64; i <= length; i += 64) {\n          md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n        }\n        this._buff = this._buff.substring(i - 64);\n        return this;\n      };\n      SparkMD5.prototype.end = function(raw) {\n        var buff = this._buff, length = buff.length, i, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], ret;\n        for (i = 0; i < length; i += 1) {\n          tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n        }\n        this._finish(tail, length);\n        ret = hex(this._hash);\n        if (raw) {\n          ret = hexToBinaryString(ret);\n        }\n        this.reset();\n        return ret;\n      };\n      SparkMD5.prototype.reset = function() {\n        this._buff = \"\";\n        this._length = 0;\n        this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n        return this;\n      };\n      SparkMD5.prototype.getState = function() {\n        return {\n          buff: this._buff,\n          length: this._length,\n          hash: this._hash\n        };\n      };\n      SparkMD5.prototype.setState = function(state) {\n        this._buff = state.buff;\n        this._length = state.length;\n        this._hash = state.hash;\n        return this;\n      };\n      SparkMD5.prototype.destroy = function() {\n        delete this._hash;\n        delete this._buff;\n        delete this._length;\n      };\n      SparkMD5.prototype._finish = function(tail, length) {\n        var i = length, tmp, lo, hi;\n        tail[i >> 2] |= 128 << (i % 4 << 3);\n        if (i > 55) {\n          md5cycle(this._hash, tail);\n          for (i = 0; i < 16; i += 1) {\n            tail[i] = 0;\n          }\n        }\n        tmp = this._length * 8;\n        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n        lo = parseInt(tmp[2], 16);\n        hi = parseInt(tmp[1], 16) || 0;\n        tail[14] = lo;\n        tail[15] = hi;\n        md5cycle(this._hash, tail);\n      };\n      SparkMD5.hash = function(str, raw) {\n        return SparkMD5.hashBinary(toUtf8(str), raw);\n      };\n      SparkMD5.hashBinary = function(content, raw) {\n        var hash = md51(content), ret = hex(hash);\n        return raw ? hexToBinaryString(ret) : ret;\n      };\n      SparkMD5.ArrayBuffer = function() {\n        this.reset();\n      };\n      SparkMD5.ArrayBuffer.prototype.append = function(arr) {\n        var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i;\n        this._length += arr.byteLength;\n        for (i = 64; i <= length; i += 64) {\n          md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n        }\n        this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n        return this;\n      };\n      SparkMD5.ArrayBuffer.prototype.end = function(raw) {\n        var buff = this._buff, length = buff.length, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], i, ret;\n        for (i = 0; i < length; i += 1) {\n          tail[i >> 2] |= buff[i] << (i % 4 << 3);\n        }\n        this._finish(tail, length);\n        ret = hex(this._hash);\n        if (raw) {\n          ret = hexToBinaryString(ret);\n        }\n        this.reset();\n        return ret;\n      };\n      SparkMD5.ArrayBuffer.prototype.reset = function() {\n        this._buff = new Uint8Array(0);\n        this._length = 0;\n        this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n        return this;\n      };\n      SparkMD5.ArrayBuffer.prototype.getState = function() {\n        var state = SparkMD5.prototype.getState.call(this);\n        state.buff = arrayBuffer2Utf8Str(state.buff);\n        return state;\n      };\n      SparkMD5.ArrayBuffer.prototype.setState = function(state) {\n        state.buff = utf8Str2ArrayBuffer(state.buff, true);\n        return SparkMD5.prototype.setState.call(this, state);\n      };\n      SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n      SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n      SparkMD5.ArrayBuffer.hash = function(arr, raw) {\n        var hash = md51_array(new Uint8Array(arr)), ret = hex(hash);\n        return raw ? hexToBinaryString(ret) : ret;\n      };\n      return SparkMD5;\n    });\n  });\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 fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n  var FileChecksum = function() {\n    createClass(FileChecksum, null, [ {\n      key: \"create\",\n      value: function create(file, callback) {\n        var instance = new FileChecksum(file);\n        instance.create(callback);\n      }\n    } ]);\n    function FileChecksum(file) {\n      classCallCheck(this, FileChecksum);\n      this.file = file;\n      this.chunkSize = 2097152;\n      this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n      this.chunkIndex = 0;\n    }\n    createClass(FileChecksum, [ {\n      key: \"create\",\n      value: function create(callback) {\n        var _this = this;\n        this.callback = callback;\n        this.md5Buffer = new sparkMd5.ArrayBuffer();\n        this.fileReader = new FileReader();\n        this.fileReader.addEventListener(\"load\", function(event) {\n          return _this.fileReaderDidLoad(event);\n        });\n        this.fileReader.addEventListener(\"error\", function(event) {\n          return _this.fileReaderDidError(event);\n        });\n        this.readNextChunk();\n      }\n    }, {\n      key: \"fileReaderDidLoad\",\n      value: function fileReaderDidLoad(event) {\n        this.md5Buffer.append(event.target.result);\n        if (!this.readNextChunk()) {\n          var binaryDigest = this.md5Buffer.end(true);\n          var base64digest = btoa(binaryDigest);\n          this.callback(null, base64digest);\n        }\n      }\n    }, {\n      key: \"fileReaderDidError\",\n      value: function fileReaderDidError(event) {\n        this.callback(\"Error reading \" + this.file.name);\n      }\n    }, {\n      key: \"readNextChunk\",\n      value: function readNextChunk() {\n        if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n          var start = this.chunkIndex * this.chunkSize;\n          var end = Math.min(start + this.chunkSize, this.file.size);\n          var bytes = fileSlice.call(this.file, start, end);\n          this.fileReader.readAsArrayBuffer(bytes);\n          this.chunkIndex++;\n          return true;\n        } else {\n          return false;\n        }\n      }\n    } ]);\n    return FileChecksum;\n  }();\n  function getMetaValue(name) {\n    var element = findElement(document.head, 'meta[name=\"' + name + '\"]');\n    if (element) {\n      return element.getAttribute(\"content\");\n    }\n  }\n  function findElements(root, selector) {\n    if (typeof root == \"string\") {\n      selector = root;\n      root = document;\n    }\n    var elements = root.querySelectorAll(selector);\n    return toArray$1(elements);\n  }\n  function findElement(root, selector) {\n    if (typeof root == \"string\") {\n      selector = root;\n      root = document;\n    }\n    return root.querySelector(selector);\n  }\n  function dispatchEvent(element, type) {\n    var eventInit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    var disabled = element.disabled;\n    var bubbles = eventInit.bubbles, cancelable = eventInit.cancelable, detail = eventInit.detail;\n    var event = document.createEvent(\"Event\");\n    event.initEvent(type, bubbles || true, cancelable || true);\n    event.detail = detail || {};\n    try {\n      element.disabled = false;\n      element.dispatchEvent(event);\n    } finally {\n      element.disabled = disabled;\n    }\n    return event;\n  }\n  function toArray$1(value) {\n    if (Array.isArray(value)) {\n      return value;\n    } else if (Array.from) {\n      return Array.from(value);\n    } else {\n      return [].slice.call(value);\n    }\n  }\n  var BlobRecord = function() {\n    function BlobRecord(file, checksum, url) {\n      var _this = this;\n      classCallCheck(this, BlobRecord);\n      this.file = file;\n      this.attributes = {\n        filename: file.name,\n        content_type: file.type || \"application/octet-stream\",\n        byte_size: file.size,\n        checksum: checksum\n      };\n      this.xhr = new XMLHttpRequest();\n      this.xhr.open(\"POST\", url, true);\n      this.xhr.responseType = \"json\";\n      this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n      this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n      this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n      var csrfToken = getMetaValue(\"csrf-token\");\n      if (csrfToken != undefined) {\n        this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n      }\n      this.xhr.addEventListener(\"load\", function(event) {\n        return _this.requestDidLoad(event);\n      });\n      this.xhr.addEventListener(\"error\", function(event) {\n        return _this.requestDidError(event);\n      });\n    }\n    createClass(BlobRecord, [ {\n      key: \"create\",\n      value: function create(callback) {\n        this.callback = callback;\n        this.xhr.send(JSON.stringify({\n          blob: this.attributes\n        }));\n      }\n    }, {\n      key: \"requestDidLoad\",\n      value: function requestDidLoad(event) {\n        if (this.status >= 200 && this.status < 300) {\n          var response = this.response;\n          var direct_upload = response.direct_upload;\n          delete response.direct_upload;\n          this.attributes = response;\n          this.directUploadData = direct_upload;\n          this.callback(null, this.toJSON());\n        } else {\n          this.requestDidError(event);\n        }\n      }\n    }, {\n      key: \"requestDidError\",\n      value: function requestDidError(event) {\n        this.callback('Error creating Blob for \"' + this.file.name + '\". Status: ' + this.status);\n      }\n    }, {\n      key: \"toJSON\",\n      value: function toJSON() {\n        var result = {};\n        for (var key in this.attributes) {\n          result[key] = this.attributes[key];\n        }\n        return result;\n      }\n    }, {\n      key: \"status\",\n      get: function get$$1() {\n        return this.xhr.status;\n      }\n    }, {\n      key: \"response\",\n      get: function get$$1() {\n        var _xhr = this.xhr, responseType = _xhr.responseType, response = _xhr.response;\n        if (responseType == \"json\") {\n          return response;\n        } else {\n          return JSON.parse(response);\n        }\n      }\n    } ]);\n    return BlobRecord;\n  }();\n  var BlobUpload = function() {\n    function BlobUpload(blob) {\n      var _this = this;\n      classCallCheck(this, BlobUpload);\n      this.blob = blob;\n      this.file = blob.file;\n      var _blob$directUploadDat = blob.directUploadData, url = _blob$directUploadDat.url, headers = _blob$directUploadDat.headers;\n      this.xhr = new XMLHttpRequest();\n      this.xhr.open(\"PUT\", url, true);\n      this.xhr.responseType = \"text\";\n      for (var key in headers) {\n        this.xhr.setRequestHeader(key, headers[key]);\n      }\n      this.xhr.addEventListener(\"load\", function(event) {\n        return _this.requestDidLoad(event);\n      });\n      this.xhr.addEventListener(\"error\", function(event) {\n        return _this.requestDidError(event);\n      });\n    }\n    createClass(BlobUpload, [ {\n      key: \"create\",\n      value: function create(callback) {\n        this.callback = callback;\n        this.xhr.send(this.file.slice());\n      }\n    }, {\n      key: \"requestDidLoad\",\n      value: function requestDidLoad(event) {\n        var _xhr = this.xhr, status = _xhr.status, response = _xhr.response;\n        if (status >= 200 && status < 300) {\n          this.callback(null, response);\n        } else {\n          this.requestDidError(event);\n        }\n      }\n    }, {\n      key: \"requestDidError\",\n      value: function requestDidError(event) {\n        this.callback('Error storing \"' + this.file.name + '\". Status: ' + this.xhr.status);\n      }\n    } ]);\n    return BlobUpload;\n  }();\n  var id = 0;\n  var DirectUpload = function() {\n    function DirectUpload(file, url, delegate) {\n      classCallCheck(this, DirectUpload);\n      this.id = ++id;\n      this.file = file;\n      this.url = url;\n      this.delegate = delegate;\n    }\n    createClass(DirectUpload, [ {\n      key: \"create\",\n      value: function create(callback) {\n        var _this = this;\n        FileChecksum.create(this.file, function(error, checksum) {\n          if (error) {\n            callback(error);\n            return;\n          }\n          var blob = new BlobRecord(_this.file, checksum, _this.url);\n          notify(_this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n          blob.create(function(error) {\n            if (error) {\n              callback(error);\n            } else {\n              var upload = new BlobUpload(blob);\n              notify(_this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n              upload.create(function(error) {\n                if (error) {\n                  callback(error);\n                } else {\n                  callback(null, blob.toJSON());\n                }\n              });\n            }\n          });\n        });\n      }\n    } ]);\n    return DirectUpload;\n  }();\n  function notify(object, methodName) {\n    if (object && typeof object[methodName] == \"function\") {\n      for (var _len = arguments.length, messages = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n        messages[_key - 2] = arguments[_key];\n      }\n      return object[methodName].apply(object, messages);\n    }\n  }\n  var DirectUploadController = function() {\n    function DirectUploadController(input, file) {\n      classCallCheck(this, DirectUploadController);\n      this.input = input;\n      this.file = file;\n      this.directUpload = new DirectUpload(this.file, this.url, this);\n      this.dispatch(\"initialize\");\n    }\n    createClass(DirectUploadController, [ {\n      key: \"start\",\n      value: function start(callback) {\n        var _this = this;\n        var hiddenInput = document.createElement(\"input\");\n        hiddenInput.type = \"hidden\";\n        hiddenInput.name = this.input.name;\n        this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n        this.dispatch(\"start\");\n        this.directUpload.create(function(error, attributes) {\n          if (error) {\n            hiddenInput.parentNode.removeChild(hiddenInput);\n            _this.dispatchError(error);\n          } else {\n            hiddenInput.value = attributes.signed_id;\n          }\n          _this.dispatch(\"end\");\n          callback(error);\n        });\n      }\n    }, {\n      key: \"uploadRequestDidProgress\",\n      value: function uploadRequestDidProgress(event) {\n        var progress = event.loaded / event.total * 100;\n        if (progress) {\n          this.dispatch(\"progress\", {\n            progress: progress\n          });\n        }\n      }\n    }, {\n      key: \"dispatch\",\n      value: function dispatch(name) {\n        var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        detail.file = this.file;\n        detail.id = this.directUpload.id;\n        return dispatchEvent(this.input, \"direct-upload:\" + name, {\n          detail: detail\n        });\n      }\n    }, {\n      key: \"dispatchError\",\n      value: function dispatchError(error) {\n        var event = this.dispatch(\"error\", {\n          error: error\n        });\n        if (!event.defaultPrevented) {\n          alert(error);\n        }\n      }\n    }, {\n      key: \"directUploadWillCreateBlobWithXHR\",\n      value: function directUploadWillCreateBlobWithXHR(xhr) {\n        this.dispatch(\"before-blob-request\", {\n          xhr: xhr\n        });\n      }\n    }, {\n      key: \"directUploadWillStoreFileWithXHR\",\n      value: function directUploadWillStoreFileWithXHR(xhr) {\n        var _this2 = this;\n        this.dispatch(\"before-storage-request\", {\n          xhr: xhr\n        });\n        xhr.upload.addEventListener(\"progress\", function(event) {\n          return _this2.uploadRequestDidProgress(event);\n        });\n      }\n    }, {\n      key: \"url\",\n      get: function get$$1() {\n        return this.input.getAttribute(\"data-direct-upload-url\");\n      }\n    } ]);\n    return DirectUploadController;\n  }();\n  var inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\n  var DirectUploadsController = function() {\n    function DirectUploadsController(form) {\n      classCallCheck(this, DirectUploadsController);\n      this.form = form;\n      this.inputs = findElements(form, inputSelector).filter(function(input) {\n        return input.files.length;\n      });\n    }\n    createClass(DirectUploadsController, [ {\n      key: \"start\",\n      value: function start(callback) {\n        var _this = this;\n        var controllers = this.createDirectUploadControllers();\n        var startNextController = function startNextController() {\n          var controller = controllers.shift();\n          if (controller) {\n            controller.start(function(error) {\n              if (error) {\n                callback(error);\n                _this.dispatch(\"end\");\n              } else {\n                startNextController();\n              }\n            });\n          } else {\n            callback();\n            _this.dispatch(\"end\");\n          }\n        };\n        this.dispatch(\"start\");\n        startNextController();\n      }\n    }, {\n      key: \"createDirectUploadControllers\",\n      value: function createDirectUploadControllers() {\n        var controllers = [];\n        this.inputs.forEach(function(input) {\n          toArray$1(input.files).forEach(function(file) {\n            var controller = new DirectUploadController(input, file);\n            controllers.push(controller);\n          });\n        });\n        return controllers;\n      }\n    }, {\n      key: \"dispatch\",\n      value: function dispatch(name) {\n        var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        return dispatchEvent(this.form, \"direct-uploads:\" + name, {\n          detail: detail\n        });\n      }\n    } ]);\n    return DirectUploadsController;\n  }();\n  var processingAttribute = \"data-direct-uploads-processing\";\n  var submitButtonsByForm = new WeakMap();\n  var started = false;\n  function start() {\n    if (!started) {\n      started = true;\n      document.addEventListener(\"click\", didClick, true);\n      document.addEventListener(\"submit\", didSubmitForm);\n      document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n    }\n  }\n  function didClick(event) {\n    var target = event.target;\n    if ((target.tagName == \"INPUT\" || target.tagName == \"BUTTON\") && target.type == \"submit\" && target.form) {\n      submitButtonsByForm.set(target.form, target);\n    }\n  }\n  function didSubmitForm(event) {\n    handleFormSubmissionEvent(event);\n  }\n  function didSubmitRemoteElement(event) {\n    if (event.target.tagName == \"FORM\") {\n      handleFormSubmissionEvent(event);\n    }\n  }\n  function handleFormSubmissionEvent(event) {\n    var form = event.target;\n    if (form.hasAttribute(processingAttribute)) {\n      event.preventDefault();\n      return;\n    }\n    var controller = new DirectUploadsController(form);\n    var inputs = controller.inputs;\n    if (inputs.length) {\n      event.preventDefault();\n      form.setAttribute(processingAttribute, \"\");\n      inputs.forEach(disable);\n      controller.start(function(error) {\n        form.removeAttribute(processingAttribute);\n        if (error) {\n          inputs.forEach(enable);\n        } else {\n          submitForm(form);\n        }\n      });\n    }\n  }\n  function submitForm(form) {\n    var button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n    if (button) {\n      var _button = button, disabled = _button.disabled;\n      button.disabled = false;\n      button.focus();\n      button.click();\n      button.disabled = disabled;\n    } else {\n      button = document.createElement(\"input\");\n      button.type = \"submit\";\n      button.style.display = \"none\";\n      form.appendChild(button);\n      button.click();\n      form.removeChild(button);\n    }\n    submitButtonsByForm.delete(form);\n  }\n  function disable(input) {\n    input.disabled = true;\n  }\n  function enable(input) {\n    input.disabled = false;\n  }\n  function autostart() {\n    if (window.ActiveStorage) {\n      start();\n    }\n  }\n  setTimeout(autostart, 1);\n  exports.start = start;\n  exports.DirectUpload = DirectUpload;\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n});\n", "/*\n * International Telephone Input v17.0.8\n * https://github.com/jackocnr/intl-tel-input.git\n * Licensed under the MIT license\n */\n\n// wrap in UMD\n(function(factory) {\n    if (typeof module === \"object\" && module.exports) module.exports = factory(); else window.intlTelInput = factory();\n})(function(undefined) {\n    \"use strict\";\n    return function() {\n        // Array of country objects for the flag dropdown.\n        // Here is the criteria for the plugin to support a given country/territory\n        // - It has an iso2 code: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2\n        // - It has it's own country calling code (it is not a sub-region of another country): https://en.wikipedia.org/wiki/List_of_country_calling_codes\n        // - It has a flag in the region-flags project: https://github.com/behdad/region-flags/tree/gh-pages/png\n        // - It is supported by libphonenumber (it must be listed on this page): https://github.com/googlei18n/libphonenumber/blob/master/resources/ShortNumberMetadata.xml\n        // Each country array has the following information:\n        // [\n        //    Country name,\n        //    iso2 code,\n        //    International dial code,\n        //    Order (if >1 country with same dial code),\n        //    Area codes\n        // ]\n        var allCountries = [ [ \"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\", \"1\", 5, [ \"684\" ] ], [ \"Andorra\", \"ad\", \"376\" ], [ \"Angola\", \"ao\", \"244\" ], [ \"Anguilla\", \"ai\", \"1\", 6, [ \"264\" ] ], [ \"Antigua and Barbuda\", \"ag\", \"1\", 7, [ \"268\" ] ], [ \"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\", \"1\", 8, [ \"242\" ] ], [ \"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\", \"1\", 9, [ \"246\" ] ], [ \"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\", \"1\", 10, [ \"441\" ] ], [ \"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\", \"1\", 11, [ \"284\" ] ], [ \"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, [ \"3\", \"4\", \"7\" ] ], [ \"Cayman Islands\", \"ky\", \"1\", 12, [ \"345\" ] ], [ \"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, [ \"89164\" ] ], [ \"Cocos (Keeling) Islands\", \"cc\", \"61\", 1, [ \"89162\" ] ], [ \"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\", \"1\", 13, [ \"767\" ] ], [ \"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\", \"1\", 14, [ \"473\" ] ], [ \"Guadeloupe\", \"gp\", \"590\", 0 ], [ \"Guam\", \"gu\", \"1\", 15, [ \"671\" ] ], [ \"Guatemala\", \"gt\", \"502\" ], [ \"Guernsey\", \"gg\", \"44\", 1, [ \"1481\", \"7781\", \"7839\", \"7911\" ] ], [ \"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, [ \"1624\", \"74576\", \"7524\", \"7924\", \"7624\" ] ], [ \"Israel (\u202B\u05D9\u05E9\u05E8\u05D0\u05DC\u202C\u200E)\", \"il\", \"972\" ], [ \"Italy (Italia)\", \"it\", \"39\", 0 ], [ \"Jamaica\", \"jm\", \"1\", 4, [ \"876\", \"658\" ] ], [ \"Japan (\u65E5\u672C)\", \"jp\", \"81\" ], [ \"Jersey\", \"je\", \"44\", 3, [ \"1534\", \"7509\", \"7700\", \"7797\", \"7829\", \"7937\" ] ], [ \"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, [ \"33\", \"7\" ] ], [ \"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, [ \"269\", \"639\" ] ], [ \"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\", \"1\", 16, [ \"664\" ] ], [ \"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\", \"1\", 17, [ \"670\" ] ], [ \"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\", \"1\", 18, [ \"869\" ] ], [ \"Saint Lucia\", \"lc\", \"1\", 19, [ \"758\" ] ], [ \"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\", \"1\", 20, [ \"784\" ] ], [ \"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\", \"1\", 21, [ \"721\" ] ], [ \"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, [ \"79\" ] ], [ \"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\", \"1\", 22, [ \"868\" ] ], [ \"Tunisia (\u202B\u062A\u0648\u0646\u0633\u202C\u200E)\", \"tn\", \"216\" ], [ \"Turkey (T\u00FCrkiye)\", \"tr\", \"90\" ], [ \"Turkmenistan\", \"tm\", \"993\" ], [ \"Turks and Caicos Islands\", \"tc\", \"1\", 23, [ \"649\" ] ], [ \"Tuvalu\", \"tv\", \"688\" ], [ \"U.S. Virgin Islands\", \"vi\", \"1\", 24, [ \"340\" ] ], [ \"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, [ \"06698\" ] ], [ \"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, [ \"5288\", \"5289\" ] ], [ \"Yemen (\u202B\u0627\u0644\u064A\u0645\u0646\u202C\u200E)\", \"ye\", \"967\" ], [ \"Zambia\", \"zm\", \"260\" ], [ \"Zimbabwe\", \"zw\", \"263\" ], [ \"\u00C5land Islands\", \"ax\", \"358\", 1, [ \"18\" ] ] ];\n        // loop over all of the countries above, restructuring the data to be objects with named keys\n        for (var i = 0; i < allCountries.length; i++) {\n            var c = allCountries[i];\n            allCountries[i] = {\n                name: c[0],\n                iso2: c[1],\n                dialCode: c[2],\n                priority: c[3] || 0,\n                areaCodes: c[4] || null\n            };\n        }\n        \"use strict\";\n        function _classCallCheck(instance, Constructor) {\n            if (!(instance instanceof Constructor)) {\n                throw new TypeError(\"Cannot call a class as a function\");\n            }\n        }\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        function _createClass(Constructor, protoProps, staticProps) {\n            if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n            if (staticProps) _defineProperties(Constructor, staticProps);\n            return Constructor;\n        }\n        var intlTelInputGlobals = {\n            getInstance: function getInstance(input) {\n                var id = input.getAttribute(\"data-intl-tel-input-id\");\n                return window.intlTelInputGlobals.instances[id];\n            },\n            instances: {},\n            // using a global like this allows us to mock it in the tests\n            documentReady: function documentReady() {\n                return document.readyState === \"complete\";\n            }\n        };\n        if (typeof window === \"object\") window.intlTelInputGlobals = intlTelInputGlobals;\n        // these vars persist through all instances of the plugin\n        var id = 0;\n        var defaults = {\n            // whether or not to allow the dropdown\n            allowDropdown: true,\n            // if there is just a dial code in the input: remove it on blur\n            autoHideDialCode: true,\n            // add a placeholder in the input with an example number for the selected country\n            autoPlaceholder: \"polite\",\n            // modify the parentClass\n            customContainer: \"\",\n            // modify the auto placeholder\n            customPlaceholder: null,\n            // append menu to specified element\n            dropdownContainer: null,\n            // don't display these countries\n            excludeCountries: [],\n            // format the input value during initialisation and on setNumber\n            formatOnDisplay: true,\n            // geoIp lookup function\n            geoIpLookup: null,\n            // inject a hidden input with this name, and on submit, populate it with the result of getNumber\n            hiddenInput: \"\",\n            // initial country\n            initialCountry: \"\",\n            // localized country names e.g. { 'de': 'Deutschland' }\n            localizedCountries: null,\n            // don't insert international dial codes\n            nationalMode: true,\n            // display only these countries\n            onlyCountries: [],\n            // number type to use for placeholders\n            placeholderNumberType: \"MOBILE\",\n            // the countries at the top of the list. defaults to united states and united kingdom\n            preferredCountries: [ \"us\", \"gb\" ],\n            // display the country dial code next to the selected flag so it's not part of the typed number\n            separateDialCode: false,\n            // specify the path to the libphonenumber script to enable validation/formatting\n            utilsScript: \"\"\n        };\n        // https://en.wikipedia.org/wiki/List_of_North_American_Numbering_Plan_area_codes#Non-geographic_area_codes\n        var regionlessNanpNumbers = [ \"800\", \"822\", \"833\", \"844\", \"855\", \"866\", \"877\", \"880\", \"881\", \"882\", \"883\", \"884\", \"885\", \"886\", \"887\", \"888\", \"889\" ];\n        // utility function to iterate over an object. can't use Object.entries or native forEach because\n        // of IE11\n        var forEachProp = function forEachProp(obj, callback) {\n            var keys = Object.keys(obj);\n            for (var i = 0; i < keys.length; i++) {\n                callback(keys[i], obj[keys[i]]);\n            }\n        };\n        // run a method on each instance of the plugin\n        var forEachInstance = function forEachInstance(method) {\n            forEachProp(window.intlTelInputGlobals.instances, function(key) {\n                window.intlTelInputGlobals.instances[key][method]();\n            });\n        };\n        // this is our plugin class that we will create an instance of\n        // eslint-disable-next-line no-unused-vars\n        var Iti = /*#__PURE__*/\n        function() {\n            function Iti(input, options) {\n                var _this = this;\n                _classCallCheck(this, Iti);\n                this.id = id++;\n                this.telInput = input;\n                this.activeItem = null;\n                this.highlightedItem = null;\n                // process specified options / defaults\n                // alternative to Object.assign, which isn't supported by IE11\n                var customOptions = options || {};\n                this.options = {};\n                forEachProp(defaults, function(key, value) {\n                    _this.options[key] = customOptions.hasOwnProperty(key) ? customOptions[key] : value;\n                });\n                this.hadInitialPlaceholder = Boolean(input.getAttribute(\"placeholder\"));\n            }\n            _createClass(Iti, [ {\n                key: \"_init\",\n                value: function _init() {\n                    var _this2 = this;\n                    // if in nationalMode, disable options relating to dial codes\n                    if (this.options.nationalMode) this.options.autoHideDialCode = false;\n                    // if separateDialCode then doesn't make sense to A) insert dial code into input\n                    // (autoHideDialCode), and B) display national numbers (because we're displaying the country\n                    // dial code next to them)\n                    if (this.options.separateDialCode) {\n                        this.options.autoHideDialCode = this.options.nationalMode = false;\n                    }\n                    // we cannot just test screen size as some smartphones/website meta tags will report desktop\n                    // resolutions\n                    // Note: for some reason jasmine breaks if you put this in the main Plugin function with the\n                    // rest of these declarations\n                    // Note: to target Android Mobiles (and not Tablets), we must find 'Android' and 'Mobile'\n                    this.isMobile = /Android.+Mobile|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n                    if (this.isMobile) {\n                        // trigger the mobile dropdown css\n                        document.body.classList.add(\"iti-mobile\");\n                        // on mobile, we want a full screen dropdown, so we must append it to the body\n                        if (!this.options.dropdownContainer) this.options.dropdownContainer = document.body;\n                    }\n                    // these promises get resolved when their individual requests complete\n                    // this way the dev can do something like iti.promise.then(...) to know when all requests are\n                    // complete\n                    if (typeof Promise !== \"undefined\") {\n                        var autoCountryPromise = new Promise(function(resolve, reject) {\n                            _this2.resolveAutoCountryPromise = resolve;\n                            _this2.rejectAutoCountryPromise = reject;\n                        });\n                        var utilsScriptPromise = new Promise(function(resolve, reject) {\n                            _this2.resolveUtilsScriptPromise = resolve;\n                            _this2.rejectUtilsScriptPromise = reject;\n                        });\n                        this.promise = Promise.all([ autoCountryPromise, utilsScriptPromise ]);\n                    } else {\n                        // prevent errors when Promise doesn't exist\n                        this.resolveAutoCountryPromise = this.rejectAutoCountryPromise = function() {};\n                        this.resolveUtilsScriptPromise = this.rejectUtilsScriptPromise = function() {};\n                    }\n                    // in various situations there could be no country selected initially, but we need to be able\n                    // to assume this variable exists\n                    this.selectedCountryData = {};\n                    // process all the data: onlyCountries, excludeCountries, preferredCountries etc\n                    this._processCountryData();\n                    // generate the markup\n                    this._generateMarkup();\n                    // set the initial state of the input value and the selected flag\n                    this._setInitialState();\n                    // start all of the event listeners: autoHideDialCode, input keydown, selectedFlag click\n                    this._initListeners();\n                    // utils script, and auto country\n                    this._initRequests();\n                }\n            }, {\n                key: \"_processCountryData\",\n                value: function _processCountryData() {\n                    // process onlyCountries or excludeCountries array if present\n                    this._processAllCountries();\n                    // process the countryCodes map\n                    this._processCountryCodes();\n                    // process the preferredCountries\n                    this._processPreferredCountries();\n                    // translate countries according to localizedCountries option\n                    if (this.options.localizedCountries) this._translateCountriesByLocale();\n                    // sort countries by name\n                    if (this.options.onlyCountries.length || this.options.localizedCountries) {\n                        this.countries.sort(this._countryNameSort);\n                    }\n                }\n            }, {\n                key: \"_addCountryCode\",\n                value: function _addCountryCode(iso2, countryCode, priority) {\n                    if (countryCode.length > this.countryCodeMaxLen) {\n                        this.countryCodeMaxLen = countryCode.length;\n                    }\n                    if (!this.countryCodes.hasOwnProperty(countryCode)) {\n                        this.countryCodes[countryCode] = [];\n                    }\n                    // bail if we already have this country for this countryCode\n                    for (var i = 0; i < this.countryCodes[countryCode].length; i++) {\n                        if (this.countryCodes[countryCode][i] === iso2) return;\n                    }\n                    // check for undefined as 0 is falsy\n                    var index = priority !== undefined ? priority : this.countryCodes[countryCode].length;\n                    this.countryCodes[countryCode][index] = iso2;\n                }\n            }, {\n                key: \"_processAllCountries\",\n                value: function _processAllCountries() {\n                    if (this.options.onlyCountries.length) {\n                        var lowerCaseOnlyCountries = this.options.onlyCountries.map(function(country) {\n                            return country.toLowerCase();\n                        });\n                        this.countries = allCountries.filter(function(country) {\n                            return lowerCaseOnlyCountries.indexOf(country.iso2) > -1;\n                        });\n                    } else if (this.options.excludeCountries.length) {\n                        var lowerCaseExcludeCountries = this.options.excludeCountries.map(function(country) {\n                            return country.toLowerCase();\n                        });\n                        this.countries = allCountries.filter(function(country) {\n                            return lowerCaseExcludeCountries.indexOf(country.iso2) === -1;\n                        });\n                    } else {\n                        this.countries = allCountries;\n                    }\n                }\n            }, {\n                key: \"_translateCountriesByLocale\",\n                value: function _translateCountriesByLocale() {\n                    for (var i = 0; i < this.countries.length; i++) {\n                        var iso = this.countries[i].iso2.toLowerCase();\n                        if (this.options.localizedCountries.hasOwnProperty(iso)) {\n                            this.countries[i].name = this.options.localizedCountries[iso];\n                        }\n                    }\n                }\n            }, {\n                key: \"_countryNameSort\",\n                value: function _countryNameSort(a, b) {\n                    return a.name.localeCompare(b.name);\n                }\n            }, {\n                key: \"_processCountryCodes\",\n                value: function _processCountryCodes() {\n                    this.countryCodeMaxLen = 0;\n                    // here we store just dial codes\n                    this.dialCodes = {};\n                    // here we store \"country codes\" (both dial codes and their area codes)\n                    this.countryCodes = {};\n                    // first: add dial codes\n                    for (var i = 0; i < this.countries.length; i++) {\n                        var c = this.countries[i];\n                        if (!this.dialCodes[c.dialCode]) this.dialCodes[c.dialCode] = true;\n                        this._addCountryCode(c.iso2, c.dialCode, c.priority);\n                    }\n                    // next: add area codes\n                    // this is a second loop over countries, to make sure we have all of the \"root\" countries\n                    // already in the map, so that we can access them, as each time we add an area code substring\n                    // to the map, we also need to include the \"root\" country's code, as that also matches\n                    for (var _i = 0; _i < this.countries.length; _i++) {\n                        var _c = this.countries[_i];\n                        // area codes\n                        if (_c.areaCodes) {\n                            var rootCountryCode = this.countryCodes[_c.dialCode][0];\n                            // for each area code\n                            for (var j = 0; j < _c.areaCodes.length; j++) {\n                                var areaCode = _c.areaCodes[j];\n                                // for each digit in the area code to add all partial matches as well\n                                for (var k = 1; k < areaCode.length; k++) {\n                                    var partialDialCode = _c.dialCode + areaCode.substr(0, k);\n                                    // start with the root country, as that also matches this dial code\n                                    this._addCountryCode(rootCountryCode, partialDialCode);\n                                    this._addCountryCode(_c.iso2, partialDialCode);\n                                }\n                                // add the full area code\n                                this._addCountryCode(_c.iso2, _c.dialCode + areaCode);\n                            }\n                        }\n                    }\n                }\n            }, {\n                key: \"_processPreferredCountries\",\n                value: function _processPreferredCountries() {\n                    this.preferredCountries = [];\n                    for (var i = 0; i < this.options.preferredCountries.length; i++) {\n                        var countryCode = this.options.preferredCountries[i].toLowerCase();\n                        var countryData = this._getCountryData(countryCode, false, true);\n                        if (countryData) this.preferredCountries.push(countryData);\n                    }\n                }\n            }, {\n                key: \"_createEl\",\n                value: function _createEl(name, attrs, container) {\n                    var el = document.createElement(name);\n                    if (attrs) forEachProp(attrs, function(key, value) {\n                        return el.setAttribute(key, value);\n                    });\n                    if (container) container.appendChild(el);\n                    return el;\n                }\n            }, {\n                key: \"_generateMarkup\",\n                value: function _generateMarkup() {\n                    // if autocomplete does not exist on the element and its form, then\n                    // prevent autocomplete as there's no safe, cross-browser event we can react to, so it can\n                    // easily put the plugin in an inconsistent state e.g. the wrong flag selected for the\n                    // autocompleted number, which on submit could mean wrong number is saved (esp in nationalMode)\n                    if (!this.telInput.hasAttribute(\"autocomplete\") && !(this.telInput.form && this.telInput.form.hasAttribute(\"autocomplete\"))) {\n                        this.telInput.setAttribute(\"autocomplete\", \"off\");\n                    }\n                    // containers (mostly for positioning)\n                    var parentClass = \"iti\";\n                    if (this.options.allowDropdown) parentClass += \" iti--allow-dropdown\";\n                    if (this.options.separateDialCode) parentClass += \" iti--separate-dial-code\";\n                    if (this.options.customContainer) {\n                        parentClass += \" \";\n                        parentClass += this.options.customContainer;\n                    }\n                    var wrapper = this._createEl(\"div\", {\n                        \"class\": parentClass\n                    });\n                    this.telInput.parentNode.insertBefore(wrapper, this.telInput);\n                    this.flagsContainer = this._createEl(\"div\", {\n                        \"class\": \"iti__flag-container\"\n                    }, wrapper);\n                    wrapper.appendChild(this.telInput);\n                    // selected flag (displayed to left of input)\n                    this.selectedFlag = this._createEl(\"div\", {\n                        \"class\": \"iti__selected-flag\",\n                        role: \"combobox\",\n                        \"aria-controls\": \"iti-\".concat(this.id, \"__country-listbox\"),\n                        \"aria-owns\": \"iti-\".concat(this.id, \"__country-listbox\"),\n                        \"aria-expanded\": \"false\"\n                    }, this.flagsContainer);\n                    this.selectedFlagInner = this._createEl(\"div\", {\n                        \"class\": \"iti__flag\"\n                    }, this.selectedFlag);\n                    if (this.options.separateDialCode) {\n                        this.selectedDialCode = this._createEl(\"div\", {\n                            \"class\": \"iti__selected-dial-code\"\n                        }, this.selectedFlag);\n                    }\n                    if (this.options.allowDropdown) {\n                        // make element focusable and tab navigable\n                        this.selectedFlag.setAttribute(\"tabindex\", \"0\");\n                        this.dropdownArrow = this._createEl(\"div\", {\n                            \"class\": \"iti__arrow\"\n                        }, this.selectedFlag);\n                        // country dropdown: preferred countries, then divider, then all countries\n                        this.countryList = this._createEl(\"ul\", {\n                            \"class\": \"iti__country-list iti__hide\",\n                            id: \"iti-\".concat(this.id, \"__country-listbox\"),\n                            role: \"listbox\",\n                            \"aria-label\": \"List of countries\"\n                        });\n                        if (this.preferredCountries.length) {\n                            this._appendListItems(this.preferredCountries, \"iti__preferred\", true);\n                            this._createEl(\"li\", {\n                                \"class\": \"iti__divider\",\n                                role: \"separator\",\n                                \"aria-disabled\": \"true\"\n                            }, this.countryList);\n                        }\n                        this._appendListItems(this.countries, \"iti__standard\");\n                        // create dropdownContainer markup\n                        if (this.options.dropdownContainer) {\n                            this.dropdown = this._createEl(\"div\", {\n                                \"class\": \"iti iti--container\"\n                            });\n                            this.dropdown.appendChild(this.countryList);\n                        } else {\n                            this.flagsContainer.appendChild(this.countryList);\n                        }\n                    }\n                    if (this.options.hiddenInput) {\n                        var hiddenInputName = this.options.hiddenInput;\n                        var name = this.telInput.getAttribute(\"name\");\n                        if (name) {\n                            var i = name.lastIndexOf(\"[\");\n                            // if input name contains square brackets, then give the hidden input the same name,\n                            // replacing the contents of the last set of brackets with the given hiddenInput name\n                            if (i !== -1) hiddenInputName = \"\".concat(name.substr(0, i), \"[\").concat(hiddenInputName, \"]\");\n                        }\n                        this.hiddenInput = this._createEl(\"input\", {\n                            type: \"hidden\",\n                            name: hiddenInputName\n                        });\n                        wrapper.appendChild(this.hiddenInput);\n                    }\n                }\n            }, {\n                key: \"_appendListItems\",\n                value: function _appendListItems(countries, className, preferred) {\n                    // we create so many DOM elements, it is faster to build a temp string\n                    // and then add everything to the DOM in one go at the end\n                    var tmp = \"\";\n                    // for each country\n                    for (var i = 0; i < countries.length; i++) {\n                        var c = countries[i];\n                        var idSuffix = preferred ? \"-preferred\" : \"\";\n                        // open the list item\n                        tmp += \"<li class='iti__country \".concat(className, \"' tabIndex='-1' id='iti-\").concat(this.id, \"__item-\").concat(c.iso2).concat(idSuffix, \"' role='option' data-dial-code='\").concat(c.dialCode, \"' data-country-code='\").concat(c.iso2, \"' aria-selected='false'>\");\n                        // add the flag\n                        tmp += \"<div class='iti__flag-box'><div class='iti__flag iti__\".concat(c.iso2, \"'></div></div>\");\n                        // and the country name and dial code\n                        tmp += \"<span class='iti__country-name'>\".concat(c.name, \"</span>\");\n                        tmp += \"<span class='iti__dial-code'>+\".concat(c.dialCode, \"</span>\");\n                        // close the list item\n                        tmp += \"</li>\";\n                    }\n                    this.countryList.insertAdjacentHTML(\"beforeend\", tmp);\n                }\n            }, {\n                key: \"_setInitialState\",\n                value: function _setInitialState() {\n                    var val = this.telInput.value;\n                    var dialCode = this._getDialCode(val);\n                    var isRegionlessNanp = this._isRegionlessNanp(val);\n                    var _this$options = this.options, initialCountry = _this$options.initialCountry, nationalMode = _this$options.nationalMode, autoHideDialCode = _this$options.autoHideDialCode, separateDialCode = _this$options.separateDialCode;\n                    // if we already have a dial code, and it's not a regionlessNanp, we can go ahead and set the\n                    // flag, else fall back to the default country\n                    if (dialCode && !isRegionlessNanp) {\n                        this._updateFlagFromNumber(val);\n                    } else if (initialCountry !== \"auto\") {\n                        // see if we should select a flag\n                        if (initialCountry) {\n                            this._setFlag(initialCountry.toLowerCase());\n                        } else {\n                            if (dialCode && isRegionlessNanp) {\n                                // has intl dial code, is regionless nanp, and no initialCountry, so default to US\n                                this._setFlag(\"us\");\n                            } else {\n                                // no dial code and no initialCountry, so default to first in list\n                                this.defaultCountry = this.preferredCountries.length ? this.preferredCountries[0].iso2 : this.countries[0].iso2;\n                                if (!val) {\n                                    this._setFlag(this.defaultCountry);\n                                }\n                            }\n                        }\n                        // if empty and no nationalMode and no autoHideDialCode then insert the default dial code\n                        if (!val && !nationalMode && !autoHideDialCode && !separateDialCode) {\n                            this.telInput.value = \"+\".concat(this.selectedCountryData.dialCode);\n                        }\n                    }\n                    // NOTE: if initialCountry is set to auto, that will be handled separately\n                    // format - note this wont be run after _updateDialCode as that's only called if no val\n                    if (val) this._updateValFromNumber(val);\n                }\n            }, {\n                key: \"_initListeners\",\n                value: function _initListeners() {\n                    this._initKeyListeners();\n                    if (this.options.autoHideDialCode) this._initBlurListeners();\n                    if (this.options.allowDropdown) this._initDropdownListeners();\n                    if (this.hiddenInput) this._initHiddenInputListener();\n                }\n            }, {\n                key: \"_initHiddenInputListener\",\n                value: function _initHiddenInputListener() {\n                    var _this3 = this;\n                    this._handleHiddenInputSubmit = function() {\n                        _this3.hiddenInput.value = _this3.getNumber();\n                    };\n                    if (this.telInput.form) this.telInput.form.addEventListener(\"submit\", this._handleHiddenInputSubmit);\n                }\n            }, {\n                key: \"_getClosestLabel\",\n                value: function _getClosestLabel() {\n                    var el = this.telInput;\n                    while (el && el.tagName !== \"LABEL\") {\n                        el = el.parentNode;\n                    }\n                    return el;\n                }\n            }, {\n                key: \"_initDropdownListeners\",\n                value: function _initDropdownListeners() {\n                    var _this4 = this;\n                    // hack for input nested inside label (which is valid markup): clicking the selected-flag to\n                    // open the dropdown would then automatically trigger a 2nd click on the input which would\n                    // close it again\n                    this._handleLabelClick = function(e) {\n                        // if the dropdown is closed, then focus the input, else ignore the click\n                        if (_this4.countryList.classList.contains(\"iti__hide\")) _this4.telInput.focus(); else e.preventDefault();\n                    };\n                    var label = this._getClosestLabel();\n                    if (label) label.addEventListener(\"click\", this._handleLabelClick);\n                    // toggle country dropdown on click\n                    this._handleClickSelectedFlag = function() {\n                        // only intercept this event if we're opening the dropdown\n                        // else let it bubble up to the top (\"click-off-to-close\" listener)\n                        // we cannot just stopPropagation as it may be needed to close another instance\n                        if (_this4.countryList.classList.contains(\"iti__hide\") && !_this4.telInput.disabled && !_this4.telInput.readOnly) {\n                            _this4._showDropdown();\n                        }\n                    };\n                    this.selectedFlag.addEventListener(\"click\", this._handleClickSelectedFlag);\n                    // open dropdown list if currently focused\n                    this._handleFlagsContainerKeydown = function(e) {\n                        var isDropdownHidden = _this4.countryList.classList.contains(\"iti__hide\");\n                        if (isDropdownHidden && [ \"ArrowUp\", \"Up\", \"ArrowDown\", \"Down\", \" \", \"Enter\" ].indexOf(e.key) !== -1) {\n                            // prevent form from being submitted if \"ENTER\" was pressed\n                            e.preventDefault();\n                            // prevent event from being handled again by document\n                            e.stopPropagation();\n                            _this4._showDropdown();\n                        }\n                        // allow navigation from dropdown to input on TAB\n                        if (e.key === \"Tab\") _this4._closeDropdown();\n                    };\n                    this.flagsContainer.addEventListener(\"keydown\", this._handleFlagsContainerKeydown);\n                }\n            }, {\n                key: \"_initRequests\",\n                value: function _initRequests() {\n                    var _this5 = this;\n                    // if the user has specified the path to the utils script, fetch it on window.load, else resolve\n                    if (this.options.utilsScript && !window.intlTelInputUtils) {\n                        // if the plugin is being initialised after the window.load event has already been fired\n                        if (window.intlTelInputGlobals.documentReady()) {\n                            window.intlTelInputGlobals.loadUtils(this.options.utilsScript);\n                        } else {\n                            // wait until the load event so we don't block any other requests e.g. the flags image\n                            window.addEventListener(\"load\", function() {\n                                window.intlTelInputGlobals.loadUtils(_this5.options.utilsScript);\n                            });\n                        }\n                    } else this.resolveUtilsScriptPromise();\n                    if (this.options.initialCountry === \"auto\") this._loadAutoCountry(); else this.resolveAutoCountryPromise();\n                }\n            }, {\n                key: \"_loadAutoCountry\",\n                value: function _loadAutoCountry() {\n                    // 3 options:\n                    // 1) already loaded (we're done)\n                    // 2) not already started loading (start)\n                    // 3) already started loading (do nothing - just wait for loading callback to fire)\n                    if (window.intlTelInputGlobals.autoCountry) {\n                        this.handleAutoCountry();\n                    } else if (!window.intlTelInputGlobals.startedLoadingAutoCountry) {\n                        // don't do this twice!\n                        window.intlTelInputGlobals.startedLoadingAutoCountry = true;\n                        if (typeof this.options.geoIpLookup === \"function\") {\n                            this.options.geoIpLookup(function(countryCode) {\n                                window.intlTelInputGlobals.autoCountry = countryCode.toLowerCase();\n                                // tell all instances the auto country is ready\n                                // TODO: this should just be the current instances\n                                // UPDATE: use setTimeout in case their geoIpLookup function calls this callback straight\n                                // away (e.g. if they have already done the geo ip lookup somewhere else). Using\n                                // setTimeout means that the current thread of execution will finish before executing\n                                // this, which allows the plugin to finish initialising.\n                                setTimeout(function() {\n                                    return forEachInstance(\"handleAutoCountry\");\n                                });\n                            }, function() {\n                                return forEachInstance(\"rejectAutoCountryPromise\");\n                            });\n                        }\n                    }\n                }\n            }, {\n                key: \"_initKeyListeners\",\n                value: function _initKeyListeners() {\n                    var _this6 = this;\n                    // update flag on keyup\n                    this._handleKeyupEvent = function() {\n                        if (_this6._updateFlagFromNumber(_this6.telInput.value)) {\n                            _this6._triggerCountryChange();\n                        }\n                    };\n                    this.telInput.addEventListener(\"keyup\", this._handleKeyupEvent);\n                    // update flag on cut/paste events (now supported in all major browsers)\n                    this._handleClipboardEvent = function() {\n                        // hack because \"paste\" event is fired before input is updated\n                        setTimeout(_this6._handleKeyupEvent);\n                    };\n                    this.telInput.addEventListener(\"cut\", this._handleClipboardEvent);\n                    this.telInput.addEventListener(\"paste\", this._handleClipboardEvent);\n                }\n            }, {\n                key: \"_cap\",\n                value: function _cap(number) {\n                    var max = this.telInput.getAttribute(\"maxlength\");\n                    return max && number.length > max ? number.substr(0, max) : number;\n                }\n            }, {\n                key: \"_initBlurListeners\",\n                value: function _initBlurListeners() {\n                    var _this7 = this;\n                    // on blur or form submit: if just a dial code then remove it\n                    this._handleSubmitOrBlurEvent = function() {\n                        _this7._removeEmptyDialCode();\n                    };\n                    if (this.telInput.form) this.telInput.form.addEventListener(\"submit\", this._handleSubmitOrBlurEvent);\n                    this.telInput.addEventListener(\"blur\", this._handleSubmitOrBlurEvent);\n                }\n            }, {\n                key: \"_removeEmptyDialCode\",\n                value: function _removeEmptyDialCode() {\n                    if (this.telInput.value.charAt(0) === \"+\") {\n                        var numeric = this._getNumeric(this.telInput.value);\n                        // if just a plus, or if just a dial code\n                        if (!numeric || this.selectedCountryData.dialCode === numeric) {\n                            this.telInput.value = \"\";\n                        }\n                    }\n                }\n            }, {\n                key: \"_getNumeric\",\n                value: function _getNumeric(s) {\n                    return s.replace(/\\D/g, \"\");\n                }\n            }, {\n                key: \"_trigger\",\n                value: function _trigger(name) {\n                    // have to use old school document.createEvent as IE11 doesn't support `new Event()` syntax\n                    var e = document.createEvent(\"Event\");\n                    e.initEvent(name, true, true);\n                    // can bubble, and is cancellable\n                    this.telInput.dispatchEvent(e);\n                }\n            }, {\n                key: \"_showDropdown\",\n                value: function _showDropdown() {\n                    this.countryList.classList.remove(\"iti__hide\");\n                    this.selectedFlag.setAttribute(\"aria-expanded\", \"true\");\n                    this._setDropdownPosition();\n                    // update highlighting and scroll to active list item\n                    if (this.activeItem) {\n                        this._highlightListItem(this.activeItem, false);\n                        this._scrollTo(this.activeItem, true);\n                    }\n                    // bind all the dropdown-related listeners: mouseover, click, click-off, keydown\n                    this._bindDropdownListeners();\n                    // update the arrow\n                    this.dropdownArrow.classList.add(\"iti__arrow--up\");\n                    this._trigger(\"open:countrydropdown\");\n                }\n            }, {\n                key: \"_toggleClass\",\n                value: function _toggleClass(el, className, shouldHaveClass) {\n                    if (shouldHaveClass && !el.classList.contains(className)) el.classList.add(className); else if (!shouldHaveClass && el.classList.contains(className)) el.classList.remove(className);\n                }\n            }, {\n                key: \"_setDropdownPosition\",\n                value: function _setDropdownPosition() {\n                    var _this8 = this;\n                    if (this.options.dropdownContainer) {\n                        this.options.dropdownContainer.appendChild(this.dropdown);\n                    }\n                    if (!this.isMobile) {\n                        var pos = this.telInput.getBoundingClientRect();\n                        // windowTop from https://stackoverflow.com/a/14384091/217866\n                        var windowTop = window.pageYOffset || document.documentElement.scrollTop;\n                        var inputTop = pos.top + windowTop;\n                        var dropdownHeight = this.countryList.offsetHeight;\n                        // dropdownFitsBelow = (dropdownBottom < windowBottom)\n                        var dropdownFitsBelow = inputTop + this.telInput.offsetHeight + dropdownHeight < windowTop + window.innerHeight;\n                        var dropdownFitsAbove = inputTop - dropdownHeight > windowTop;\n                        // by default, the dropdown will be below the input. If we want to position it above the\n                        // input, we add the dropup class.\n                        this._toggleClass(this.countryList, \"iti__country-list--dropup\", !dropdownFitsBelow && dropdownFitsAbove);\n                        // if dropdownContainer is enabled, calculate postion\n                        if (this.options.dropdownContainer) {\n                            // by default the dropdown will be directly over the input because it's not in the flow.\n                            // If we want to position it below, we need to add some extra top value.\n                            var extraTop = !dropdownFitsBelow && dropdownFitsAbove ? 0 : this.telInput.offsetHeight;\n                            // calculate placement\n                            this.dropdown.style.top = \"\".concat(inputTop + extraTop, \"px\");\n                            this.dropdown.style.left = \"\".concat(pos.left + document.body.scrollLeft, \"px\");\n                            // close menu on window scroll\n                            this._handleWindowScroll = function() {\n                                return _this8._closeDropdown();\n                            };\n                            window.addEventListener(\"scroll\", this._handleWindowScroll);\n                        }\n                    }\n                }\n            }, {\n                key: \"_getClosestListItem\",\n                value: function _getClosestListItem(target) {\n                    var el = target;\n                    while (el && el !== this.countryList && !el.classList.contains(\"iti__country\")) {\n                        el = el.parentNode;\n                    }\n                    // if we reached the countryList element, then return null\n                    return el === this.countryList ? null : el;\n                }\n            }, {\n                key: \"_bindDropdownListeners\",\n                value: function _bindDropdownListeners() {\n                    var _this9 = this;\n                    // when mouse over a list item, just highlight that one\n                    // we add the class \"highlight\", so if they hit \"enter\" we know which one to select\n                    this._handleMouseoverCountryList = function(e) {\n                        // handle event delegation, as we're listening for this event on the countryList\n                        var listItem = _this9._getClosestListItem(e.target);\n                        if (listItem) _this9._highlightListItem(listItem, false);\n                    };\n                    this.countryList.addEventListener(\"mouseover\", this._handleMouseoverCountryList);\n                    // listen for country selection\n                    this._handleClickCountryList = function(e) {\n                        var listItem = _this9._getClosestListItem(e.target);\n                        if (listItem) _this9._selectListItem(listItem);\n                    };\n                    this.countryList.addEventListener(\"click\", this._handleClickCountryList);\n                    // click off to close\n                    // (except when this initial opening click is bubbling up)\n                    // we cannot just stopPropagation as it may be needed to close another instance\n                    var isOpening = true;\n                    this._handleClickOffToClose = function() {\n                        if (!isOpening) _this9._closeDropdown();\n                        isOpening = false;\n                    };\n                    document.documentElement.addEventListener(\"click\", this._handleClickOffToClose);\n                    // listen for up/down scrolling, enter to select, or letters to jump to country name.\n                    // use keydown as keypress doesn't fire for non-char keys and we want to catch if they\n                    // just hit down and hold it to scroll down (no keyup event).\n                    // listen on the document because that's where key events are triggered if no input has focus\n                    var query = \"\";\n                    var queryTimer = null;\n                    this._handleKeydownOnDropdown = function(e) {\n                        // prevent down key from scrolling the whole page,\n                        // and enter key from submitting a form etc\n                        e.preventDefault();\n                        // up and down to navigate\n                        if (e.key === \"ArrowUp\" || e.key === \"Up\" || e.key === \"ArrowDown\" || e.key === \"Down\") _this9._handleUpDownKey(e.key); else if (e.key === \"Enter\") _this9._handleEnterKey(); else if (e.key === \"Escape\") _this9._closeDropdown(); else if (/^[a-zA-Z\u00C0-\u00FF\u0430-\u044F\u0410-\u042F ]$/.test(e.key)) {\n                            // jump to countries that start with the query string\n                            if (queryTimer) clearTimeout(queryTimer);\n                            query += e.key.toLowerCase();\n                            _this9._searchForCountry(query);\n                            // if the timer hits 1 second, reset the query\n                            queryTimer = setTimeout(function() {\n                                query = \"\";\n                            }, 1e3);\n                        }\n                    };\n                    document.addEventListener(\"keydown\", this._handleKeydownOnDropdown);\n                }\n            }, {\n                key: \"_handleUpDownKey\",\n                value: function _handleUpDownKey(key) {\n                    var next = key === \"ArrowUp\" || key === \"Up\" ? this.highlightedItem.previousElementSibling : this.highlightedItem.nextElementSibling;\n                    if (next) {\n                        // skip the divider\n                        if (next.classList.contains(\"iti__divider\")) {\n                            next = key === \"ArrowUp\" || key === \"Up\" ? next.previousElementSibling : next.nextElementSibling;\n                        }\n                        this._highlightListItem(next, true);\n                    }\n                }\n            }, {\n                key: \"_handleEnterKey\",\n                value: function _handleEnterKey() {\n                    if (this.highlightedItem) this._selectListItem(this.highlightedItem);\n                }\n            }, {\n                key: \"_searchForCountry\",\n                value: function _searchForCountry(query) {\n                    for (var i = 0; i < this.countries.length; i++) {\n                        if (this._startsWith(this.countries[i].name, query)) {\n                            var listItem = this.countryList.querySelector(\"#iti-\".concat(this.id, \"__item-\").concat(this.countries[i].iso2));\n                            // update highlighting and scroll\n                            this._highlightListItem(listItem, false);\n                            this._scrollTo(listItem, true);\n                            break;\n                        }\n                    }\n                }\n            }, {\n                key: \"_startsWith\",\n                value: function _startsWith(a, b) {\n                    return a.substr(0, b.length).toLowerCase() === b;\n                }\n            }, {\n                key: \"_updateValFromNumber\",\n                value: function _updateValFromNumber(originalNumber) {\n                    var number = originalNumber;\n                    if (this.options.formatOnDisplay && window.intlTelInputUtils && this.selectedCountryData) {\n                        var useNational = !this.options.separateDialCode && (this.options.nationalMode || number.charAt(0) !== \"+\");\n                        var _intlTelInputUtils$nu = intlTelInputUtils.numberFormat, NATIONAL = _intlTelInputUtils$nu.NATIONAL, INTERNATIONAL = _intlTelInputUtils$nu.INTERNATIONAL;\n                        var format = useNational ? NATIONAL : INTERNATIONAL;\n                        number = intlTelInputUtils.formatNumber(number, this.selectedCountryData.iso2, format);\n                    }\n                    number = this._beforeSetNumber(number);\n                    this.telInput.value = number;\n                }\n            }, {\n                key: \"_updateFlagFromNumber\",\n                value: function _updateFlagFromNumber(originalNumber) {\n                    // if we're in nationalMode and we already have US/Canada selected, make sure the number starts\n                    // with a +1 so _getDialCode will be able to extract the area code\n                    // update: if we dont yet have selectedCountryData, but we're here (trying to update the flag\n                    // from the number), that means we're initialising the plugin with a number that already has a\n                    // dial code, so fine to ignore this bit\n                    var number = originalNumber;\n                    var selectedDialCode = this.selectedCountryData.dialCode;\n                    var isNanp = selectedDialCode === \"1\";\n                    if (number && this.options.nationalMode && isNanp && number.charAt(0) !== \"+\") {\n                        if (number.charAt(0) !== \"1\") number = \"1\".concat(number);\n                        number = \"+\".concat(number);\n                    }\n                    // update flag if user types area code for another country\n                    if (this.options.separateDialCode && selectedDialCode && number.charAt(0) !== \"+\") {\n                        number = \"+\".concat(selectedDialCode).concat(number);\n                    }\n                    // try and extract valid dial code from input\n                    var dialCode = this._getDialCode(number, true);\n                    var numeric = this._getNumeric(number);\n                    var countryCode = null;\n                    if (dialCode) {\n                        var countryCodes = this.countryCodes[this._getNumeric(dialCode)];\n                        // check if the right country is already selected. this should be false if the number is\n                        // longer than the matched dial code because in this case we need to make sure that if\n                        // there are multiple country matches, that the first one is selected (note: we could\n                        // just check that here, but it requires the same loop that we already have later)\n                        var alreadySelected = countryCodes.indexOf(this.selectedCountryData.iso2) !== -1 && numeric.length <= dialCode.length - 1;\n                        var isRegionlessNanpNumber = selectedDialCode === \"1\" && this._isRegionlessNanp(numeric);\n                        // only update the flag if:\n                        // A) NOT (we currently have a NANP flag selected, and the number is a regionlessNanp)\n                        // AND\n                        // B) the right country is not already selected\n                        if (!isRegionlessNanpNumber && !alreadySelected) {\n                            // if using onlyCountries option, countryCodes[0] may be empty, so we must find the first\n                            // non-empty index\n                            for (var j = 0; j < countryCodes.length; j++) {\n                                if (countryCodes[j]) {\n                                    countryCode = countryCodes[j];\n                                    break;\n                                }\n                            }\n                        }\n                    } else if (number.charAt(0) === \"+\" && numeric.length) {\n                        // invalid dial code, so empty\n                        // Note: use getNumeric here because the number has not been formatted yet, so could contain\n                        // bad chars\n                        countryCode = \"\";\n                    } else if (!number || number === \"+\") {\n                        // empty, or just a plus, so default\n                        countryCode = this.defaultCountry;\n                    }\n                    if (countryCode !== null) {\n                        return this._setFlag(countryCode);\n                    }\n                    return false;\n                }\n            }, {\n                key: \"_isRegionlessNanp\",\n                value: function _isRegionlessNanp(number) {\n                    var numeric = this._getNumeric(number);\n                    if (numeric.charAt(0) === \"1\") {\n                        var areaCode = numeric.substr(1, 3);\n                        return regionlessNanpNumbers.indexOf(areaCode) !== -1;\n                    }\n                    return false;\n                }\n            }, {\n                key: \"_highlightListItem\",\n                value: function _highlightListItem(listItem, shouldFocus) {\n                    var prevItem = this.highlightedItem;\n                    if (prevItem) prevItem.classList.remove(\"iti__highlight\");\n                    this.highlightedItem = listItem;\n                    this.highlightedItem.classList.add(\"iti__highlight\");\n                    if (shouldFocus) this.highlightedItem.focus();\n                }\n            }, {\n                key: \"_getCountryData\",\n                value: function _getCountryData(countryCode, ignoreOnlyCountriesOption, allowFail) {\n                    var countryList = ignoreOnlyCountriesOption ? allCountries : this.countries;\n                    for (var i = 0; i < countryList.length; i++) {\n                        if (countryList[i].iso2 === countryCode) {\n                            return countryList[i];\n                        }\n                    }\n                    if (allowFail) {\n                        return null;\n                    }\n                    throw new Error(\"No country data for '\".concat(countryCode, \"'\"));\n                }\n            }, {\n                key: \"_setFlag\",\n                value: function _setFlag(countryCode) {\n                    var prevCountry = this.selectedCountryData.iso2 ? this.selectedCountryData : {};\n                    // do this first as it will throw an error and stop if countryCode is invalid\n                    this.selectedCountryData = countryCode ? this._getCountryData(countryCode, false, false) : {};\n                    // update the defaultCountry - we only need the iso2 from now on, so just store that\n                    if (this.selectedCountryData.iso2) {\n                        this.defaultCountry = this.selectedCountryData.iso2;\n                    }\n                    this.selectedFlagInner.setAttribute(\"class\", \"iti__flag iti__\".concat(countryCode));\n                    // update the selected country's title attribute\n                    var title = countryCode ? \"\".concat(this.selectedCountryData.name, \": +\").concat(this.selectedCountryData.dialCode) : \"Unknown\";\n                    this.selectedFlag.setAttribute(\"title\", title);\n                    if (this.options.separateDialCode) {\n                        var dialCode = this.selectedCountryData.dialCode ? \"+\".concat(this.selectedCountryData.dialCode) : \"\";\n                        this.selectedDialCode.innerHTML = dialCode;\n                        // offsetWidth is zero if input is in a hidden container during initialisation\n                        var selectedFlagWidth = this.selectedFlag.offsetWidth || this._getHiddenSelectedFlagWidth();\n                        // add 6px of padding after the grey selected-dial-code box, as this is what we use in the css\n                        this.telInput.style.paddingLeft = \"\".concat(selectedFlagWidth + 6, \"px\");\n                    }\n                    // and the input's placeholder\n                    this._updatePlaceholder();\n                    // update the active list item\n                    if (this.options.allowDropdown) {\n                        var prevItem = this.activeItem;\n                        if (prevItem) {\n                            prevItem.classList.remove(\"iti__active\");\n                            prevItem.setAttribute(\"aria-selected\", \"false\");\n                        }\n                        if (countryCode) {\n                            // check if there is a preferred item first, else fall back to standard\n                            var nextItem = this.countryList.querySelector(\"#iti-\".concat(this.id, \"__item-\").concat(countryCode, \"-preferred\")) || this.countryList.querySelector(\"#iti-\".concat(this.id, \"__item-\").concat(countryCode));\n                            nextItem.setAttribute(\"aria-selected\", \"true\");\n                            nextItem.classList.add(\"iti__active\");\n                            this.activeItem = nextItem;\n                            this.selectedFlag.setAttribute(\"aria-activedescendant\", nextItem.getAttribute(\"id\"));\n                        }\n                    }\n                    // return if the flag has changed or not\n                    return prevCountry.iso2 !== countryCode;\n                }\n            }, {\n                key: \"_getHiddenSelectedFlagWidth\",\n                value: function _getHiddenSelectedFlagWidth() {\n                    // to get the right styling to apply, all we need is a shallow clone of the container,\n                    // and then to inject a deep clone of the selectedFlag element\n                    var containerClone = this.telInput.parentNode.cloneNode();\n                    containerClone.style.visibility = \"hidden\";\n                    document.body.appendChild(containerClone);\n                    var flagsContainerClone = this.flagsContainer.cloneNode();\n                    containerClone.appendChild(flagsContainerClone);\n                    var selectedFlagClone = this.selectedFlag.cloneNode(true);\n                    flagsContainerClone.appendChild(selectedFlagClone);\n                    var width = selectedFlagClone.offsetWidth;\n                    containerClone.parentNode.removeChild(containerClone);\n                    return width;\n                }\n            }, {\n                key: \"_updatePlaceholder\",\n                value: function _updatePlaceholder() {\n                    var shouldSetPlaceholder = this.options.autoPlaceholder === \"aggressive\" || !this.hadInitialPlaceholder && this.options.autoPlaceholder === \"polite\";\n                    if (window.intlTelInputUtils && shouldSetPlaceholder) {\n                        var numberType = intlTelInputUtils.numberType[this.options.placeholderNumberType];\n                        var placeholder = this.selectedCountryData.iso2 ? intlTelInputUtils.getExampleNumber(this.selectedCountryData.iso2, this.options.nationalMode, numberType) : \"\";\n                        placeholder = this._beforeSetNumber(placeholder);\n                        if (typeof this.options.customPlaceholder === \"function\") {\n                            placeholder = this.options.customPlaceholder(placeholder, this.selectedCountryData);\n                        }\n                        this.telInput.setAttribute(\"placeholder\", placeholder);\n                    }\n                }\n            }, {\n                key: \"_selectListItem\",\n                value: function _selectListItem(listItem) {\n                    // update selected flag and active list item\n                    var flagChanged = this._setFlag(listItem.getAttribute(\"data-country-code\"));\n                    this._closeDropdown();\n                    this._updateDialCode(listItem.getAttribute(\"data-dial-code\"), true);\n                    // focus the input\n                    this.telInput.focus();\n                    // put cursor at end - this fix is required for FF and IE11 (with nationalMode=false i.e. auto\n                    // inserting dial code), who try to put the cursor at the beginning the first time\n                    var len = this.telInput.value.length;\n                    this.telInput.setSelectionRange(len, len);\n                    if (flagChanged) {\n                        this._triggerCountryChange();\n                    }\n                }\n            }, {\n                key: \"_closeDropdown\",\n                value: function _closeDropdown() {\n                    this.countryList.classList.add(\"iti__hide\");\n                    this.selectedFlag.setAttribute(\"aria-expanded\", \"false\");\n                    // update the arrow\n                    this.dropdownArrow.classList.remove(\"iti__arrow--up\");\n                    // unbind key events\n                    document.removeEventListener(\"keydown\", this._handleKeydownOnDropdown);\n                    document.documentElement.removeEventListener(\"click\", this._handleClickOffToClose);\n                    this.countryList.removeEventListener(\"mouseover\", this._handleMouseoverCountryList);\n                    this.countryList.removeEventListener(\"click\", this._handleClickCountryList);\n                    // remove menu from container\n                    if (this.options.dropdownContainer) {\n                        if (!this.isMobile) window.removeEventListener(\"scroll\", this._handleWindowScroll);\n                        if (this.dropdown.parentNode) this.dropdown.parentNode.removeChild(this.dropdown);\n                    }\n                    this._trigger(\"close:countrydropdown\");\n                }\n            }, {\n                key: \"_scrollTo\",\n                value: function _scrollTo(element, middle) {\n                    var container = this.countryList;\n                    // windowTop from https://stackoverflow.com/a/14384091/217866\n                    var windowTop = window.pageYOffset || document.documentElement.scrollTop;\n                    var containerHeight = container.offsetHeight;\n                    var containerTop = container.getBoundingClientRect().top + windowTop;\n                    var containerBottom = containerTop + containerHeight;\n                    var elementHeight = element.offsetHeight;\n                    var elementTop = element.getBoundingClientRect().top + windowTop;\n                    var elementBottom = elementTop + elementHeight;\n                    var newScrollTop = elementTop - containerTop + container.scrollTop;\n                    var middleOffset = containerHeight / 2 - elementHeight / 2;\n                    if (elementTop < containerTop) {\n                        // scroll up\n                        if (middle) newScrollTop -= middleOffset;\n                        container.scrollTop = newScrollTop;\n                    } else if (elementBottom > containerBottom) {\n                        // scroll down\n                        if (middle) newScrollTop += middleOffset;\n                        var heightDifference = containerHeight - elementHeight;\n                        container.scrollTop = newScrollTop - heightDifference;\n                    }\n                }\n            }, {\n                key: \"_updateDialCode\",\n                value: function _updateDialCode(newDialCodeBare, hasSelectedListItem) {\n                    var inputVal = this.telInput.value;\n                    // save having to pass this every time\n                    var newDialCode = \"+\".concat(newDialCodeBare);\n                    var newNumber;\n                    if (inputVal.charAt(0) === \"+\") {\n                        // there's a plus so we're dealing with a replacement (doesn't matter if nationalMode or not)\n                        var prevDialCode = this._getDialCode(inputVal);\n                        if (prevDialCode) {\n                            // current number contains a valid dial code, so replace it\n                            newNumber = inputVal.replace(prevDialCode, newDialCode);\n                        } else {\n                            // current number contains an invalid dial code, so ditch it\n                            // (no way to determine where the invalid dial code ends and the rest of the number begins)\n                            newNumber = newDialCode;\n                        }\n                    } else if (this.options.nationalMode || this.options.separateDialCode) {\n                        // don't do anything\n                        return;\n                    } else {\n                        // nationalMode is disabled\n                        if (inputVal) {\n                            // there is an existing value with no dial code: prefix the new dial code\n                            newNumber = newDialCode + inputVal;\n                        } else if (hasSelectedListItem || !this.options.autoHideDialCode) {\n                            // no existing value and either they've just selected a list item, or autoHideDialCode is\n                            // disabled: insert new dial code\n                            newNumber = newDialCode;\n                        } else {\n                            return;\n                        }\n                    }\n                    this.telInput.value = newNumber;\n                }\n            }, {\n                key: \"_getDialCode\",\n                value: function _getDialCode(number, includeAreaCode) {\n                    var dialCode = \"\";\n                    // only interested in international numbers (starting with a plus)\n                    if (number.charAt(0) === \"+\") {\n                        var numericChars = \"\";\n                        // iterate over chars\n                        for (var i = 0; i < number.length; i++) {\n                            var c = number.charAt(i);\n                            // if char is number (https://stackoverflow.com/a/8935649/217866)\n                            if (!isNaN(parseInt(c, 10))) {\n                                numericChars += c;\n                                // if current numericChars make a valid dial code\n                                if (includeAreaCode) {\n                                    if (this.countryCodes[numericChars]) {\n                                        // store the actual raw string (useful for matching later)\n                                        dialCode = number.substr(0, i + 1);\n                                    }\n                                } else {\n                                    if (this.dialCodes[numericChars]) {\n                                        dialCode = number.substr(0, i + 1);\n                                        // if we're just looking for a dial code, we can break as soon as we find one\n                                        break;\n                                    }\n                                }\n                                // stop searching as soon as we can - in this case when we hit max len\n                                if (numericChars.length === this.countryCodeMaxLen) {\n                                    break;\n                                }\n                            }\n                        }\n                    }\n                    return dialCode;\n                }\n            }, {\n                key: \"_getFullNumber\",\n                value: function _getFullNumber() {\n                    var val = this.telInput.value.trim();\n                    var dialCode = this.selectedCountryData.dialCode;\n                    var prefix;\n                    var numericVal = this._getNumeric(val);\n                    if (this.options.separateDialCode && val.charAt(0) !== \"+\" && dialCode && numericVal) {\n                        // when using separateDialCode, it is visible so is effectively part of the typed number\n                        prefix = \"+\".concat(dialCode);\n                    } else {\n                        prefix = \"\";\n                    }\n                    return prefix + val;\n                }\n            }, {\n                key: \"_beforeSetNumber\",\n                value: function _beforeSetNumber(originalNumber) {\n                    var number = originalNumber;\n                    if (this.options.separateDialCode) {\n                        var dialCode = this._getDialCode(number);\n                        // if there is a valid dial code\n                        if (dialCode) {\n                            // in case _getDialCode returned an area code as well\n                            dialCode = \"+\".concat(this.selectedCountryData.dialCode);\n                            // a lot of numbers will have a space separating the dial code and the main number, and\n                            // some NANP numbers will have a hyphen e.g. +1 684-733-1234 - in both cases we want to get\n                            // rid of it\n                            // NOTE: don't just trim all non-numerics as may want to preserve an open parenthesis etc\n                            var start = number[dialCode.length] === \" \" || number[dialCode.length] === \"-\" ? dialCode.length + 1 : dialCode.length;\n                            number = number.substr(start);\n                        }\n                    }\n                    return this._cap(number);\n                }\n            }, {\n                key: \"_triggerCountryChange\",\n                value: function _triggerCountryChange() {\n                    this._trigger(\"countrychange\");\n                }\n            }, {\n                key: \"handleAutoCountry\",\n                value: function handleAutoCountry() {\n                    if (this.options.initialCountry === \"auto\") {\n                        // we must set this even if there is an initial val in the input: in case the initial val is\n                        // invalid and they delete it - they should see their auto country\n                        this.defaultCountry = window.intlTelInputGlobals.autoCountry;\n                        // if there's no initial value in the input, then update the flag\n                        if (!this.telInput.value) {\n                            this.setCountry(this.defaultCountry);\n                        }\n                        this.resolveAutoCountryPromise();\n                    }\n                }\n            }, {\n                key: \"handleUtils\",\n                value: function handleUtils() {\n                    // if the request was successful\n                    if (window.intlTelInputUtils) {\n                        // if there's an initial value in the input, then format it\n                        if (this.telInput.value) {\n                            this._updateValFromNumber(this.telInput.value);\n                        }\n                        this._updatePlaceholder();\n                    }\n                    this.resolveUtilsScriptPromise();\n                }\n            }, {\n                key: \"destroy\",\n                value: function destroy() {\n                    var form = this.telInput.form;\n                    if (this.options.allowDropdown) {\n                        // make sure the dropdown is closed (and unbind listeners)\n                        this._closeDropdown();\n                        this.selectedFlag.removeEventListener(\"click\", this._handleClickSelectedFlag);\n                        this.flagsContainer.removeEventListener(\"keydown\", this._handleFlagsContainerKeydown);\n                        // label click hack\n                        var label = this._getClosestLabel();\n                        if (label) label.removeEventListener(\"click\", this._handleLabelClick);\n                    }\n                    // unbind hiddenInput listeners\n                    if (this.hiddenInput && form) form.removeEventListener(\"submit\", this._handleHiddenInputSubmit);\n                    // unbind autoHideDialCode listeners\n                    if (this.options.autoHideDialCode) {\n                        if (form) form.removeEventListener(\"submit\", this._handleSubmitOrBlurEvent);\n                        this.telInput.removeEventListener(\"blur\", this._handleSubmitOrBlurEvent);\n                    }\n                    // unbind key events, and cut/paste events\n                    this.telInput.removeEventListener(\"keyup\", this._handleKeyupEvent);\n                    this.telInput.removeEventListener(\"cut\", this._handleClipboardEvent);\n                    this.telInput.removeEventListener(\"paste\", this._handleClipboardEvent);\n                    // remove attribute of id instance: data-intl-tel-input-id\n                    this.telInput.removeAttribute(\"data-intl-tel-input-id\");\n                    // remove markup (but leave the original input)\n                    var wrapper = this.telInput.parentNode;\n                    wrapper.parentNode.insertBefore(this.telInput, wrapper);\n                    wrapper.parentNode.removeChild(wrapper);\n                    delete window.intlTelInputGlobals.instances[this.id];\n                }\n            }, {\n                key: \"getExtension\",\n                value: function getExtension() {\n                    if (window.intlTelInputUtils) {\n                        return intlTelInputUtils.getExtension(this._getFullNumber(), this.selectedCountryData.iso2);\n                    }\n                    return \"\";\n                }\n            }, {\n                key: \"getNumber\",\n                value: function getNumber(format) {\n                    if (window.intlTelInputUtils) {\n                        var iso2 = this.selectedCountryData.iso2;\n                        return intlTelInputUtils.formatNumber(this._getFullNumber(), iso2, format);\n                    }\n                    return \"\";\n                }\n            }, {\n                key: \"getNumberType\",\n                value: function getNumberType() {\n                    if (window.intlTelInputUtils) {\n                        return intlTelInputUtils.getNumberType(this._getFullNumber(), this.selectedCountryData.iso2);\n                    }\n                    return -99;\n                }\n            }, {\n                key: \"getSelectedCountryData\",\n                value: function getSelectedCountryData() {\n                    return this.selectedCountryData;\n                }\n            }, {\n                key: \"getValidationError\",\n                value: function getValidationError() {\n                    if (window.intlTelInputUtils) {\n                        var iso2 = this.selectedCountryData.iso2;\n                        return intlTelInputUtils.getValidationError(this._getFullNumber(), iso2);\n                    }\n                    return -99;\n                }\n            }, {\n                key: \"isValidNumber\",\n                value: function isValidNumber() {\n                    var val = this._getFullNumber().trim();\n                    var countryCode = this.options.nationalMode ? this.selectedCountryData.iso2 : \"\";\n                    return window.intlTelInputUtils ? intlTelInputUtils.isValidNumber(val, countryCode) : null;\n                }\n            }, {\n                key: \"setCountry\",\n                value: function setCountry(originalCountryCode) {\n                    var countryCode = originalCountryCode.toLowerCase();\n                    // check if already selected\n                    if (!this.selectedFlagInner.classList.contains(\"iti__\".concat(countryCode))) {\n                        this._setFlag(countryCode);\n                        this._updateDialCode(this.selectedCountryData.dialCode, false);\n                        this._triggerCountryChange();\n                    }\n                }\n            }, {\n                key: \"setNumber\",\n                value: function setNumber(number) {\n                    // we must update the flag first, which updates this.selectedCountryData, which is used for\n                    // formatting the number before displaying it\n                    var flagChanged = this._updateFlagFromNumber(number);\n                    this._updateValFromNumber(number);\n                    if (flagChanged) {\n                        this._triggerCountryChange();\n                    }\n                }\n            }, {\n                key: \"setPlaceholderNumberType\",\n                value: function setPlaceholderNumberType(type) {\n                    this.options.placeholderNumberType = type;\n                    this._updatePlaceholder();\n                }\n            } ]);\n            return Iti;\n        }();\n        /********************\n *  STATIC METHODS\n ********************/\n        // get the country data object\n        intlTelInputGlobals.getCountryData = function() {\n            return allCountries;\n        };\n        // inject a <script> element to load utils.js\n        var injectScript = function injectScript(path, handleSuccess, handleFailure) {\n            // inject a new script element into the page\n            var script = document.createElement(\"script\");\n            script.onload = function() {\n                forEachInstance(\"handleUtils\");\n                if (handleSuccess) handleSuccess();\n            };\n            script.onerror = function() {\n                forEachInstance(\"rejectUtilsScriptPromise\");\n                if (handleFailure) handleFailure();\n            };\n            script.className = \"iti-load-utils\";\n            script.async = true;\n            script.src = path;\n            document.body.appendChild(script);\n        };\n        // load the utils script\n        intlTelInputGlobals.loadUtils = function(path) {\n            // 2 options:\n            // 1) not already started loading (start)\n            // 2) already started loading (do nothing - just wait for the onload callback to fire, which will\n            // trigger handleUtils on all instances, invoking their resolveUtilsScriptPromise functions)\n            if (!window.intlTelInputUtils && !window.intlTelInputGlobals.startedLoadingUtilsScript) {\n                // only do this once\n                window.intlTelInputGlobals.startedLoadingUtilsScript = true;\n                // if we have promises, then return a promise\n                if (typeof Promise !== \"undefined\") {\n                    return new Promise(function(resolve, reject) {\n                        return injectScript(path, resolve, reject);\n                    });\n                }\n                injectScript(path);\n            }\n            return null;\n        };\n        // default options\n        intlTelInputGlobals.defaults = defaults;\n        // version\n        intlTelInputGlobals.version = \"17.0.8\";\n        // convenience wrapper\n        return function(input, options) {\n            var iti = new Iti(input, options);\n            iti._init();\n            input.setAttribute(\"data-intl-tel-input-id\", iti.id);\n            window.intlTelInputGlobals.instances[iti.id] = iti;\n            return iti;\n        };\n    }();\n});", "/**\n * Exposing intl-tel-input as a component\n */\nmodule.exports = require(\"./build/js/intlTelInput\");\n", "/*!\n * Select2 4.0.13\n * https://select2.github.io\n *\n * Released under the MIT license\n * https://github.com/select2/select2/blob/master/LICENSE.md\n */\n;(function (factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if (typeof module === 'object' && module.exports) {\n    // Node/CommonJS\n    module.exports = function (root, jQuery) {\n      if (jQuery === undefined) {\n        // require('jQuery') returns a factory that requires window to\n        // build a jQuery instance, we normalize how we use modules\n        // that require this pattern but the window provided is a noop\n        // if it's defined (how jquery works)\n        if (typeof window !== 'undefined') {\n          jQuery = require('jquery');\n        }\n        else {\n          jQuery = require('jquery')(root);\n        }\n      }\n      factory(jQuery);\n      return jQuery;\n    };\n  } else {\n    // Browser globals\n    factory(jQuery);\n  }\n} (function (jQuery) {\n  // This is needed so we can catch the AMD loader configuration and use it\n  // The inner file should be wrapped (by `banner.start.js`) in a function that\n  // returns the AMD loader references.\n  var S2 =(function () {\n  // Restore the Select2 AMD loader so it can be used\n  // Needed mostly in the language files, where the loader is not inserted\n  if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {\n    var S2 = jQuery.fn.select2.amd;\n  }\nvar S2;(function () { if (!S2 || !S2.requirejs) {\nif (!S2) { S2 = {}; } else { require = S2; }\n/**\n * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.\n * Released under MIT license, http://github.com/requirejs/almond/LICENSE\n */\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\n//be followed.\n/*global setTimeout: false */\n\nvar requirejs, require, define;\n(function (undef) {\n    var main, req, makeMap, handlers,\n        defined = {},\n        waiting = {},\n        config = {},\n        defining = {},\n        hasOwn = Object.prototype.hasOwnProperty,\n        aps = [].slice,\n        jsSuffixRegExp = /\\.js$/;\n\n    function hasProp(obj, prop) {\n        return hasOwn.call(obj, prop);\n    }\n\n    /**\n     * Given a relative module name, like ./something, normalize it to\n     * a real name that can be mapped to a path.\n     * @param {String} name the relative name\n     * @param {String} baseName a real name that the name arg is relative\n     * to.\n     * @returns {String} normalized name\n     */\n    function normalize(name, baseName) {\n        var nameParts, nameSegment, mapValue, foundMap, lastIndex,\n            foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,\n            baseParts = baseName && baseName.split(\"/\"),\n            map = config.map,\n            starMap = (map && map['*']) || {};\n\n        //Adjust any relative paths.\n        if (name) {\n            name = name.split('/');\n            lastIndex = name.length - 1;\n\n            // If wanting node ID compatibility, strip .js from end\n            // of IDs. Have to do this here, and not in nameToUrl\n            // because node allows either .js or non .js to map\n            // to same file.\n            if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n                name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n            }\n\n            // Starts with a '.' so need the baseName\n            if (name[0].charAt(0) === '.' && baseParts) {\n                //Convert baseName to array, and lop off the last part,\n                //so that . matches that 'directory' and not name of the baseName's\n                //module. For instance, baseName of 'one/two/three', maps to\n                //'one/two/three.js', but we want the directory, 'one/two' for\n                //this normalization.\n                normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n                name = normalizedBaseParts.concat(name);\n            }\n\n            //start trimDots\n            for (i = 0; i < name.length; i++) {\n                part = name[i];\n                if (part === '.') {\n                    name.splice(i, 1);\n                    i -= 1;\n                } else if (part === '..') {\n                    // If at the start, or previous value is still ..,\n                    // keep them so that when converted to a path it may\n                    // still work when converted to a path, even though\n                    // as an ID it is less than ideal. In larger point\n                    // releases, may be better to just kick out an error.\n                    if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {\n                        continue;\n                    } else if (i > 0) {\n                        name.splice(i - 1, 2);\n                        i -= 2;\n                    }\n                }\n            }\n            //end trimDots\n\n            name = name.join('/');\n        }\n\n        //Apply map config if available.\n        if ((baseParts || starMap) && map) {\n            nameParts = name.split('/');\n\n            for (i = nameParts.length; i > 0; i -= 1) {\n                nameSegment = nameParts.slice(0, i).join(\"/\");\n\n                if (baseParts) {\n                    //Find the longest baseName segment match in the config.\n                    //So, do joins on the biggest to smallest lengths of baseParts.\n                    for (j = baseParts.length; j > 0; j -= 1) {\n                        mapValue = map[baseParts.slice(0, j).join('/')];\n\n                        //baseName segment has  config, find if it has one for\n                        //this name.\n                        if (mapValue) {\n                            mapValue = mapValue[nameSegment];\n                            if (mapValue) {\n                                //Match, update name to the new value.\n                                foundMap = mapValue;\n                                foundI = i;\n                                break;\n                            }\n                        }\n                    }\n                }\n\n                if (foundMap) {\n                    break;\n                }\n\n                //Check for a star map match, but just hold on to it,\n                //if there is a shorter segment match later in a matching\n                //config, then favor over this star map.\n                if (!foundStarMap && starMap && starMap[nameSegment]) {\n                    foundStarMap = starMap[nameSegment];\n                    starI = i;\n                }\n            }\n\n            if (!foundMap && foundStarMap) {\n                foundMap = foundStarMap;\n                foundI = starI;\n            }\n\n            if (foundMap) {\n                nameParts.splice(0, foundI, foundMap);\n                name = nameParts.join('/');\n            }\n        }\n\n        return name;\n    }\n\n    function makeRequire(relName, forceSync) {\n        return function () {\n            //A version of a require function that passes a moduleName\n            //value for items that may need to\n            //look up paths relative to the moduleName\n            var args = aps.call(arguments, 0);\n\n            //If first arg is not require('string'), and there is only\n            //one arg, it is the array form without a callback. Insert\n            //a null so that the following concat is correct.\n            if (typeof args[0] !== 'string' && args.length === 1) {\n                args.push(null);\n            }\n            return req.apply(undef, args.concat([relName, forceSync]));\n        };\n    }\n\n    function makeNormalize(relName) {\n        return function (name) {\n            return normalize(name, relName);\n        };\n    }\n\n    function makeLoad(depName) {\n        return function (value) {\n            defined[depName] = value;\n        };\n    }\n\n    function callDep(name) {\n        if (hasProp(waiting, name)) {\n            var args = waiting[name];\n            delete waiting[name];\n            defining[name] = true;\n            main.apply(undef, args);\n        }\n\n        if (!hasProp(defined, name) && !hasProp(defining, name)) {\n            throw new Error('No ' + name);\n        }\n        return defined[name];\n    }\n\n    //Turns a plugin!resource to [plugin, resource]\n    //with the plugin being undefined if the name\n    //did not have a plugin prefix.\n    function splitPrefix(name) {\n        var prefix,\n            index = name ? name.indexOf('!') : -1;\n        if (index > -1) {\n            prefix = name.substring(0, index);\n            name = name.substring(index + 1, name.length);\n        }\n        return [prefix, name];\n    }\n\n    //Creates a parts array for a relName where first part is plugin ID,\n    //second part is resource ID. Assumes relName has already been normalized.\n    function makeRelParts(relName) {\n        return relName ? splitPrefix(relName) : [];\n    }\n\n    /**\n     * Makes a name map, normalizing the name, and using a plugin\n     * for normalization if necessary. Grabs a ref to plugin\n     * too, as an optimization.\n     */\n    makeMap = function (name, relParts) {\n        var plugin,\n            parts = splitPrefix(name),\n            prefix = parts[0],\n            relResourceName = relParts[1];\n\n        name = parts[1];\n\n        if (prefix) {\n            prefix = normalize(prefix, relResourceName);\n            plugin = callDep(prefix);\n        }\n\n        //Normalize according\n        if (prefix) {\n            if (plugin && plugin.normalize) {\n                name = plugin.normalize(name, makeNormalize(relResourceName));\n            } else {\n                name = normalize(name, relResourceName);\n            }\n        } else {\n            name = normalize(name, relResourceName);\n            parts = splitPrefix(name);\n            prefix = parts[0];\n            name = parts[1];\n            if (prefix) {\n                plugin = callDep(prefix);\n            }\n        }\n\n        //Using ridiculous property names for space reasons\n        return {\n            f: prefix ? prefix + '!' + name : name, //fullName\n            n: name,\n            pr: prefix,\n            p: plugin\n        };\n    };\n\n    function makeConfig(name) {\n        return function () {\n            return (config && config.config && config.config[name]) || {};\n        };\n    }\n\n    handlers = {\n        require: function (name) {\n            return makeRequire(name);\n        },\n        exports: function (name) {\n            var e = defined[name];\n            if (typeof e !== 'undefined') {\n                return e;\n            } else {\n                return (defined[name] = {});\n            }\n        },\n        module: function (name) {\n            return {\n                id: name,\n                uri: '',\n                exports: defined[name],\n                config: makeConfig(name)\n            };\n        }\n    };\n\n    main = function (name, deps, callback, relName) {\n        var cjsModule, depName, ret, map, i, relParts,\n            args = [],\n            callbackType = typeof callback,\n            usingExports;\n\n        //Use name if no relName\n        relName = relName || name;\n        relParts = makeRelParts(relName);\n\n        //Call the callback to define the module, if necessary.\n        if (callbackType === 'undefined' || callbackType === 'function') {\n            //Pull out the defined dependencies and pass the ordered\n            //values to the callback.\n            //Default to [require, exports, module] if no deps\n            deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n            for (i = 0; i < deps.length; i += 1) {\n                map = makeMap(deps[i], relParts);\n                depName = map.f;\n\n                //Fast path CommonJS standard dependencies.\n                if (depName === \"require\") {\n                    args[i] = handlers.require(name);\n                } else if (depName === \"exports\") {\n                    //CommonJS module spec 1.1\n                    args[i] = handlers.exports(name);\n                    usingExports = true;\n                } else if (depName === \"module\") {\n                    //CommonJS module spec 1.1\n                    cjsModule = args[i] = handlers.module(name);\n                } else if (hasProp(defined, depName) ||\n                           hasProp(waiting, depName) ||\n                           hasProp(defining, depName)) {\n                    args[i] = callDep(depName);\n                } else if (map.p) {\n                    map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n                    args[i] = defined[depName];\n                } else {\n                    throw new Error(name + ' missing ' + depName);\n                }\n            }\n\n            ret = callback ? callback.apply(defined[name], args) : undefined;\n\n            if (name) {\n                //If setting exports via \"module\" is in play,\n                //favor that over return value and exports. After that,\n                //favor a non-undefined return value over exports use.\n                if (cjsModule && cjsModule.exports !== undef &&\n                        cjsModule.exports !== defined[name]) {\n                    defined[name] = cjsModule.exports;\n                } else if (ret !== undef || !usingExports) {\n                    //Use the return value from the function.\n                    defined[name] = ret;\n                }\n            }\n        } else if (name) {\n            //May just be an object definition for the module. Only\n            //worry about defining if have a module name.\n            defined[name] = callback;\n        }\n    };\n\n    requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n        if (typeof deps === \"string\") {\n            if (handlers[deps]) {\n                //callback in this case is really relName\n                return handlers[deps](callback);\n            }\n            //Just return the module wanted. In this scenario, the\n            //deps arg is the module name, and second arg (if passed)\n            //is just the relName.\n            //Normalize module name, if it contains . or ..\n            return callDep(makeMap(deps, makeRelParts(callback)).f);\n        } else if (!deps.splice) {\n            //deps is a config object, not an array.\n            config = deps;\n            if (config.deps) {\n                req(config.deps, config.callback);\n            }\n            if (!callback) {\n                return;\n            }\n\n            if (callback.splice) {\n                //callback is an array, which means it is a dependency list.\n                //Adjust args if there are dependencies\n                deps = callback;\n                callback = relName;\n                relName = null;\n            } else {\n                deps = undef;\n            }\n        }\n\n        //Support require(['a'])\n        callback = callback || function () {};\n\n        //If relName is a function, it is an errback handler,\n        //so remove it.\n        if (typeof relName === 'function') {\n            relName = forceSync;\n            forceSync = alt;\n        }\n\n        //Simulate async callback;\n        if (forceSync) {\n            main(undef, deps, callback, relName);\n        } else {\n            //Using a non-zero value because of concern for what old browsers\n            //do, and latest browsers \"upgrade\" to 4 if lower value is used:\n            //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n            //If want a value immediately, use require('id') instead -- something\n            //that works in almond on the global level, but not guaranteed and\n            //unlikely to work in other AMD implementations.\n            setTimeout(function () {\n                main(undef, deps, callback, relName);\n            }, 4);\n        }\n\n        return req;\n    };\n\n    /**\n     * Just drops the config on the floor, but returns req in case\n     * the config return value is used.\n     */\n    req.config = function (cfg) {\n        return req(cfg);\n    };\n\n    /**\n     * Expose module registry for debugging and tooling\n     */\n    requirejs._defined = defined;\n\n    define = function (name, deps, callback) {\n        if (typeof name !== 'string') {\n            throw new Error('See almond README: incorrect module build, no module name');\n        }\n\n        //This module may not have dependencies\n        if (!deps.splice) {\n            //deps is not an array, so probably means\n            //an object literal or factory function for\n            //the value. Adjust args.\n            callback = deps;\n            deps = [];\n        }\n\n        if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n            waiting[name] = [name, deps, callback];\n        }\n    };\n\n    define.amd = {\n        jQuery: true\n    };\n}());\n\nS2.requirejs = requirejs;S2.require = require;S2.define = define;\n}\n}());\nS2.define(\"almond\", function(){});\n\n/* global jQuery:false, $:false */\nS2.define('jquery',[],function () {\n  var _$ = jQuery || $;\n\n  if (_$ == null && console && console.error) {\n    console.error(\n      'Select2: An instance of jQuery or a jQuery-compatible library was not ' +\n      'found. Make sure that you are including jQuery before Select2 on your ' +\n      'web page.'\n    );\n  }\n\n  return _$;\n});\n\nS2.define('select2/utils',[\n  'jquery'\n], function ($) {\n  var Utils = {};\n\n  Utils.Extend = function (ChildClass, SuperClass) {\n    var __hasProp = {}.hasOwnProperty;\n\n    function BaseConstructor () {\n      this.constructor = ChildClass;\n    }\n\n    for (var key in SuperClass) {\n      if (__hasProp.call(SuperClass, key)) {\n        ChildClass[key] = SuperClass[key];\n      }\n    }\n\n    BaseConstructor.prototype = SuperClass.prototype;\n    ChildClass.prototype = new BaseConstructor();\n    ChildClass.__super__ = SuperClass.prototype;\n\n    return ChildClass;\n  };\n\n  function getMethods (theClass) {\n    var proto = theClass.prototype;\n\n    var methods = [];\n\n    for (var methodName in proto) {\n      var m = proto[methodName];\n\n      if (typeof m !== 'function') {\n        continue;\n      }\n\n      if (methodName === 'constructor') {\n        continue;\n      }\n\n      methods.push(methodName);\n    }\n\n    return methods;\n  }\n\n  Utils.Decorate = function (SuperClass, DecoratorClass) {\n    var decoratedMethods = getMethods(DecoratorClass);\n    var superMethods = getMethods(SuperClass);\n\n    function DecoratedClass () {\n      var unshift = Array.prototype.unshift;\n\n      var argCount = DecoratorClass.prototype.constructor.length;\n\n      var calledConstructor = SuperClass.prototype.constructor;\n\n      if (argCount > 0) {\n        unshift.call(arguments, SuperClass.prototype.constructor);\n\n        calledConstructor = DecoratorClass.prototype.constructor;\n      }\n\n      calledConstructor.apply(this, arguments);\n    }\n\n    DecoratorClass.displayName = SuperClass.displayName;\n\n    function ctr () {\n      this.constructor = DecoratedClass;\n    }\n\n    DecoratedClass.prototype = new ctr();\n\n    for (var m = 0; m < superMethods.length; m++) {\n      var superMethod = superMethods[m];\n\n      DecoratedClass.prototype[superMethod] =\n        SuperClass.prototype[superMethod];\n    }\n\n    var calledMethod = function (methodName) {\n      // Stub out the original method if it's not decorating an actual method\n      var originalMethod = function () {};\n\n      if (methodName in DecoratedClass.prototype) {\n        originalMethod = DecoratedClass.prototype[methodName];\n      }\n\n      var decoratedMethod = DecoratorClass.prototype[methodName];\n\n      return function () {\n        var unshift = Array.prototype.unshift;\n\n        unshift.call(arguments, originalMethod);\n\n        return decoratedMethod.apply(this, arguments);\n      };\n    };\n\n    for (var d = 0; d < decoratedMethods.length; d++) {\n      var decoratedMethod = decoratedMethods[d];\n\n      DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);\n    }\n\n    return DecoratedClass;\n  };\n\n  var Observable = function () {\n    this.listeners = {};\n  };\n\n  Observable.prototype.on = function (event, callback) {\n    this.listeners = this.listeners || {};\n\n    if (event in this.listeners) {\n      this.listeners[event].push(callback);\n    } else {\n      this.listeners[event] = [callback];\n    }\n  };\n\n  Observable.prototype.trigger = function (event) {\n    var slice = Array.prototype.slice;\n    var params = slice.call(arguments, 1);\n\n    this.listeners = this.listeners || {};\n\n    // Params should always come in as an array\n    if (params == null) {\n      params = [];\n    }\n\n    // If there are no arguments to the event, use a temporary object\n    if (params.length === 0) {\n      params.push({});\n    }\n\n    // Set the `_type` of the first object to the event\n    params[0]._type = event;\n\n    if (event in this.listeners) {\n      this.invoke(this.listeners[event], slice.call(arguments, 1));\n    }\n\n    if ('*' in this.listeners) {\n      this.invoke(this.listeners['*'], arguments);\n    }\n  };\n\n  Observable.prototype.invoke = function (listeners, params) {\n    for (var i = 0, len = listeners.length; i < len; i++) {\n      listeners[i].apply(this, params);\n    }\n  };\n\n  Utils.Observable = Observable;\n\n  Utils.generateChars = function (length) {\n    var chars = '';\n\n    for (var i = 0; i < length; i++) {\n      var randomChar = Math.floor(Math.random() * 36);\n      chars += randomChar.toString(36);\n    }\n\n    return chars;\n  };\n\n  Utils.bind = function (func, context) {\n    return function () {\n      func.apply(context, arguments);\n    };\n  };\n\n  Utils._convertData = function (data) {\n    for (var originalKey in data) {\n      var keys = originalKey.split('-');\n\n      var dataLevel = data;\n\n      if (keys.length === 1) {\n        continue;\n      }\n\n      for (var k = 0; k < keys.length; k++) {\n        var key = keys[k];\n\n        // Lowercase the first letter\n        // By default, dash-separated becomes camelCase\n        key = key.substring(0, 1).toLowerCase() + key.substring(1);\n\n        if (!(key in dataLevel)) {\n          dataLevel[key] = {};\n        }\n\n        if (k == keys.length - 1) {\n          dataLevel[key] = data[originalKey];\n        }\n\n        dataLevel = dataLevel[key];\n      }\n\n      delete data[originalKey];\n    }\n\n    return data;\n  };\n\n  Utils.hasScroll = function (index, el) {\n    // Adapted from the function created by @ShadowScripter\n    // and adapted by @BillBarry on the Stack Exchange Code Review website.\n    // The original code can be found at\n    // http://codereview.stackexchange.com/q/13338\n    // and was designed to be used with the Sizzle selector engine.\n\n    var $el = $(el);\n    var overflowX = el.style.overflowX;\n    var overflowY = el.style.overflowY;\n\n    //Check both x and y declarations\n    if (overflowX === overflowY &&\n        (overflowY === 'hidden' || overflowY === 'visible')) {\n      return false;\n    }\n\n    if (overflowX === 'scroll' || overflowY === 'scroll') {\n      return true;\n    }\n\n    return ($el.innerHeight() < el.scrollHeight ||\n      $el.innerWidth() < el.scrollWidth);\n  };\n\n  Utils.escapeMarkup = function (markup) {\n    var replaceMap = {\n      '\\\\': '&#92;',\n      '&': '&amp;',\n      '<': '&lt;',\n      '>': '&gt;',\n      '\"': '&quot;',\n      '\\'': '&#39;',\n      '/': '&#47;'\n    };\n\n    // Do not try to escape the markup if it's not a string\n    if (typeof markup !== 'string') {\n      return markup;\n    }\n\n    return String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\n      return replaceMap[match];\n    });\n  };\n\n  // Append an array of jQuery nodes to a given element.\n  Utils.appendMany = function ($element, $nodes) {\n    // jQuery 1.7.x does not support $.fn.append() with an array\n    // Fall back to a jQuery object collection using $.fn.add()\n    if ($.fn.jquery.substr(0, 3) === '1.7') {\n      var $jqNodes = $();\n\n      $.map($nodes, function (node) {\n        $jqNodes = $jqNodes.add(node);\n      });\n\n      $nodes = $jqNodes;\n    }\n\n    $element.append($nodes);\n  };\n\n  // Cache objects in Utils.__cache instead of $.data (see #4346)\n  Utils.__cache = {};\n\n  var id = 0;\n  Utils.GetUniqueElementId = function (element) {\n    // Get a unique element Id. If element has no id,\n    // creates a new unique number, stores it in the id\n    // attribute and returns the new id.\n    // If an id already exists, it simply returns it.\n\n    var select2Id = element.getAttribute('data-select2-id');\n    if (select2Id == null) {\n      // If element has id, use it.\n      if (element.id) {\n        select2Id = element.id;\n        element.setAttribute('data-select2-id', select2Id);\n      } else {\n        element.setAttribute('data-select2-id', ++id);\n        select2Id = id.toString();\n      }\n    }\n    return select2Id;\n  };\n\n  Utils.StoreData = function (element, name, value) {\n    // Stores an item in the cache for a specified element.\n    // name is the cache key.\n    var id = Utils.GetUniqueElementId(element);\n    if (!Utils.__cache[id]) {\n      Utils.__cache[id] = {};\n    }\n\n    Utils.__cache[id][name] = value;\n  };\n\n  Utils.GetData = function (element, name) {\n    // Retrieves a value from the cache by its key (name)\n    // name is optional. If no name specified, return\n    // all cache items for the specified element.\n    // and for a specified element.\n    var id = Utils.GetUniqueElementId(element);\n    if (name) {\n      if (Utils.__cache[id]) {\n        if (Utils.__cache[id][name] != null) {\n          return Utils.__cache[id][name];\n        }\n        return $(element).data(name); // Fallback to HTML5 data attribs.\n      }\n      return $(element).data(name); // Fallback to HTML5 data attribs.\n    } else {\n      return Utils.__cache[id];\n    }\n  };\n\n  Utils.RemoveData = function (element) {\n    // Removes all cached items for a specified element.\n    var id = Utils.GetUniqueElementId(element);\n    if (Utils.__cache[id] != null) {\n      delete Utils.__cache[id];\n    }\n\n    element.removeAttribute('data-select2-id');\n  };\n\n  return Utils;\n});\n\nS2.define('select2/results',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Results ($element, options, dataAdapter) {\n    this.$element = $element;\n    this.data = dataAdapter;\n    this.options = options;\n\n    Results.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Results, Utils.Observable);\n\n  Results.prototype.render = function () {\n    var $results = $(\n      '<ul class=\"select2-results__options\" role=\"listbox\"></ul>'\n    );\n\n    if (this.options.get('multiple')) {\n      $results.attr('aria-multiselectable', 'true');\n    }\n\n    this.$results = $results;\n\n    return $results;\n  };\n\n  Results.prototype.clear = function () {\n    this.$results.empty();\n  };\n\n  Results.prototype.displayMessage = function (params) {\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    this.clear();\n    this.hideLoading();\n\n    var $message = $(\n      '<li role=\"alert\" aria-live=\"assertive\"' +\n      ' class=\"select2-results__option\"></li>'\n    );\n\n    var message = this.options.get('translations').get(params.message);\n\n    $message.append(\n      escapeMarkup(\n        message(params.args)\n      )\n    );\n\n    $message[0].className += ' select2-results__message';\n\n    this.$results.append($message);\n  };\n\n  Results.prototype.hideMessages = function () {\n    this.$results.find('.select2-results__message').remove();\n  };\n\n  Results.prototype.append = function (data) {\n    this.hideLoading();\n\n    var $options = [];\n\n    if (data.results == null || data.results.length === 0) {\n      if (this.$results.children().length === 0) {\n        this.trigger('results:message', {\n          message: 'noResults'\n        });\n      }\n\n      return;\n    }\n\n    data.results = this.sort(data.results);\n\n    for (var d = 0; d < data.results.length; d++) {\n      var item = data.results[d];\n\n      var $option = this.option(item);\n\n      $options.push($option);\n    }\n\n    this.$results.append($options);\n  };\n\n  Results.prototype.position = function ($results, $dropdown) {\n    var $resultsContainer = $dropdown.find('.select2-results');\n    $resultsContainer.append($results);\n  };\n\n  Results.prototype.sort = function (data) {\n    var sorter = this.options.get('sorter');\n\n    return sorter(data);\n  };\n\n  Results.prototype.highlightFirstItem = function () {\n    var $options = this.$results\n      .find('.select2-results__option[aria-selected]');\n\n    var $selected = $options.filter('[aria-selected=true]');\n\n    // Check if there are any selected options\n    if ($selected.length > 0) {\n      // If there are selected options, highlight the first\n      $selected.first().trigger('mouseenter');\n    } else {\n      // If there are no selected options, highlight the first option\n      // in the dropdown\n      $options.first().trigger('mouseenter');\n    }\n\n    this.ensureHighlightVisible();\n  };\n\n  Results.prototype.setClasses = function () {\n    var self = this;\n\n    this.data.current(function (selected) {\n      var selectedIds = $.map(selected, function (s) {\n        return s.id.toString();\n      });\n\n      var $options = self.$results\n        .find('.select2-results__option[aria-selected]');\n\n      $options.each(function () {\n        var $option = $(this);\n\n        var item = Utils.GetData(this, 'data');\n\n        // id needs to be converted to a string when comparing\n        var id = '' + item.id;\n\n        if ((item.element != null && item.element.selected) ||\n            (item.element == null && $.inArray(id, selectedIds) > -1)) {\n          $option.attr('aria-selected', 'true');\n        } else {\n          $option.attr('aria-selected', 'false');\n        }\n      });\n\n    });\n  };\n\n  Results.prototype.showLoading = function (params) {\n    this.hideLoading();\n\n    var loadingMore = this.options.get('translations').get('searching');\n\n    var loading = {\n      disabled: true,\n      loading: true,\n      text: loadingMore(params)\n    };\n    var $loading = this.option(loading);\n    $loading.className += ' loading-results';\n\n    this.$results.prepend($loading);\n  };\n\n  Results.prototype.hideLoading = function () {\n    this.$results.find('.loading-results').remove();\n  };\n\n  Results.prototype.option = function (data) {\n    var option = document.createElement('li');\n    option.className = 'select2-results__option';\n\n    var attrs = {\n      'role': 'option',\n      'aria-selected': 'false'\n    };\n\n    var matches = window.Element.prototype.matches ||\n      window.Element.prototype.msMatchesSelector ||\n      window.Element.prototype.webkitMatchesSelector;\n\n    if ((data.element != null && matches.call(data.element, ':disabled')) ||\n        (data.element == null && data.disabled)) {\n      delete attrs['aria-selected'];\n      attrs['aria-disabled'] = 'true';\n    }\n\n    if (data.id == null) {\n      delete attrs['aria-selected'];\n    }\n\n    if (data._resultId != null) {\n      option.id = data._resultId;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    if (data.children) {\n      attrs.role = 'group';\n      attrs['aria-label'] = data.text;\n      delete attrs['aria-selected'];\n    }\n\n    for (var attr in attrs) {\n      var val = attrs[attr];\n\n      option.setAttribute(attr, val);\n    }\n\n    if (data.children) {\n      var $option = $(option);\n\n      var label = document.createElement('strong');\n      label.className = 'select2-results__group';\n\n      var $label = $(label);\n      this.template(data, label);\n\n      var $children = [];\n\n      for (var c = 0; c < data.children.length; c++) {\n        var child = data.children[c];\n\n        var $child = this.option(child);\n\n        $children.push($child);\n      }\n\n      var $childrenContainer = $('<ul></ul>', {\n        'class': 'select2-results__options select2-results__options--nested'\n      });\n\n      $childrenContainer.append($children);\n\n      $option.append(label);\n      $option.append($childrenContainer);\n    } else {\n      this.template(data, option);\n    }\n\n    Utils.StoreData(option, 'data', data);\n\n    return option;\n  };\n\n  Results.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var id = container.id + '-results';\n\n    this.$results.attr('id', id);\n\n    container.on('results:all', function (params) {\n      self.clear();\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('results:append', function (params) {\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n      }\n    });\n\n    container.on('query', function (params) {\n      self.hideMessages();\n      self.showLoading(params);\n    });\n\n    container.on('select', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n\n      if (self.options.get('scrollAfterSelect')) {\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('unselect', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n\n      if (self.options.get('scrollAfterSelect')) {\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expended=\"true\"\n      self.$results.attr('aria-expanded', 'true');\n      self.$results.attr('aria-hidden', 'false');\n\n      self.setClasses();\n      self.ensureHighlightVisible();\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expended=\"false\"\n      self.$results.attr('aria-expanded', 'false');\n      self.$results.attr('aria-hidden', 'true');\n      self.$results.removeAttr('aria-activedescendant');\n    });\n\n    container.on('results:toggle', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      $highlighted.trigger('mouseup');\n    });\n\n    container.on('results:select', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      var data = Utils.GetData($highlighted[0], 'data');\n\n      if ($highlighted.attr('aria-selected') == 'true') {\n        self.trigger('close', {});\n      } else {\n        self.trigger('select', {\n          data: data\n        });\n      }\n    });\n\n    container.on('results:previous', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('[aria-selected]');\n\n      var currentIndex = $options.index($highlighted);\n\n      // If we are already at the top, don't move further\n      // If no options, currentIndex will be -1\n      if (currentIndex <= 0) {\n        return;\n      }\n\n      var nextIndex = currentIndex - 1;\n\n      // If none are highlighted, highlight the first\n      if ($highlighted.length === 0) {\n        nextIndex = 0;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top;\n      var nextTop = $next.offset().top;\n      var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextTop - currentOffset < 0) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:next', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('[aria-selected]');\n\n      var currentIndex = $options.index($highlighted);\n\n      var nextIndex = currentIndex + 1;\n\n      // If we are at the last option, stay there\n      if (nextIndex >= $options.length) {\n        return;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top +\n        self.$results.outerHeight(false);\n      var nextBottom = $next.offset().top + $next.outerHeight(false);\n      var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextBottom > currentOffset) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      params.element.addClass('select2-results__option--highlighted');\n    });\n\n    container.on('results:message', function (params) {\n      self.displayMessage(params);\n    });\n\n    if ($.fn.mousewheel) {\n      this.$results.on('mousewheel', function (e) {\n        var top = self.$results.scrollTop();\n\n        var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;\n\n        var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;\n        var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();\n\n        if (isAtTop) {\n          self.$results.scrollTop(0);\n\n          e.preventDefault();\n          e.stopPropagation();\n        } else if (isAtBottom) {\n          self.$results.scrollTop(\n            self.$results.get(0).scrollHeight - self.$results.height()\n          );\n\n          e.preventDefault();\n          e.stopPropagation();\n        }\n      });\n    }\n\n    this.$results.on('mouseup', '.select2-results__option[aria-selected]',\n      function (evt) {\n      var $this = $(this);\n\n      var data = Utils.GetData(this, 'data');\n\n      if ($this.attr('aria-selected') === 'true') {\n        if (self.options.get('multiple')) {\n          self.trigger('unselect', {\n            originalEvent: evt,\n            data: data\n          });\n        } else {\n          self.trigger('close', {});\n        }\n\n        return;\n      }\n\n      self.trigger('select', {\n        originalEvent: evt,\n        data: data\n      });\n    });\n\n    this.$results.on('mouseenter', '.select2-results__option[aria-selected]',\n      function (evt) {\n      var data = Utils.GetData(this, 'data');\n\n      self.getHighlightedResults()\n          .removeClass('select2-results__option--highlighted');\n\n      self.trigger('results:focus', {\n        data: data,\n        element: $(this)\n      });\n    });\n  };\n\n  Results.prototype.getHighlightedResults = function () {\n    var $highlighted = this.$results\n    .find('.select2-results__option--highlighted');\n\n    return $highlighted;\n  };\n\n  Results.prototype.destroy = function () {\n    this.$results.remove();\n  };\n\n  Results.prototype.ensureHighlightVisible = function () {\n    var $highlighted = this.getHighlightedResults();\n\n    if ($highlighted.length === 0) {\n      return;\n    }\n\n    var $options = this.$results.find('[aria-selected]');\n\n    var currentIndex = $options.index($highlighted);\n\n    var currentOffset = this.$results.offset().top;\n    var nextTop = $highlighted.offset().top;\n    var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);\n\n    var offsetDelta = nextTop - currentOffset;\n    nextOffset -= $highlighted.outerHeight(false) * 2;\n\n    if (currentIndex <= 2) {\n      this.$results.scrollTop(0);\n    } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {\n      this.$results.scrollTop(nextOffset);\n    }\n  };\n\n  Results.prototype.template = function (result, container) {\n    var template = this.options.get('templateResult');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    var content = template(result, container);\n\n    if (content == null) {\n      container.style.display = 'none';\n    } else if (typeof content === 'string') {\n      container.innerHTML = escapeMarkup(content);\n    } else {\n      $(container).append(content);\n    }\n  };\n\n  return Results;\n});\n\nS2.define('select2/keys',[\n\n], function () {\n  var KEYS = {\n    BACKSPACE: 8,\n    TAB: 9,\n    ENTER: 13,\n    SHIFT: 16,\n    CTRL: 17,\n    ALT: 18,\n    ESC: 27,\n    SPACE: 32,\n    PAGE_UP: 33,\n    PAGE_DOWN: 34,\n    END: 35,\n    HOME: 36,\n    LEFT: 37,\n    UP: 38,\n    RIGHT: 39,\n    DOWN: 40,\n    DELETE: 46\n  };\n\n  return KEYS;\n});\n\nS2.define('select2/selection/base',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function BaseSelection ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    BaseSelection.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseSelection, Utils.Observable);\n\n  BaseSelection.prototype.render = function () {\n    var $selection = $(\n      '<span class=\"select2-selection\" role=\"combobox\" ' +\n      ' aria-haspopup=\"true\" aria-expanded=\"false\">' +\n      '</span>'\n    );\n\n    this._tabindex = 0;\n\n    if (Utils.GetData(this.$element[0], 'old-tabindex') != null) {\n      this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex');\n    } else if (this.$element.attr('tabindex') != null) {\n      this._tabindex = this.$element.attr('tabindex');\n    }\n\n    $selection.attr('title', this.$element.attr('title'));\n    $selection.attr('tabindex', this._tabindex);\n    $selection.attr('aria-disabled', 'false');\n\n    this.$selection = $selection;\n\n    return $selection;\n  };\n\n  BaseSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n\n    this.container = container;\n\n    this.$selection.on('focus', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('blur', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      if (evt.which === KEYS.SPACE) {\n        evt.preventDefault();\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      self.$selection.attr('aria-activedescendant', params.data._resultId);\n    });\n\n    container.on('selection:update', function (params) {\n      self.update(params.data);\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expanded=\"true\"\n      self.$selection.attr('aria-expanded', 'true');\n      self.$selection.attr('aria-owns', resultsId);\n\n      self._attachCloseHandler(container);\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expanded=\"false\"\n      self.$selection.attr('aria-expanded', 'false');\n      self.$selection.removeAttr('aria-activedescendant');\n      self.$selection.removeAttr('aria-owns');\n\n      self.$selection.trigger('focus');\n\n      self._detachCloseHandler(container);\n    });\n\n    container.on('enable', function () {\n      self.$selection.attr('tabindex', self._tabindex);\n      self.$selection.attr('aria-disabled', 'false');\n    });\n\n    container.on('disable', function () {\n      self.$selection.attr('tabindex', '-1');\n      self.$selection.attr('aria-disabled', 'true');\n    });\n  };\n\n  BaseSelection.prototype._handleBlur = function (evt) {\n    var self = this;\n\n    // This needs to be delayed as the active element is the body when the tab\n    // key is pressed, possibly along with others.\n    window.setTimeout(function () {\n      // Don't trigger `blur` if the focus is still in the selection\n      if (\n        (document.activeElement == self.$selection[0]) ||\n        ($.contains(self.$selection[0], document.activeElement))\n      ) {\n        return;\n      }\n\n      self.trigger('blur', evt);\n    }, 1);\n  };\n\n  BaseSelection.prototype._attachCloseHandler = function (container) {\n\n    $(document.body).on('mousedown.select2.' + container.id, function (e) {\n      var $target = $(e.target);\n\n      var $select = $target.closest('.select2');\n\n      var $all = $('.select2.select2-container--open');\n\n      $all.each(function () {\n        if (this == $select[0]) {\n          return;\n        }\n\n        var $element = Utils.GetData(this, 'element');\n\n        $element.select2('close');\n      });\n    });\n  };\n\n  BaseSelection.prototype._detachCloseHandler = function (container) {\n    $(document.body).off('mousedown.select2.' + container.id);\n  };\n\n  BaseSelection.prototype.position = function ($selection, $container) {\n    var $selectionContainer = $container.find('.selection');\n    $selectionContainer.append($selection);\n  };\n\n  BaseSelection.prototype.destroy = function () {\n    this._detachCloseHandler(this.container);\n  };\n\n  BaseSelection.prototype.update = function (data) {\n    throw new Error('The `update` method must be defined in child classes.');\n  };\n\n  /**\n   * Helper method to abstract the \"enabled\" (not \"disabled\") state of this\n   * object.\n   *\n   * @return {true} if the instance is not disabled.\n   * @return {false} if the instance is disabled.\n   */\n  BaseSelection.prototype.isEnabled = function () {\n    return !this.isDisabled();\n  };\n\n  /**\n   * Helper method to abstract the \"disabled\" state of this object.\n   *\n   * @return {true} if the disabled option is true.\n   * @return {false} if the disabled option is false.\n   */\n  BaseSelection.prototype.isDisabled = function () {\n    return this.options.get('disabled');\n  };\n\n  return BaseSelection;\n});\n\nS2.define('select2/selection/single',[\n  'jquery',\n  './base',\n  '../utils',\n  '../keys'\n], function ($, BaseSelection, Utils, KEYS) {\n  function SingleSelection () {\n    SingleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(SingleSelection, BaseSelection);\n\n  SingleSelection.prototype.render = function () {\n    var $selection = SingleSelection.__super__.render.call(this);\n\n    $selection.addClass('select2-selection--single');\n\n    $selection.html(\n      '<span class=\"select2-selection__rendered\"></span>' +\n      '<span class=\"select2-selection__arrow\" role=\"presentation\">' +\n        '<b role=\"presentation\"></b>' +\n      '</span>'\n    );\n\n    return $selection;\n  };\n\n  SingleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    SingleSelection.__super__.bind.apply(this, arguments);\n\n    var id = container.id + '-container';\n\n    this.$selection.find('.select2-selection__rendered')\n      .attr('id', id)\n      .attr('role', 'textbox')\n      .attr('aria-readonly', 'true');\n    this.$selection.attr('aria-labelledby', id);\n\n    this.$selection.on('mousedown', function (evt) {\n      // Only respond to left clicks\n      if (evt.which !== 1) {\n        return;\n      }\n\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on('focus', function (evt) {\n      // User focuses on the container\n    });\n\n    this.$selection.on('blur', function (evt) {\n      // User exits the container\n    });\n\n    container.on('focus', function (evt) {\n      if (!container.isOpen()) {\n        self.$selection.trigger('focus');\n      }\n    });\n  };\n\n  SingleSelection.prototype.clear = function () {\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    $rendered.empty();\n    $rendered.removeAttr('title'); // clear tooltip on empty\n  };\n\n  SingleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  SingleSelection.prototype.selectionContainer = function () {\n    return $('<span></span>');\n  };\n\n  SingleSelection.prototype.update = function (data) {\n    if (data.length === 0) {\n      this.clear();\n      return;\n    }\n\n    var selection = data[0];\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    var formatted = this.display(selection, $rendered);\n\n    $rendered.empty().append(formatted);\n\n    var title = selection.title || selection.text;\n\n    if (title) {\n      $rendered.attr('title', title);\n    } else {\n      $rendered.removeAttr('title');\n    }\n  };\n\n  return SingleSelection;\n});\n\nS2.define('select2/selection/multiple',[\n  'jquery',\n  './base',\n  '../utils'\n], function ($, BaseSelection, Utils) {\n  function MultipleSelection ($element, options) {\n    MultipleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(MultipleSelection, BaseSelection);\n\n  MultipleSelection.prototype.render = function () {\n    var $selection = MultipleSelection.__super__.render.call(this);\n\n    $selection.addClass('select2-selection--multiple');\n\n    $selection.html(\n      '<ul class=\"select2-selection__rendered\"></ul>'\n    );\n\n    return $selection;\n  };\n\n  MultipleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    MultipleSelection.__super__.bind.apply(this, arguments);\n\n    this.$selection.on('click', function (evt) {\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on(\n      'click',\n      '.select2-selection__choice__remove',\n      function (evt) {\n        // Ignore the event if it is disabled\n        if (self.isDisabled()) {\n          return;\n        }\n\n        var $remove = $(this);\n        var $selection = $remove.parent();\n\n        var data = Utils.GetData($selection[0], 'data');\n\n        self.trigger('unselect', {\n          originalEvent: evt,\n          data: data\n        });\n      }\n    );\n  };\n\n  MultipleSelection.prototype.clear = function () {\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    $rendered.empty();\n    $rendered.removeAttr('title');\n  };\n\n  MultipleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  MultipleSelection.prototype.selectionContainer = function () {\n    var $container = $(\n      '<li class=\"select2-selection__choice\">' +\n        '<span class=\"select2-selection__choice__remove\" role=\"presentation\">' +\n          '&times;' +\n        '</span>' +\n      '</li>'\n    );\n\n    return $container;\n  };\n\n  MultipleSelection.prototype.update = function (data) {\n    this.clear();\n\n    if (data.length === 0) {\n      return;\n    }\n\n    var $selections = [];\n\n    for (var d = 0; d < data.length; d++) {\n      var selection = data[d];\n\n      var $selection = this.selectionContainer();\n      var formatted = this.display(selection, $selection);\n\n      $selection.append(formatted);\n\n      var title = selection.title || selection.text;\n\n      if (title) {\n        $selection.attr('title', title);\n      }\n\n      Utils.StoreData($selection[0], 'data', selection);\n\n      $selections.push($selection);\n    }\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n\n    Utils.appendMany($rendered, $selections);\n  };\n\n  return MultipleSelection;\n});\n\nS2.define('select2/selection/placeholder',[\n  '../utils'\n], function (Utils) {\n  function Placeholder (decorated, $element, options) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options);\n  }\n\n  Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {\n    var $placeholder = this.selectionContainer();\n\n    $placeholder.html(this.display(placeholder));\n    $placeholder.addClass('select2-selection__placeholder')\n                .removeClass('select2-selection__choice');\n\n    return $placeholder;\n  };\n\n  Placeholder.prototype.update = function (decorated, data) {\n    var singlePlaceholder = (\n      data.length == 1 && data[0].id != this.placeholder.id\n    );\n    var multipleSelections = data.length > 1;\n\n    if (multipleSelections || singlePlaceholder) {\n      return decorated.call(this, data);\n    }\n\n    this.clear();\n\n    var $placeholder = this.createPlaceholder(this.placeholder);\n\n    this.$selection.find('.select2-selection__rendered').append($placeholder);\n  };\n\n  return Placeholder;\n});\n\nS2.define('select2/selection/allowClear',[\n  'jquery',\n  '../keys',\n  '../utils'\n], function ($, KEYS, Utils) {\n  function AllowClear () { }\n\n  AllowClear.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    if (this.placeholder == null) {\n      if (this.options.get('debug') && window.console && console.error) {\n        console.error(\n          'Select2: The `allowClear` option should be used in combination ' +\n          'with the `placeholder` option.'\n        );\n      }\n    }\n\n    this.$selection.on('mousedown', '.select2-selection__clear',\n      function (evt) {\n        self._handleClear(evt);\n    });\n\n    container.on('keypress', function (evt) {\n      self._handleKeyboardClear(evt, container);\n    });\n  };\n\n  AllowClear.prototype._handleClear = function (_, evt) {\n    // Ignore the event if it is disabled\n    if (this.isDisabled()) {\n      return;\n    }\n\n    var $clear = this.$selection.find('.select2-selection__clear');\n\n    // Ignore the event if nothing has been selected\n    if ($clear.length === 0) {\n      return;\n    }\n\n    evt.stopPropagation();\n\n    var data = Utils.GetData($clear[0], 'data');\n\n    var previousVal = this.$element.val();\n    this.$element.val(this.placeholder.id);\n\n    var unselectData = {\n      data: data\n    };\n    this.trigger('clear', unselectData);\n    if (unselectData.prevented) {\n      this.$element.val(previousVal);\n      return;\n    }\n\n    for (var d = 0; d < data.length; d++) {\n      unselectData = {\n        data: data[d]\n      };\n\n      // Trigger the `unselect` event, so people can prevent it from being\n      // cleared.\n      this.trigger('unselect', unselectData);\n\n      // If the event was prevented, don't clear it out.\n      if (unselectData.prevented) {\n        this.$element.val(previousVal);\n        return;\n      }\n    }\n\n    this.$element.trigger('input').trigger('change');\n\n    this.trigger('toggle', {});\n  };\n\n  AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {\n    if (container.isOpen()) {\n      return;\n    }\n\n    if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {\n      this._handleClear(evt);\n    }\n  };\n\n  AllowClear.prototype.update = function (decorated, data) {\n    decorated.call(this, data);\n\n    if (this.$selection.find('.select2-selection__placeholder').length > 0 ||\n        data.length === 0) {\n      return;\n    }\n\n    var removeAll = this.options.get('translations').get('removeAllItems');\n\n    var $remove = $(\n      '<span class=\"select2-selection__clear\" title=\"' + removeAll() +'\">' +\n        '&times;' +\n      '</span>'\n    );\n    Utils.StoreData($remove[0], 'data', data);\n\n    this.$selection.find('.select2-selection__rendered').prepend($remove);\n  };\n\n  return AllowClear;\n});\n\nS2.define('select2/selection/search',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function Search (decorated, $element, options) {\n    decorated.call(this, $element, options);\n  }\n\n  Search.prototype.render = function (decorated) {\n    var $search = $(\n      '<li class=\"select2-search select2-search--inline\">' +\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n        ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\"' +\n        ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' +\n      '</li>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('input');\n\n    var $rendered = decorated.call(this);\n\n    this._transferTabIndex();\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self.$search.attr('aria-controls', resultsId);\n      self.$search.trigger('focus');\n    });\n\n    container.on('close', function () {\n      self.$search.val('');\n      self.$search.removeAttr('aria-controls');\n      self.$search.removeAttr('aria-activedescendant');\n      self.$search.trigger('focus');\n    });\n\n    container.on('enable', function () {\n      self.$search.prop('disabled', false);\n\n      self._transferTabIndex();\n    });\n\n    container.on('disable', function () {\n      self.$search.prop('disabled', true);\n    });\n\n    container.on('focus', function (evt) {\n      self.$search.trigger('focus');\n    });\n\n    container.on('results:focus', function (params) {\n      if (params.data._resultId) {\n        self.$search.attr('aria-activedescendant', params.data._resultId);\n      } else {\n        self.$search.removeAttr('aria-activedescendant');\n      }\n    });\n\n    this.$selection.on('focusin', '.select2-search--inline', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('focusout', '.select2-search--inline', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', '.select2-search--inline', function (evt) {\n      evt.stopPropagation();\n\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n\n      var key = evt.which;\n\n      if (key === KEYS.BACKSPACE && self.$search.val() === '') {\n        var $previousChoice = self.$searchContainer\n          .prev('.select2-selection__choice');\n\n        if ($previousChoice.length > 0) {\n          var item = Utils.GetData($previousChoice[0], 'data');\n\n          self.searchRemoveChoice(item);\n\n          evt.preventDefault();\n        }\n      }\n    });\n\n    this.$selection.on('click', '.select2-search--inline', function (evt) {\n      if (self.$search.val()) {\n        evt.stopPropagation();\n      }\n    });\n\n    // Try to detect the IE version should the `documentMode` property that\n    // is stored on the document. This is only implemented in IE and is\n    // slightly cleaner than doing a user agent check.\n    // This property is not available in Edge, but Edge also doesn't have\n    // this bug.\n    var msie = document.documentMode;\n    var disableInputEvents = msie && msie <= 11;\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$selection.on(\n      'input.searchcheck',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents) {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        // Unbind the duplicated `keyup` event\n        self.$selection.off('keyup.search');\n      }\n    );\n\n    this.$selection.on(\n      'keyup.search input.search',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents && evt.type === 'input') {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        var key = evt.which;\n\n        // We can freely ignore events from modifier keys\n        if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {\n          return;\n        }\n\n        // Tabbing will be handled during the `keydown` phase\n        if (key == KEYS.TAB) {\n          return;\n        }\n\n        self.handleSearch(evt);\n      }\n    );\n  };\n\n  /**\n   * This method will transfer the tabindex attribute from the rendered\n   * selection to the search box. This allows for the search box to be used as\n   * the primary focus instead of the selection container.\n   *\n   * @private\n   */\n  Search.prototype._transferTabIndex = function (decorated) {\n    this.$search.attr('tabindex', this.$selection.attr('tabindex'));\n    this.$selection.attr('tabindex', '-1');\n  };\n\n  Search.prototype.createPlaceholder = function (decorated, placeholder) {\n    this.$search.attr('placeholder', placeholder.text);\n  };\n\n  Search.prototype.update = function (decorated, data) {\n    var searchHadFocus = this.$search[0] == document.activeElement;\n\n    this.$search.attr('placeholder', '');\n\n    decorated.call(this, data);\n\n    this.$selection.find('.select2-selection__rendered')\n                   .append(this.$searchContainer);\n\n    this.resizeSearch();\n    if (searchHadFocus) {\n      this.$search.trigger('focus');\n    }\n  };\n\n  Search.prototype.handleSearch = function () {\n    this.resizeSearch();\n\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.searchRemoveChoice = function (decorated, item) {\n    this.trigger('unselect', {\n      data: item\n    });\n\n    this.$search.val(item.text);\n    this.handleSearch();\n  };\n\n  Search.prototype.resizeSearch = function () {\n    this.$search.css('width', '25px');\n\n    var width = '';\n\n    if (this.$search.attr('placeholder') !== '') {\n      width = this.$selection.find('.select2-selection__rendered').width();\n    } else {\n      var minimumWidth = this.$search.val().length + 1;\n\n      width = (minimumWidth * 0.75) + 'em';\n    }\n\n    this.$search.css('width', width);\n  };\n\n  return Search;\n});\n\nS2.define('select2/selection/eventRelay',[\n  'jquery'\n], function ($) {\n  function EventRelay () { }\n\n  EventRelay.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n    var relayEvents = [\n      'open', 'opening',\n      'close', 'closing',\n      'select', 'selecting',\n      'unselect', 'unselecting',\n      'clear', 'clearing'\n    ];\n\n    var preventableEvents = [\n      'opening', 'closing', 'selecting', 'unselecting', 'clearing'\n    ];\n\n    decorated.call(this, container, $container);\n\n    container.on('*', function (name, params) {\n      // Ignore events that should not be relayed\n      if ($.inArray(name, relayEvents) === -1) {\n        return;\n      }\n\n      // The parameters should always be an object\n      params = params || {};\n\n      // Generate the jQuery event for the Select2 event\n      var evt = $.Event('select2:' + name, {\n        params: params\n      });\n\n      self.$element.trigger(evt);\n\n      // Only handle preventable events if it was one\n      if ($.inArray(name, preventableEvents) === -1) {\n        return;\n      }\n\n      params.prevented = evt.isDefaultPrevented();\n    });\n  };\n\n  return EventRelay;\n});\n\nS2.define('select2/translation',[\n  'jquery',\n  'require'\n], function ($, require) {\n  function Translation (dict) {\n    this.dict = dict || {};\n  }\n\n  Translation.prototype.all = function () {\n    return this.dict;\n  };\n\n  Translation.prototype.get = function (key) {\n    return this.dict[key];\n  };\n\n  Translation.prototype.extend = function (translation) {\n    this.dict = $.extend({}, translation.all(), this.dict);\n  };\n\n  // Static functions\n\n  Translation._cache = {};\n\n  Translation.loadPath = function (path) {\n    if (!(path in Translation._cache)) {\n      var translations = require(path);\n\n      Translation._cache[path] = translations;\n    }\n\n    return new Translation(Translation._cache[path]);\n  };\n\n  return Translation;\n});\n\nS2.define('select2/diacritics',[\n\n], function () {\n  var diacritics = {\n    '\\u24B6': 'A',\n    '\\uFF21': 'A',\n    '\\u00C0': 'A',\n    '\\u00C1': 'A',\n    '\\u00C2': 'A',\n    '\\u1EA6': 'A',\n    '\\u1EA4': 'A',\n    '\\u1EAA': 'A',\n    '\\u1EA8': 'A',\n    '\\u00C3': 'A',\n    '\\u0100': 'A',\n    '\\u0102': 'A',\n    '\\u1EB0': 'A',\n    '\\u1EAE': 'A',\n    '\\u1EB4': 'A',\n    '\\u1EB2': 'A',\n    '\\u0226': 'A',\n    '\\u01E0': 'A',\n    '\\u00C4': 'A',\n    '\\u01DE': 'A',\n    '\\u1EA2': 'A',\n    '\\u00C5': 'A',\n    '\\u01FA': 'A',\n    '\\u01CD': 'A',\n    '\\u0200': 'A',\n    '\\u0202': 'A',\n    '\\u1EA0': 'A',\n    '\\u1EAC': 'A',\n    '\\u1EB6': 'A',\n    '\\u1E00': 'A',\n    '\\u0104': 'A',\n    '\\u023A': 'A',\n    '\\u2C6F': 'A',\n    '\\uA732': 'AA',\n    '\\u00C6': 'AE',\n    '\\u01FC': 'AE',\n    '\\u01E2': 'AE',\n    '\\uA734': 'AO',\n    '\\uA736': 'AU',\n    '\\uA738': 'AV',\n    '\\uA73A': 'AV',\n    '\\uA73C': 'AY',\n    '\\u24B7': 'B',\n    '\\uFF22': 'B',\n    '\\u1E02': 'B',\n    '\\u1E04': 'B',\n    '\\u1E06': 'B',\n    '\\u0243': 'B',\n    '\\u0182': 'B',\n    '\\u0181': 'B',\n    '\\u24B8': 'C',\n    '\\uFF23': 'C',\n    '\\u0106': 'C',\n    '\\u0108': 'C',\n    '\\u010A': 'C',\n    '\\u010C': 'C',\n    '\\u00C7': 'C',\n    '\\u1E08': 'C',\n    '\\u0187': 'C',\n    '\\u023B': 'C',\n    '\\uA73E': 'C',\n    '\\u24B9': 'D',\n    '\\uFF24': 'D',\n    '\\u1E0A': 'D',\n    '\\u010E': 'D',\n    '\\u1E0C': 'D',\n    '\\u1E10': 'D',\n    '\\u1E12': 'D',\n    '\\u1E0E': 'D',\n    '\\u0110': 'D',\n    '\\u018B': 'D',\n    '\\u018A': 'D',\n    '\\u0189': 'D',\n    '\\uA779': 'D',\n    '\\u01F1': 'DZ',\n    '\\u01C4': 'DZ',\n    '\\u01F2': 'Dz',\n    '\\u01C5': 'Dz',\n    '\\u24BA': 'E',\n    '\\uFF25': 'E',\n    '\\u00C8': 'E',\n    '\\u00C9': 'E',\n    '\\u00CA': 'E',\n    '\\u1EC0': 'E',\n    '\\u1EBE': 'E',\n    '\\u1EC4': 'E',\n    '\\u1EC2': 'E',\n    '\\u1EBC': 'E',\n    '\\u0112': 'E',\n    '\\u1E14': 'E',\n    '\\u1E16': 'E',\n    '\\u0114': 'E',\n    '\\u0116': 'E',\n    '\\u00CB': 'E',\n    '\\u1EBA': 'E',\n    '\\u011A': 'E',\n    '\\u0204': 'E',\n    '\\u0206': 'E',\n    '\\u1EB8': 'E',\n    '\\u1EC6': 'E',\n    '\\u0228': 'E',\n    '\\u1E1C': 'E',\n    '\\u0118': 'E',\n    '\\u1E18': 'E',\n    '\\u1E1A': 'E',\n    '\\u0190': 'E',\n    '\\u018E': 'E',\n    '\\u24BB': 'F',\n    '\\uFF26': 'F',\n    '\\u1E1E': 'F',\n    '\\u0191': 'F',\n    '\\uA77B': 'F',\n    '\\u24BC': 'G',\n    '\\uFF27': 'G',\n    '\\u01F4': 'G',\n    '\\u011C': 'G',\n    '\\u1E20': 'G',\n    '\\u011E': 'G',\n    '\\u0120': 'G',\n    '\\u01E6': 'G',\n    '\\u0122': 'G',\n    '\\u01E4': 'G',\n    '\\u0193': 'G',\n    '\\uA7A0': 'G',\n    '\\uA77D': 'G',\n    '\\uA77E': 'G',\n    '\\u24BD': 'H',\n    '\\uFF28': 'H',\n    '\\u0124': 'H',\n    '\\u1E22': 'H',\n    '\\u1E26': 'H',\n    '\\u021E': 'H',\n    '\\u1E24': 'H',\n    '\\u1E28': 'H',\n    '\\u1E2A': 'H',\n    '\\u0126': 'H',\n    '\\u2C67': 'H',\n    '\\u2C75': 'H',\n    '\\uA78D': 'H',\n    '\\u24BE': 'I',\n    '\\uFF29': 'I',\n    '\\u00CC': 'I',\n    '\\u00CD': 'I',\n    '\\u00CE': 'I',\n    '\\u0128': 'I',\n    '\\u012A': 'I',\n    '\\u012C': 'I',\n    '\\u0130': 'I',\n    '\\u00CF': 'I',\n    '\\u1E2E': 'I',\n    '\\u1EC8': 'I',\n    '\\u01CF': 'I',\n    '\\u0208': 'I',\n    '\\u020A': 'I',\n    '\\u1ECA': 'I',\n    '\\u012E': 'I',\n    '\\u1E2C': 'I',\n    '\\u0197': 'I',\n    '\\u24BF': 'J',\n    '\\uFF2A': 'J',\n    '\\u0134': 'J',\n    '\\u0248': 'J',\n    '\\u24C0': 'K',\n    '\\uFF2B': 'K',\n    '\\u1E30': 'K',\n    '\\u01E8': 'K',\n    '\\u1E32': 'K',\n    '\\u0136': 'K',\n    '\\u1E34': 'K',\n    '\\u0198': 'K',\n    '\\u2C69': 'K',\n    '\\uA740': 'K',\n    '\\uA742': 'K',\n    '\\uA744': 'K',\n    '\\uA7A2': 'K',\n    '\\u24C1': 'L',\n    '\\uFF2C': 'L',\n    '\\u013F': 'L',\n    '\\u0139': 'L',\n    '\\u013D': 'L',\n    '\\u1E36': 'L',\n    '\\u1E38': 'L',\n    '\\u013B': 'L',\n    '\\u1E3C': 'L',\n    '\\u1E3A': 'L',\n    '\\u0141': 'L',\n    '\\u023D': 'L',\n    '\\u2C62': 'L',\n    '\\u2C60': 'L',\n    '\\uA748': 'L',\n    '\\uA746': 'L',\n    '\\uA780': 'L',\n    '\\u01C7': 'LJ',\n    '\\u01C8': 'Lj',\n    '\\u24C2': 'M',\n    '\\uFF2D': 'M',\n    '\\u1E3E': 'M',\n    '\\u1E40': 'M',\n    '\\u1E42': 'M',\n    '\\u2C6E': 'M',\n    '\\u019C': 'M',\n    '\\u24C3': 'N',\n    '\\uFF2E': 'N',\n    '\\u01F8': 'N',\n    '\\u0143': 'N',\n    '\\u00D1': 'N',\n    '\\u1E44': 'N',\n    '\\u0147': 'N',\n    '\\u1E46': 'N',\n    '\\u0145': 'N',\n    '\\u1E4A': 'N',\n    '\\u1E48': 'N',\n    '\\u0220': 'N',\n    '\\u019D': 'N',\n    '\\uA790': 'N',\n    '\\uA7A4': 'N',\n    '\\u01CA': 'NJ',\n    '\\u01CB': 'Nj',\n    '\\u24C4': 'O',\n    '\\uFF2F': 'O',\n    '\\u00D2': 'O',\n    '\\u00D3': 'O',\n    '\\u00D4': 'O',\n    '\\u1ED2': 'O',\n    '\\u1ED0': 'O',\n    '\\u1ED6': 'O',\n    '\\u1ED4': 'O',\n    '\\u00D5': 'O',\n    '\\u1E4C': 'O',\n    '\\u022C': 'O',\n    '\\u1E4E': 'O',\n    '\\u014C': 'O',\n    '\\u1E50': 'O',\n    '\\u1E52': 'O',\n    '\\u014E': 'O',\n    '\\u022E': 'O',\n    '\\u0230': 'O',\n    '\\u00D6': 'O',\n    '\\u022A': 'O',\n    '\\u1ECE': 'O',\n    '\\u0150': 'O',\n    '\\u01D1': 'O',\n    '\\u020C': 'O',\n    '\\u020E': 'O',\n    '\\u01A0': 'O',\n    '\\u1EDC': 'O',\n    '\\u1EDA': 'O',\n    '\\u1EE0': 'O',\n    '\\u1EDE': 'O',\n    '\\u1EE2': 'O',\n    '\\u1ECC': 'O',\n    '\\u1ED8': 'O',\n    '\\u01EA': 'O',\n    '\\u01EC': 'O',\n    '\\u00D8': 'O',\n    '\\u01FE': 'O',\n    '\\u0186': 'O',\n    '\\u019F': 'O',\n    '\\uA74A': 'O',\n    '\\uA74C': 'O',\n    '\\u0152': 'OE',\n    '\\u01A2': 'OI',\n    '\\uA74E': 'OO',\n    '\\u0222': 'OU',\n    '\\u24C5': 'P',\n    '\\uFF30': 'P',\n    '\\u1E54': 'P',\n    '\\u1E56': 'P',\n    '\\u01A4': 'P',\n    '\\u2C63': 'P',\n    '\\uA750': 'P',\n    '\\uA752': 'P',\n    '\\uA754': 'P',\n    '\\u24C6': 'Q',\n    '\\uFF31': 'Q',\n    '\\uA756': 'Q',\n    '\\uA758': 'Q',\n    '\\u024A': 'Q',\n    '\\u24C7': 'R',\n    '\\uFF32': 'R',\n    '\\u0154': 'R',\n    '\\u1E58': 'R',\n    '\\u0158': 'R',\n    '\\u0210': 'R',\n    '\\u0212': 'R',\n    '\\u1E5A': 'R',\n    '\\u1E5C': 'R',\n    '\\u0156': 'R',\n    '\\u1E5E': 'R',\n    '\\u024C': 'R',\n    '\\u2C64': 'R',\n    '\\uA75A': 'R',\n    '\\uA7A6': 'R',\n    '\\uA782': 'R',\n    '\\u24C8': 'S',\n    '\\uFF33': 'S',\n    '\\u1E9E': 'S',\n    '\\u015A': 'S',\n    '\\u1E64': 'S',\n    '\\u015C': 'S',\n    '\\u1E60': 'S',\n    '\\u0160': 'S',\n    '\\u1E66': 'S',\n    '\\u1E62': 'S',\n    '\\u1E68': 'S',\n    '\\u0218': 'S',\n    '\\u015E': 'S',\n    '\\u2C7E': 'S',\n    '\\uA7A8': 'S',\n    '\\uA784': 'S',\n    '\\u24C9': 'T',\n    '\\uFF34': 'T',\n    '\\u1E6A': 'T',\n    '\\u0164': 'T',\n    '\\u1E6C': 'T',\n    '\\u021A': 'T',\n    '\\u0162': 'T',\n    '\\u1E70': 'T',\n    '\\u1E6E': 'T',\n    '\\u0166': 'T',\n    '\\u01AC': 'T',\n    '\\u01AE': 'T',\n    '\\u023E': 'T',\n    '\\uA786': 'T',\n    '\\uA728': 'TZ',\n    '\\u24CA': 'U',\n    '\\uFF35': 'U',\n    '\\u00D9': 'U',\n    '\\u00DA': 'U',\n    '\\u00DB': 'U',\n    '\\u0168': 'U',\n    '\\u1E78': 'U',\n    '\\u016A': 'U',\n    '\\u1E7A': 'U',\n    '\\u016C': 'U',\n    '\\u00DC': 'U',\n    '\\u01DB': 'U',\n    '\\u01D7': 'U',\n    '\\u01D5': 'U',\n    '\\u01D9': 'U',\n    '\\u1EE6': 'U',\n    '\\u016E': 'U',\n    '\\u0170': 'U',\n    '\\u01D3': 'U',\n    '\\u0214': 'U',\n    '\\u0216': 'U',\n    '\\u01AF': 'U',\n    '\\u1EEA': 'U',\n    '\\u1EE8': 'U',\n    '\\u1EEE': 'U',\n    '\\u1EEC': 'U',\n    '\\u1EF0': 'U',\n    '\\u1EE4': 'U',\n    '\\u1E72': 'U',\n    '\\u0172': 'U',\n    '\\u1E76': 'U',\n    '\\u1E74': 'U',\n    '\\u0244': 'U',\n    '\\u24CB': 'V',\n    '\\uFF36': 'V',\n    '\\u1E7C': 'V',\n    '\\u1E7E': 'V',\n    '\\u01B2': 'V',\n    '\\uA75E': 'V',\n    '\\u0245': 'V',\n    '\\uA760': 'VY',\n    '\\u24CC': 'W',\n    '\\uFF37': 'W',\n    '\\u1E80': 'W',\n    '\\u1E82': 'W',\n    '\\u0174': 'W',\n    '\\u1E86': 'W',\n    '\\u1E84': 'W',\n    '\\u1E88': 'W',\n    '\\u2C72': 'W',\n    '\\u24CD': 'X',\n    '\\uFF38': 'X',\n    '\\u1E8A': 'X',\n    '\\u1E8C': 'X',\n    '\\u24CE': 'Y',\n    '\\uFF39': 'Y',\n    '\\u1EF2': 'Y',\n    '\\u00DD': 'Y',\n    '\\u0176': 'Y',\n    '\\u1EF8': 'Y',\n    '\\u0232': 'Y',\n    '\\u1E8E': 'Y',\n    '\\u0178': 'Y',\n    '\\u1EF6': 'Y',\n    '\\u1EF4': 'Y',\n    '\\u01B3': 'Y',\n    '\\u024E': 'Y',\n    '\\u1EFE': 'Y',\n    '\\u24CF': 'Z',\n    '\\uFF3A': 'Z',\n    '\\u0179': 'Z',\n    '\\u1E90': 'Z',\n    '\\u017B': 'Z',\n    '\\u017D': 'Z',\n    '\\u1E92': 'Z',\n    '\\u1E94': 'Z',\n    '\\u01B5': 'Z',\n    '\\u0224': 'Z',\n    '\\u2C7F': 'Z',\n    '\\u2C6B': 'Z',\n    '\\uA762': 'Z',\n    '\\u24D0': 'a',\n    '\\uFF41': 'a',\n    '\\u1E9A': 'a',\n    '\\u00E0': 'a',\n    '\\u00E1': 'a',\n    '\\u00E2': 'a',\n    '\\u1EA7': 'a',\n    '\\u1EA5': 'a',\n    '\\u1EAB': 'a',\n    '\\u1EA9': 'a',\n    '\\u00E3': 'a',\n    '\\u0101': 'a',\n    '\\u0103': 'a',\n    '\\u1EB1': 'a',\n    '\\u1EAF': 'a',\n    '\\u1EB5': 'a',\n    '\\u1EB3': 'a',\n    '\\u0227': 'a',\n    '\\u01E1': 'a',\n    '\\u00E4': 'a',\n    '\\u01DF': 'a',\n    '\\u1EA3': 'a',\n    '\\u00E5': 'a',\n    '\\u01FB': 'a',\n    '\\u01CE': 'a',\n    '\\u0201': 'a',\n    '\\u0203': 'a',\n    '\\u1EA1': 'a',\n    '\\u1EAD': 'a',\n    '\\u1EB7': 'a',\n    '\\u1E01': 'a',\n    '\\u0105': 'a',\n    '\\u2C65': 'a',\n    '\\u0250': 'a',\n    '\\uA733': 'aa',\n    '\\u00E6': 'ae',\n    '\\u01FD': 'ae',\n    '\\u01E3': 'ae',\n    '\\uA735': 'ao',\n    '\\uA737': 'au',\n    '\\uA739': 'av',\n    '\\uA73B': 'av',\n    '\\uA73D': 'ay',\n    '\\u24D1': 'b',\n    '\\uFF42': 'b',\n    '\\u1E03': 'b',\n    '\\u1E05': 'b',\n    '\\u1E07': 'b',\n    '\\u0180': 'b',\n    '\\u0183': 'b',\n    '\\u0253': 'b',\n    '\\u24D2': 'c',\n    '\\uFF43': 'c',\n    '\\u0107': 'c',\n    '\\u0109': 'c',\n    '\\u010B': 'c',\n    '\\u010D': 'c',\n    '\\u00E7': 'c',\n    '\\u1E09': 'c',\n    '\\u0188': 'c',\n    '\\u023C': 'c',\n    '\\uA73F': 'c',\n    '\\u2184': 'c',\n    '\\u24D3': 'd',\n    '\\uFF44': 'd',\n    '\\u1E0B': 'd',\n    '\\u010F': 'd',\n    '\\u1E0D': 'd',\n    '\\u1E11': 'd',\n    '\\u1E13': 'd',\n    '\\u1E0F': 'd',\n    '\\u0111': 'd',\n    '\\u018C': 'd',\n    '\\u0256': 'd',\n    '\\u0257': 'd',\n    '\\uA77A': 'd',\n    '\\u01F3': 'dz',\n    '\\u01C6': 'dz',\n    '\\u24D4': 'e',\n    '\\uFF45': 'e',\n    '\\u00E8': 'e',\n    '\\u00E9': 'e',\n    '\\u00EA': 'e',\n    '\\u1EC1': 'e',\n    '\\u1EBF': 'e',\n    '\\u1EC5': 'e',\n    '\\u1EC3': 'e',\n    '\\u1EBD': 'e',\n    '\\u0113': 'e',\n    '\\u1E15': 'e',\n    '\\u1E17': 'e',\n    '\\u0115': 'e',\n    '\\u0117': 'e',\n    '\\u00EB': 'e',\n    '\\u1EBB': 'e',\n    '\\u011B': 'e',\n    '\\u0205': 'e',\n    '\\u0207': 'e',\n    '\\u1EB9': 'e',\n    '\\u1EC7': 'e',\n    '\\u0229': 'e',\n    '\\u1E1D': 'e',\n    '\\u0119': 'e',\n    '\\u1E19': 'e',\n    '\\u1E1B': 'e',\n    '\\u0247': 'e',\n    '\\u025B': 'e',\n    '\\u01DD': 'e',\n    '\\u24D5': 'f',\n    '\\uFF46': 'f',\n    '\\u1E1F': 'f',\n    '\\u0192': 'f',\n    '\\uA77C': 'f',\n    '\\u24D6': 'g',\n    '\\uFF47': 'g',\n    '\\u01F5': 'g',\n    '\\u011D': 'g',\n    '\\u1E21': 'g',\n    '\\u011F': 'g',\n    '\\u0121': 'g',\n    '\\u01E7': 'g',\n    '\\u0123': 'g',\n    '\\u01E5': 'g',\n    '\\u0260': 'g',\n    '\\uA7A1': 'g',\n    '\\u1D79': 'g',\n    '\\uA77F': 'g',\n    '\\u24D7': 'h',\n    '\\uFF48': 'h',\n    '\\u0125': 'h',\n    '\\u1E23': 'h',\n    '\\u1E27': 'h',\n    '\\u021F': 'h',\n    '\\u1E25': 'h',\n    '\\u1E29': 'h',\n    '\\u1E2B': 'h',\n    '\\u1E96': 'h',\n    '\\u0127': 'h',\n    '\\u2C68': 'h',\n    '\\u2C76': 'h',\n    '\\u0265': 'h',\n    '\\u0195': 'hv',\n    '\\u24D8': 'i',\n    '\\uFF49': 'i',\n    '\\u00EC': 'i',\n    '\\u00ED': 'i',\n    '\\u00EE': 'i',\n    '\\u0129': 'i',\n    '\\u012B': 'i',\n    '\\u012D': 'i',\n    '\\u00EF': 'i',\n    '\\u1E2F': 'i',\n    '\\u1EC9': 'i',\n    '\\u01D0': 'i',\n    '\\u0209': 'i',\n    '\\u020B': 'i',\n    '\\u1ECB': 'i',\n    '\\u012F': 'i',\n    '\\u1E2D': 'i',\n    '\\u0268': 'i',\n    '\\u0131': 'i',\n    '\\u24D9': 'j',\n    '\\uFF4A': 'j',\n    '\\u0135': 'j',\n    '\\u01F0': 'j',\n    '\\u0249': 'j',\n    '\\u24DA': 'k',\n    '\\uFF4B': 'k',\n    '\\u1E31': 'k',\n    '\\u01E9': 'k',\n    '\\u1E33': 'k',\n    '\\u0137': 'k',\n    '\\u1E35': 'k',\n    '\\u0199': 'k',\n    '\\u2C6A': 'k',\n    '\\uA741': 'k',\n    '\\uA743': 'k',\n    '\\uA745': 'k',\n    '\\uA7A3': 'k',\n    '\\u24DB': 'l',\n    '\\uFF4C': 'l',\n    '\\u0140': 'l',\n    '\\u013A': 'l',\n    '\\u013E': 'l',\n    '\\u1E37': 'l',\n    '\\u1E39': 'l',\n    '\\u013C': 'l',\n    '\\u1E3D': 'l',\n    '\\u1E3B': 'l',\n    '\\u017F': 'l',\n    '\\u0142': 'l',\n    '\\u019A': 'l',\n    '\\u026B': 'l',\n    '\\u2C61': 'l',\n    '\\uA749': 'l',\n    '\\uA781': 'l',\n    '\\uA747': 'l',\n    '\\u01C9': 'lj',\n    '\\u24DC': 'm',\n    '\\uFF4D': 'm',\n    '\\u1E3F': 'm',\n    '\\u1E41': 'm',\n    '\\u1E43': 'm',\n    '\\u0271': 'm',\n    '\\u026F': 'm',\n    '\\u24DD': 'n',\n    '\\uFF4E': 'n',\n    '\\u01F9': 'n',\n    '\\u0144': 'n',\n    '\\u00F1': 'n',\n    '\\u1E45': 'n',\n    '\\u0148': 'n',\n    '\\u1E47': 'n',\n    '\\u0146': 'n',\n    '\\u1E4B': 'n',\n    '\\u1E49': 'n',\n    '\\u019E': 'n',\n    '\\u0272': 'n',\n    '\\u0149': 'n',\n    '\\uA791': 'n',\n    '\\uA7A5': 'n',\n    '\\u01CC': 'nj',\n    '\\u24DE': 'o',\n    '\\uFF4F': 'o',\n    '\\u00F2': 'o',\n    '\\u00F3': 'o',\n    '\\u00F4': 'o',\n    '\\u1ED3': 'o',\n    '\\u1ED1': 'o',\n    '\\u1ED7': 'o',\n    '\\u1ED5': 'o',\n    '\\u00F5': 'o',\n    '\\u1E4D': 'o',\n    '\\u022D': 'o',\n    '\\u1E4F': 'o',\n    '\\u014D': 'o',\n    '\\u1E51': 'o',\n    '\\u1E53': 'o',\n    '\\u014F': 'o',\n    '\\u022F': 'o',\n    '\\u0231': 'o',\n    '\\u00F6': 'o',\n    '\\u022B': 'o',\n    '\\u1ECF': 'o',\n    '\\u0151': 'o',\n    '\\u01D2': 'o',\n    '\\u020D': 'o',\n    '\\u020F': 'o',\n    '\\u01A1': 'o',\n    '\\u1EDD': 'o',\n    '\\u1EDB': 'o',\n    '\\u1EE1': 'o',\n    '\\u1EDF': 'o',\n    '\\u1EE3': 'o',\n    '\\u1ECD': 'o',\n    '\\u1ED9': 'o',\n    '\\u01EB': 'o',\n    '\\u01ED': 'o',\n    '\\u00F8': 'o',\n    '\\u01FF': 'o',\n    '\\u0254': 'o',\n    '\\uA74B': 'o',\n    '\\uA74D': 'o',\n    '\\u0275': 'o',\n    '\\u0153': 'oe',\n    '\\u01A3': 'oi',\n    '\\u0223': 'ou',\n    '\\uA74F': 'oo',\n    '\\u24DF': 'p',\n    '\\uFF50': 'p',\n    '\\u1E55': 'p',\n    '\\u1E57': 'p',\n    '\\u01A5': 'p',\n    '\\u1D7D': 'p',\n    '\\uA751': 'p',\n    '\\uA753': 'p',\n    '\\uA755': 'p',\n    '\\u24E0': 'q',\n    '\\uFF51': 'q',\n    '\\u024B': 'q',\n    '\\uA757': 'q',\n    '\\uA759': 'q',\n    '\\u24E1': 'r',\n    '\\uFF52': 'r',\n    '\\u0155': 'r',\n    '\\u1E59': 'r',\n    '\\u0159': 'r',\n    '\\u0211': 'r',\n    '\\u0213': 'r',\n    '\\u1E5B': 'r',\n    '\\u1E5D': 'r',\n    '\\u0157': 'r',\n    '\\u1E5F': 'r',\n    '\\u024D': 'r',\n    '\\u027D': 'r',\n    '\\uA75B': 'r',\n    '\\uA7A7': 'r',\n    '\\uA783': 'r',\n    '\\u24E2': 's',\n    '\\uFF53': 's',\n    '\\u00DF': 's',\n    '\\u015B': 's',\n    '\\u1E65': 's',\n    '\\u015D': 's',\n    '\\u1E61': 's',\n    '\\u0161': 's',\n    '\\u1E67': 's',\n    '\\u1E63': 's',\n    '\\u1E69': 's',\n    '\\u0219': 's',\n    '\\u015F': 's',\n    '\\u023F': 's',\n    '\\uA7A9': 's',\n    '\\uA785': 's',\n    '\\u1E9B': 's',\n    '\\u24E3': 't',\n    '\\uFF54': 't',\n    '\\u1E6B': 't',\n    '\\u1E97': 't',\n    '\\u0165': 't',\n    '\\u1E6D': 't',\n    '\\u021B': 't',\n    '\\u0163': 't',\n    '\\u1E71': 't',\n    '\\u1E6F': 't',\n    '\\u0167': 't',\n    '\\u01AD': 't',\n    '\\u0288': 't',\n    '\\u2C66': 't',\n    '\\uA787': 't',\n    '\\uA729': 'tz',\n    '\\u24E4': 'u',\n    '\\uFF55': 'u',\n    '\\u00F9': 'u',\n    '\\u00FA': 'u',\n    '\\u00FB': 'u',\n    '\\u0169': 'u',\n    '\\u1E79': 'u',\n    '\\u016B': 'u',\n    '\\u1E7B': 'u',\n    '\\u016D': 'u',\n    '\\u00FC': 'u',\n    '\\u01DC': 'u',\n    '\\u01D8': 'u',\n    '\\u01D6': 'u',\n    '\\u01DA': 'u',\n    '\\u1EE7': 'u',\n    '\\u016F': 'u',\n    '\\u0171': 'u',\n    '\\u01D4': 'u',\n    '\\u0215': 'u',\n    '\\u0217': 'u',\n    '\\u01B0': 'u',\n    '\\u1EEB': 'u',\n    '\\u1EE9': 'u',\n    '\\u1EEF': 'u',\n    '\\u1EED': 'u',\n    '\\u1EF1': 'u',\n    '\\u1EE5': 'u',\n    '\\u1E73': 'u',\n    '\\u0173': 'u',\n    '\\u1E77': 'u',\n    '\\u1E75': 'u',\n    '\\u0289': 'u',\n    '\\u24E5': 'v',\n    '\\uFF56': 'v',\n    '\\u1E7D': 'v',\n    '\\u1E7F': 'v',\n    '\\u028B': 'v',\n    '\\uA75F': 'v',\n    '\\u028C': 'v',\n    '\\uA761': 'vy',\n    '\\u24E6': 'w',\n    '\\uFF57': 'w',\n    '\\u1E81': 'w',\n    '\\u1E83': 'w',\n    '\\u0175': 'w',\n    '\\u1E87': 'w',\n    '\\u1E85': 'w',\n    '\\u1E98': 'w',\n    '\\u1E89': 'w',\n    '\\u2C73': 'w',\n    '\\u24E7': 'x',\n    '\\uFF58': 'x',\n    '\\u1E8B': 'x',\n    '\\u1E8D': 'x',\n    '\\u24E8': 'y',\n    '\\uFF59': 'y',\n    '\\u1EF3': 'y',\n    '\\u00FD': 'y',\n    '\\u0177': 'y',\n    '\\u1EF9': 'y',\n    '\\u0233': 'y',\n    '\\u1E8F': 'y',\n    '\\u00FF': 'y',\n    '\\u1EF7': 'y',\n    '\\u1E99': 'y',\n    '\\u1EF5': 'y',\n    '\\u01B4': 'y',\n    '\\u024F': 'y',\n    '\\u1EFF': 'y',\n    '\\u24E9': 'z',\n    '\\uFF5A': 'z',\n    '\\u017A': 'z',\n    '\\u1E91': 'z',\n    '\\u017C': 'z',\n    '\\u017E': 'z',\n    '\\u1E93': 'z',\n    '\\u1E95': 'z',\n    '\\u01B6': 'z',\n    '\\u0225': 'z',\n    '\\u0240': 'z',\n    '\\u2C6C': 'z',\n    '\\uA763': 'z',\n    '\\u0386': '\\u0391',\n    '\\u0388': '\\u0395',\n    '\\u0389': '\\u0397',\n    '\\u038A': '\\u0399',\n    '\\u03AA': '\\u0399',\n    '\\u038C': '\\u039F',\n    '\\u038E': '\\u03A5',\n    '\\u03AB': '\\u03A5',\n    '\\u038F': '\\u03A9',\n    '\\u03AC': '\\u03B1',\n    '\\u03AD': '\\u03B5',\n    '\\u03AE': '\\u03B7',\n    '\\u03AF': '\\u03B9',\n    '\\u03CA': '\\u03B9',\n    '\\u0390': '\\u03B9',\n    '\\u03CC': '\\u03BF',\n    '\\u03CD': '\\u03C5',\n    '\\u03CB': '\\u03C5',\n    '\\u03B0': '\\u03C5',\n    '\\u03CE': '\\u03C9',\n    '\\u03C2': '\\u03C3',\n    '\\u2019': '\\''\n  };\n\n  return diacritics;\n});\n\nS2.define('select2/data/base',[\n  '../utils'\n], function (Utils) {\n  function BaseAdapter ($element, options) {\n    BaseAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseAdapter, Utils.Observable);\n\n  BaseAdapter.prototype.current = function (callback) {\n    throw new Error('The `current` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.query = function (params, callback) {\n    throw new Error('The `query` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.bind = function (container, $container) {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.destroy = function () {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.generateResultId = function (container, data) {\n    var id = container.id + '-result-';\n\n    id += Utils.generateChars(4);\n\n    if (data.id != null) {\n      id += '-' + data.id.toString();\n    } else {\n      id += '-' + Utils.generateChars(4);\n    }\n    return id;\n  };\n\n  return BaseAdapter;\n});\n\nS2.define('select2/data/select',[\n  './base',\n  '../utils',\n  'jquery'\n], function (BaseAdapter, Utils, $) {\n  function SelectAdapter ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    SelectAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(SelectAdapter, BaseAdapter);\n\n  SelectAdapter.prototype.current = function (callback) {\n    var data = [];\n    var self = this;\n\n    this.$element.find(':selected').each(function () {\n      var $option = $(this);\n\n      var option = self.item($option);\n\n      data.push(option);\n    });\n\n    callback(data);\n  };\n\n  SelectAdapter.prototype.select = function (data) {\n    var self = this;\n\n    data.selected = true;\n\n    // If data.element is a DOM node, use it instead\n    if ($(data.element).is('option')) {\n      data.element.selected = true;\n\n      this.$element.trigger('input').trigger('change');\n\n      return;\n    }\n\n    if (this.$element.prop('multiple')) {\n      this.current(function (currentData) {\n        var val = [];\n\n        data = [data];\n        data.push.apply(data, currentData);\n\n        for (var d = 0; d < data.length; d++) {\n          var id = data[d].id;\n\n          if ($.inArray(id, val) === -1) {\n            val.push(id);\n          }\n        }\n\n        self.$element.val(val);\n        self.$element.trigger('input').trigger('change');\n      });\n    } else {\n      var val = data.id;\n\n      this.$element.val(val);\n      this.$element.trigger('input').trigger('change');\n    }\n  };\n\n  SelectAdapter.prototype.unselect = function (data) {\n    var self = this;\n\n    if (!this.$element.prop('multiple')) {\n      return;\n    }\n\n    data.selected = false;\n\n    if ($(data.element).is('option')) {\n      data.element.selected = false;\n\n      this.$element.trigger('input').trigger('change');\n\n      return;\n    }\n\n    this.current(function (currentData) {\n      var val = [];\n\n      for (var d = 0; d < currentData.length; d++) {\n        var id = currentData[d].id;\n\n        if (id !== data.id && $.inArray(id, val) === -1) {\n          val.push(id);\n        }\n      }\n\n      self.$element.val(val);\n\n      self.$element.trigger('input').trigger('change');\n    });\n  };\n\n  SelectAdapter.prototype.bind = function (container, $container) {\n    var self = this;\n\n    this.container = container;\n\n    container.on('select', function (params) {\n      self.select(params.data);\n    });\n\n    container.on('unselect', function (params) {\n      self.unselect(params.data);\n    });\n  };\n\n  SelectAdapter.prototype.destroy = function () {\n    // Remove anything added to child elements\n    this.$element.find('*').each(function () {\n      // Remove any custom data set by Select2\n      Utils.RemoveData(this);\n    });\n  };\n\n  SelectAdapter.prototype.query = function (params, callback) {\n    var data = [];\n    var self = this;\n\n    var $options = this.$element.children();\n\n    $options.each(function () {\n      var $option = $(this);\n\n      if (!$option.is('option') && !$option.is('optgroup')) {\n        return;\n      }\n\n      var option = self.item($option);\n\n      var matches = self.matches(params, option);\n\n      if (matches !== null) {\n        data.push(matches);\n      }\n    });\n\n    callback({\n      results: data\n    });\n  };\n\n  SelectAdapter.prototype.addOptions = function ($options) {\n    Utils.appendMany(this.$element, $options);\n  };\n\n  SelectAdapter.prototype.option = function (data) {\n    var option;\n\n    if (data.children) {\n      option = document.createElement('optgroup');\n      option.label = data.text;\n    } else {\n      option = document.createElement('option');\n\n      if (option.textContent !== undefined) {\n        option.textContent = data.text;\n      } else {\n        option.innerText = data.text;\n      }\n    }\n\n    if (data.id !== undefined) {\n      option.value = data.id;\n    }\n\n    if (data.disabled) {\n      option.disabled = true;\n    }\n\n    if (data.selected) {\n      option.selected = true;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    var $option = $(option);\n\n    var normalizedData = this._normalizeItem(data);\n    normalizedData.element = option;\n\n    // Override the option's data with the combined data\n    Utils.StoreData(option, 'data', normalizedData);\n\n    return $option;\n  };\n\n  SelectAdapter.prototype.item = function ($option) {\n    var data = {};\n\n    data = Utils.GetData($option[0], 'data');\n\n    if (data != null) {\n      return data;\n    }\n\n    if ($option.is('option')) {\n      data = {\n        id: $option.val(),\n        text: $option.text(),\n        disabled: $option.prop('disabled'),\n        selected: $option.prop('selected'),\n        title: $option.prop('title')\n      };\n    } else if ($option.is('optgroup')) {\n      data = {\n        text: $option.prop('label'),\n        children: [],\n        title: $option.prop('title')\n      };\n\n      var $children = $option.children('option');\n      var children = [];\n\n      for (var c = 0; c < $children.length; c++) {\n        var $child = $($children[c]);\n\n        var child = this.item($child);\n\n        children.push(child);\n      }\n\n      data.children = children;\n    }\n\n    data = this._normalizeItem(data);\n    data.element = $option[0];\n\n    Utils.StoreData($option[0], 'data', data);\n\n    return data;\n  };\n\n  SelectAdapter.prototype._normalizeItem = function (item) {\n    if (item !== Object(item)) {\n      item = {\n        id: item,\n        text: item\n      };\n    }\n\n    item = $.extend({}, {\n      text: ''\n    }, item);\n\n    var defaults = {\n      selected: false,\n      disabled: false\n    };\n\n    if (item.id != null) {\n      item.id = item.id.toString();\n    }\n\n    if (item.text != null) {\n      item.text = item.text.toString();\n    }\n\n    if (item._resultId == null && item.id && this.container != null) {\n      item._resultId = this.generateResultId(this.container, item);\n    }\n\n    return $.extend({}, defaults, item);\n  };\n\n  SelectAdapter.prototype.matches = function (params, data) {\n    var matcher = this.options.get('matcher');\n\n    return matcher(params, data);\n  };\n\n  return SelectAdapter;\n});\n\nS2.define('select2/data/array',[\n  './select',\n  '../utils',\n  'jquery'\n], function (SelectAdapter, Utils, $) {\n  function ArrayAdapter ($element, options) {\n    this._dataToConvert = options.get('data') || [];\n\n    ArrayAdapter.__super__.constructor.call(this, $element, options);\n  }\n\n  Utils.Extend(ArrayAdapter, SelectAdapter);\n\n  ArrayAdapter.prototype.bind = function (container, $container) {\n    ArrayAdapter.__super__.bind.call(this, container, $container);\n\n    this.addOptions(this.convertToOptions(this._dataToConvert));\n  };\n\n  ArrayAdapter.prototype.select = function (data) {\n    var $option = this.$element.find('option').filter(function (i, elm) {\n      return elm.value == data.id.toString();\n    });\n\n    if ($option.length === 0) {\n      $option = this.option(data);\n\n      this.addOptions($option);\n    }\n\n    ArrayAdapter.__super__.select.call(this, data);\n  };\n\n  ArrayAdapter.prototype.convertToOptions = function (data) {\n    var self = this;\n\n    var $existing = this.$element.find('option');\n    var existingIds = $existing.map(function () {\n      return self.item($(this)).id;\n    }).get();\n\n    var $options = [];\n\n    // Filter out all items except for the one passed in the argument\n    function onlyItem (item) {\n      return function () {\n        return $(this).val() == item.id;\n      };\n    }\n\n    for (var d = 0; d < data.length; d++) {\n      var item = this._normalizeItem(data[d]);\n\n      // Skip items which were pre-loaded, only merge the data\n      if ($.inArray(item.id, existingIds) >= 0) {\n        var $existingOption = $existing.filter(onlyItem(item));\n\n        var existingData = this.item($existingOption);\n        var newData = $.extend(true, {}, item, existingData);\n\n        var $newOption = this.option(newData);\n\n        $existingOption.replaceWith($newOption);\n\n        continue;\n      }\n\n      var $option = this.option(item);\n\n      if (item.children) {\n        var $children = this.convertToOptions(item.children);\n\n        Utils.appendMany($option, $children);\n      }\n\n      $options.push($option);\n    }\n\n    return $options;\n  };\n\n  return ArrayAdapter;\n});\n\nS2.define('select2/data/ajax',[\n  './array',\n  '../utils',\n  'jquery'\n], function (ArrayAdapter, Utils, $) {\n  function AjaxAdapter ($element, options) {\n    this.ajaxOptions = this._applyDefaults(options.get('ajax'));\n\n    if (this.ajaxOptions.processResults != null) {\n      this.processResults = this.ajaxOptions.processResults;\n    }\n\n    AjaxAdapter.__super__.constructor.call(this, $element, options);\n  }\n\n  Utils.Extend(AjaxAdapter, ArrayAdapter);\n\n  AjaxAdapter.prototype._applyDefaults = function (options) {\n    var defaults = {\n      data: function (params) {\n        return $.extend({}, params, {\n          q: params.term\n        });\n      },\n      transport: function (params, success, failure) {\n        var $request = $.ajax(params);\n\n        $request.then(success);\n        $request.fail(failure);\n\n        return $request;\n      }\n    };\n\n    return $.extend({}, defaults, options, true);\n  };\n\n  AjaxAdapter.prototype.processResults = function (results) {\n    return results;\n  };\n\n  AjaxAdapter.prototype.query = function (params, callback) {\n    var matches = [];\n    var self = this;\n\n    if (this._request != null) {\n      // JSONP requests cannot always be aborted\n      if ($.isFunction(this._request.abort)) {\n        this._request.abort();\n      }\n\n      this._request = null;\n    }\n\n    var options = $.extend({\n      type: 'GET'\n    }, this.ajaxOptions);\n\n    if (typeof options.url === 'function') {\n      options.url = options.url.call(this.$element, params);\n    }\n\n    if (typeof options.data === 'function') {\n      options.data = options.data.call(this.$element, params);\n    }\n\n    function request () {\n      var $request = options.transport(options, function (data) {\n        var results = self.processResults(data, params);\n\n        if (self.options.get('debug') && window.console && console.error) {\n          // Check to make sure that the response included a `results` key.\n          if (!results || !results.results || !$.isArray(results.results)) {\n            console.error(\n              'Select2: The AJAX results did not return an array in the ' +\n              '`results` key of the response.'\n            );\n          }\n        }\n\n        callback(results);\n      }, function () {\n        // Attempt to detect if a request was aborted\n        // Only works if the transport exposes a status property\n        if ('status' in $request &&\n            ($request.status === 0 || $request.status === '0')) {\n          return;\n        }\n\n        self.trigger('results:message', {\n          message: 'errorLoading'\n        });\n      });\n\n      self._request = $request;\n    }\n\n    if (this.ajaxOptions.delay && params.term != null) {\n      if (this._queryTimeout) {\n        window.clearTimeout(this._queryTimeout);\n      }\n\n      this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);\n    } else {\n      request();\n    }\n  };\n\n  return AjaxAdapter;\n});\n\nS2.define('select2/data/tags',[\n  'jquery'\n], function ($) {\n  function Tags (decorated, $element, options) {\n    var tags = options.get('tags');\n\n    var createTag = options.get('createTag');\n\n    if (createTag !== undefined) {\n      this.createTag = createTag;\n    }\n\n    var insertTag = options.get('insertTag');\n\n    if (insertTag !== undefined) {\n        this.insertTag = insertTag;\n    }\n\n    decorated.call(this, $element, options);\n\n    if ($.isArray(tags)) {\n      for (var t = 0; t < tags.length; t++) {\n        var tag = tags[t];\n        var item = this._normalizeItem(tag);\n\n        var $option = this.option(item);\n\n        this.$element.append($option);\n      }\n    }\n  }\n\n  Tags.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    this._removeOldTags();\n\n    if (params.term == null || params.page != null) {\n      decorated.call(this, params, callback);\n      return;\n    }\n\n    function wrapper (obj, child) {\n      var data = obj.results;\n\n      for (var i = 0; i < data.length; i++) {\n        var option = data[i];\n\n        var checkChildren = (\n          option.children != null &&\n          !wrapper({\n            results: option.children\n          }, true)\n        );\n\n        var optionText = (option.text || '').toUpperCase();\n        var paramsTerm = (params.term || '').toUpperCase();\n\n        var checkText = optionText === paramsTerm;\n\n        if (checkText || checkChildren) {\n          if (child) {\n            return false;\n          }\n\n          obj.data = data;\n          callback(obj);\n\n          return;\n        }\n      }\n\n      if (child) {\n        return true;\n      }\n\n      var tag = self.createTag(params);\n\n      if (tag != null) {\n        var $option = self.option(tag);\n        $option.attr('data-select2-tag', true);\n\n        self.addOptions([$option]);\n\n        self.insertTag(data, tag);\n      }\n\n      obj.results = data;\n\n      callback(obj);\n    }\n\n    decorated.call(this, params, wrapper);\n  };\n\n  Tags.prototype.createTag = function (decorated, params) {\n    var term = $.trim(params.term);\n\n    if (term === '') {\n      return null;\n    }\n\n    return {\n      id: term,\n      text: term\n    };\n  };\n\n  Tags.prototype.insertTag = function (_, data, tag) {\n    data.unshift(tag);\n  };\n\n  Tags.prototype._removeOldTags = function (_) {\n    var $options = this.$element.find('option[data-select2-tag]');\n\n    $options.each(function () {\n      if (this.selected) {\n        return;\n      }\n\n      $(this).remove();\n    });\n  };\n\n  return Tags;\n});\n\nS2.define('select2/data/tokenizer',[\n  'jquery'\n], function ($) {\n  function Tokenizer (decorated, $element, options) {\n    var tokenizer = options.get('tokenizer');\n\n    if (tokenizer !== undefined) {\n      this.tokenizer = tokenizer;\n    }\n\n    decorated.call(this, $element, options);\n  }\n\n  Tokenizer.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    this.$search =  container.dropdown.$search || container.selection.$search ||\n      $container.find('.select2-search__field');\n  };\n\n  Tokenizer.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    function createAndSelect (data) {\n      // Normalize the data object so we can use it for checks\n      var item = self._normalizeItem(data);\n\n      // Check if the data object already exists as a tag\n      // Select it if it doesn't\n      var $existingOptions = self.$element.find('option').filter(function () {\n        return $(this).val() === item.id;\n      });\n\n      // If an existing option wasn't found for it, create the option\n      if (!$existingOptions.length) {\n        var $option = self.option(item);\n        $option.attr('data-select2-tag', true);\n\n        self._removeOldTags();\n        self.addOptions([$option]);\n      }\n\n      // Select the item, now that we know there is an option for it\n      select(item);\n    }\n\n    function select (data) {\n      self.trigger('select', {\n        data: data\n      });\n    }\n\n    params.term = params.term || '';\n\n    var tokenData = this.tokenizer(params, this.options, createAndSelect);\n\n    if (tokenData.term !== params.term) {\n      // Replace the search term if we have the search box\n      if (this.$search.length) {\n        this.$search.val(tokenData.term);\n        this.$search.trigger('focus');\n      }\n\n      params.term = tokenData.term;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  Tokenizer.prototype.tokenizer = function (_, params, options, callback) {\n    var separators = options.get('tokenSeparators') || [];\n    var term = params.term;\n    var i = 0;\n\n    var createTag = this.createTag || function (params) {\n      return {\n        id: params.term,\n        text: params.term\n      };\n    };\n\n    while (i < term.length) {\n      var termChar = term[i];\n\n      if ($.inArray(termChar, separators) === -1) {\n        i++;\n\n        continue;\n      }\n\n      var part = term.substr(0, i);\n      var partParams = $.extend({}, params, {\n        term: part\n      });\n\n      var data = createTag(partParams);\n\n      if (data == null) {\n        i++;\n        continue;\n      }\n\n      callback(data);\n\n      // Reset the term to not include the tokenized portion\n      term = term.substr(i + 1) || '';\n      i = 0;\n    }\n\n    return {\n      term: term\n    };\n  };\n\n  return Tokenizer;\n});\n\nS2.define('select2/data/minimumInputLength',[\n\n], function () {\n  function MinimumInputLength (decorated, $e, options) {\n    this.minimumInputLength = options.get('minimumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MinimumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (params.term.length < this.minimumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooShort',\n        args: {\n          minimum: this.minimumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MinimumInputLength;\n});\n\nS2.define('select2/data/maximumInputLength',[\n\n], function () {\n  function MaximumInputLength (decorated, $e, options) {\n    this.maximumInputLength = options.get('maximumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (this.maximumInputLength > 0 &&\n        params.term.length > this.maximumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooLong',\n        args: {\n          maximum: this.maximumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MaximumInputLength;\n});\n\nS2.define('select2/data/maximumSelectionLength',[\n\n], function (){\n  function MaximumSelectionLength (decorated, $e, options) {\n    this.maximumSelectionLength = options.get('maximumSelectionLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumSelectionLength.prototype.bind =\n    function (decorated, container, $container) {\n      var self = this;\n\n      decorated.call(this, container, $container);\n\n      container.on('select', function () {\n        self._checkIfMaximumSelected();\n      });\n  };\n\n  MaximumSelectionLength.prototype.query =\n    function (decorated, params, callback) {\n      var self = this;\n\n      this._checkIfMaximumSelected(function () {\n        decorated.call(self, params, callback);\n      });\n  };\n\n  MaximumSelectionLength.prototype._checkIfMaximumSelected =\n    function (_, successCallback) {\n      var self = this;\n\n      this.current(function (currentData) {\n        var count = currentData != null ? currentData.length : 0;\n        if (self.maximumSelectionLength > 0 &&\n          count >= self.maximumSelectionLength) {\n          self.trigger('results:message', {\n            message: 'maximumSelected',\n            args: {\n              maximum: self.maximumSelectionLength\n            }\n          });\n          return;\n        }\n\n        if (successCallback) {\n          successCallback();\n        }\n      });\n  };\n\n  return MaximumSelectionLength;\n});\n\nS2.define('select2/dropdown',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Dropdown ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    Dropdown.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Dropdown, Utils.Observable);\n\n  Dropdown.prototype.render = function () {\n    var $dropdown = $(\n      '<span class=\"select2-dropdown\">' +\n        '<span class=\"select2-results\"></span>' +\n      '</span>'\n    );\n\n    $dropdown.attr('dir', this.options.get('dir'));\n\n    this.$dropdown = $dropdown;\n\n    return $dropdown;\n  };\n\n  Dropdown.prototype.bind = function () {\n    // Should be implemented in subclasses\n  };\n\n  Dropdown.prototype.position = function ($dropdown, $container) {\n    // Should be implemented in subclasses\n  };\n\n  Dropdown.prototype.destroy = function () {\n    // Remove the dropdown from the DOM\n    this.$dropdown.remove();\n  };\n\n  return Dropdown;\n});\n\nS2.define('select2/dropdown/search',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function Search () { }\n\n  Search.prototype.render = function (decorated) {\n    var $rendered = decorated.call(this);\n\n    var $search = $(\n      '<span class=\"select2-search select2-search--dropdown\">' +\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n        ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\"' +\n        ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' +\n      '</span>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('input');\n\n    $rendered.prepend($search);\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n\n    decorated.call(this, container, $container);\n\n    this.$search.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n    });\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$search.on('input', function (evt) {\n      // Unbind the duplicated `keyup` event\n      $(this).off('keyup');\n    });\n\n    this.$search.on('keyup input', function (evt) {\n      self.handleSearch(evt);\n    });\n\n    container.on('open', function () {\n      self.$search.attr('tabindex', 0);\n      self.$search.attr('aria-controls', resultsId);\n\n      self.$search.trigger('focus');\n\n      window.setTimeout(function () {\n        self.$search.trigger('focus');\n      }, 0);\n    });\n\n    container.on('close', function () {\n      self.$search.attr('tabindex', -1);\n      self.$search.removeAttr('aria-controls');\n      self.$search.removeAttr('aria-activedescendant');\n\n      self.$search.val('');\n      self.$search.trigger('blur');\n    });\n\n    container.on('focus', function () {\n      if (!container.isOpen()) {\n        self.$search.trigger('focus');\n      }\n    });\n\n    container.on('results:all', function (params) {\n      if (params.query.term == null || params.query.term === '') {\n        var showSearch = self.showSearch(params);\n\n        if (showSearch) {\n          self.$searchContainer.removeClass('select2-search--hide');\n        } else {\n          self.$searchContainer.addClass('select2-search--hide');\n        }\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      if (params.data._resultId) {\n        self.$search.attr('aria-activedescendant', params.data._resultId);\n      } else {\n        self.$search.removeAttr('aria-activedescendant');\n      }\n    });\n  };\n\n  Search.prototype.handleSearch = function (evt) {\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.showSearch = function (_, params) {\n    return true;\n  };\n\n  return Search;\n});\n\nS2.define('select2/dropdown/hidePlaceholder',[\n\n], function () {\n  function HidePlaceholder (decorated, $element, options, dataAdapter) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  HidePlaceholder.prototype.append = function (decorated, data) {\n    data.results = this.removePlaceholder(data.results);\n\n    decorated.call(this, data);\n  };\n\n  HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  HidePlaceholder.prototype.removePlaceholder = function (_, data) {\n    var modifiedData = data.slice(0);\n\n    for (var d = data.length - 1; d >= 0; d--) {\n      var item = data[d];\n\n      if (this.placeholder.id === item.id) {\n        modifiedData.splice(d, 1);\n      }\n    }\n\n    return modifiedData;\n  };\n\n  return HidePlaceholder;\n});\n\nS2.define('select2/dropdown/infiniteScroll',[\n  'jquery'\n], function ($) {\n  function InfiniteScroll (decorated, $element, options, dataAdapter) {\n    this.lastParams = {};\n\n    decorated.call(this, $element, options, dataAdapter);\n\n    this.$loadingMore = this.createLoadingMore();\n    this.loading = false;\n  }\n\n  InfiniteScroll.prototype.append = function (decorated, data) {\n    this.$loadingMore.remove();\n    this.loading = false;\n\n    decorated.call(this, data);\n\n    if (this.showLoadingMore(data)) {\n      this.$results.append(this.$loadingMore);\n      this.loadMoreIfNeeded();\n    }\n  };\n\n  InfiniteScroll.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('query', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    container.on('query:append', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    this.$results.on('scroll', this.loadMoreIfNeeded.bind(this));\n  };\n\n  InfiniteScroll.prototype.loadMoreIfNeeded = function () {\n    var isLoadMoreVisible = $.contains(\n      document.documentElement,\n      this.$loadingMore[0]\n    );\n\n    if (this.loading || !isLoadMoreVisible) {\n      return;\n    }\n\n    var currentOffset = this.$results.offset().top +\n      this.$results.outerHeight(false);\n    var loadingMoreOffset = this.$loadingMore.offset().top +\n      this.$loadingMore.outerHeight(false);\n\n    if (currentOffset + 50 >= loadingMoreOffset) {\n      this.loadMore();\n    }\n  };\n\n  InfiniteScroll.prototype.loadMore = function () {\n    this.loading = true;\n\n    var params = $.extend({}, {page: 1}, this.lastParams);\n\n    params.page++;\n\n    this.trigger('query:append', params);\n  };\n\n  InfiniteScroll.prototype.showLoadingMore = function (_, data) {\n    return data.pagination && data.pagination.more;\n  };\n\n  InfiniteScroll.prototype.createLoadingMore = function () {\n    var $option = $(\n      '<li ' +\n      'class=\"select2-results__option select2-results__option--load-more\"' +\n      'role=\"option\" aria-disabled=\"true\"></li>'\n    );\n\n    var message = this.options.get('translations').get('loadingMore');\n\n    $option.html(message(this.lastParams));\n\n    return $option;\n  };\n\n  return InfiniteScroll;\n});\n\nS2.define('select2/dropdown/attachBody',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function AttachBody (decorated, $element, options) {\n    this.$dropdownParent = $(options.get('dropdownParent') || document.body);\n\n    decorated.call(this, $element, options);\n  }\n\n  AttachBody.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self._showDropdown();\n      self._attachPositioningHandler(container);\n\n      // Must bind after the results handlers to ensure correct sizing\n      self._bindContainerResultHandlers(container);\n    });\n\n    container.on('close', function () {\n      self._hideDropdown();\n      self._detachPositioningHandler(container);\n    });\n\n    this.$dropdownContainer.on('mousedown', function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  AttachBody.prototype.destroy = function (decorated) {\n    decorated.call(this);\n\n    this.$dropdownContainer.remove();\n  };\n\n  AttachBody.prototype.position = function (decorated, $dropdown, $container) {\n    // Clone all of the container classes\n    $dropdown.attr('class', $container.attr('class'));\n\n    $dropdown.removeClass('select2');\n    $dropdown.addClass('select2-container--open');\n\n    $dropdown.css({\n      position: 'absolute',\n      top: -999999\n    });\n\n    this.$container = $container;\n  };\n\n  AttachBody.prototype.render = function (decorated) {\n    var $container = $('<span></span>');\n\n    var $dropdown = decorated.call(this);\n    $container.append($dropdown);\n\n    this.$dropdownContainer = $container;\n\n    return $container;\n  };\n\n  AttachBody.prototype._hideDropdown = function (decorated) {\n    this.$dropdownContainer.detach();\n  };\n\n  AttachBody.prototype._bindContainerResultHandlers =\n      function (decorated, container) {\n\n    // These should only be bound once\n    if (this._containerResultsHandlersBound) {\n      return;\n    }\n\n    var self = this;\n\n    container.on('results:all', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('results:append', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('results:message', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('select', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('unselect', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    this._containerResultsHandlersBound = true;\n  };\n\n  AttachBody.prototype._attachPositioningHandler =\n      function (decorated, container) {\n    var self = this;\n\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.each(function () {\n      Utils.StoreData(this, 'select2-scroll-position', {\n        x: $(this).scrollLeft(),\n        y: $(this).scrollTop()\n      });\n    });\n\n    $watchers.on(scrollEvent, function (ev) {\n      var position = Utils.GetData(this, 'select2-scroll-position');\n      $(this).scrollTop(position.y);\n    });\n\n    $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,\n      function (e) {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n  };\n\n  AttachBody.prototype._detachPositioningHandler =\n      function (decorated, container) {\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.off(scrollEvent);\n\n    $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);\n  };\n\n  AttachBody.prototype._positionDropdown = function () {\n    var $window = $(window);\n\n    var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above');\n    var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below');\n\n    var newDirection = null;\n\n    var offset = this.$container.offset();\n\n    offset.bottom = offset.top + this.$container.outerHeight(false);\n\n    var container = {\n      height: this.$container.outerHeight(false)\n    };\n\n    container.top = offset.top;\n    container.bottom = offset.top + container.height;\n\n    var dropdown = {\n      height: this.$dropdown.outerHeight(false)\n    };\n\n    var viewport = {\n      top: $window.scrollTop(),\n      bottom: $window.scrollTop() + $window.height()\n    };\n\n    var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);\n    var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);\n\n    var css = {\n      left: offset.left,\n      top: container.bottom\n    };\n\n    // Determine what the parent element is to use for calculating the offset\n    var $offsetParent = this.$dropdownParent;\n\n    // For statically positioned elements, we need to get the element\n    // that is determining the offset\n    if ($offsetParent.css('position') === 'static') {\n      $offsetParent = $offsetParent.offsetParent();\n    }\n\n    var parentOffset = {\n      top: 0,\n      left: 0\n    };\n\n    if (\n      $.contains(document.body, $offsetParent[0]) ||\n      $offsetParent[0].isConnected\n      ) {\n      parentOffset = $offsetParent.offset();\n    }\n\n    css.top -= parentOffset.top;\n    css.left -= parentOffset.left;\n\n    if (!isCurrentlyAbove && !isCurrentlyBelow) {\n      newDirection = 'below';\n    }\n\n    if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {\n      newDirection = 'above';\n    } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {\n      newDirection = 'below';\n    }\n\n    if (newDirection == 'above' ||\n      (isCurrentlyAbove && newDirection !== 'below')) {\n      css.top = container.top - parentOffset.top - dropdown.height;\n    }\n\n    if (newDirection != null) {\n      this.$dropdown\n        .removeClass('select2-dropdown--below select2-dropdown--above')\n        .addClass('select2-dropdown--' + newDirection);\n      this.$container\n        .removeClass('select2-container--below select2-container--above')\n        .addClass('select2-container--' + newDirection);\n    }\n\n    this.$dropdownContainer.css(css);\n  };\n\n  AttachBody.prototype._resizeDropdown = function () {\n    var css = {\n      width: this.$container.outerWidth(false) + 'px'\n    };\n\n    if (this.options.get('dropdownAutoWidth')) {\n      css.minWidth = css.width;\n      css.position = 'relative';\n      css.width = 'auto';\n    }\n\n    this.$dropdown.css(css);\n  };\n\n  AttachBody.prototype._showDropdown = function (decorated) {\n    this.$dropdownContainer.appendTo(this.$dropdownParent);\n\n    this._positionDropdown();\n    this._resizeDropdown();\n  };\n\n  return AttachBody;\n});\n\nS2.define('select2/dropdown/minimumResultsForSearch',[\n\n], function () {\n  function countResults (data) {\n    var count = 0;\n\n    for (var d = 0; d < data.length; d++) {\n      var item = data[d];\n\n      if (item.children) {\n        count += countResults(item.children);\n      } else {\n        count++;\n      }\n    }\n\n    return count;\n  }\n\n  function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {\n    this.minimumResultsForSearch = options.get('minimumResultsForSearch');\n\n    if (this.minimumResultsForSearch < 0) {\n      this.minimumResultsForSearch = Infinity;\n    }\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {\n    if (countResults(params.data.results) < this.minimumResultsForSearch) {\n      return false;\n    }\n\n    return decorated.call(this, params);\n  };\n\n  return MinimumResultsForSearch;\n});\n\nS2.define('select2/dropdown/selectOnClose',[\n  '../utils'\n], function (Utils) {\n  function SelectOnClose () { }\n\n  SelectOnClose.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('close', function (params) {\n      self._handleSelectOnClose(params);\n    });\n  };\n\n  SelectOnClose.prototype._handleSelectOnClose = function (_, params) {\n    if (params && params.originalSelect2Event != null) {\n      var event = params.originalSelect2Event;\n\n      // Don't select an item if the close event was triggered from a select or\n      // unselect event\n      if (event._type === 'select' || event._type === 'unselect') {\n        return;\n      }\n    }\n\n    var $highlightedResults = this.getHighlightedResults();\n\n    // Only select highlighted results\n    if ($highlightedResults.length < 1) {\n      return;\n    }\n\n    var data = Utils.GetData($highlightedResults[0], 'data');\n\n    // Don't re-select already selected resulte\n    if (\n      (data.element != null && data.element.selected) ||\n      (data.element == null && data.selected)\n    ) {\n      return;\n    }\n\n    this.trigger('select', {\n        data: data\n    });\n  };\n\n  return SelectOnClose;\n});\n\nS2.define('select2/dropdown/closeOnSelect',[\n\n], function () {\n  function CloseOnSelect () { }\n\n  CloseOnSelect.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('select', function (evt) {\n      self._selectTriggered(evt);\n    });\n\n    container.on('unselect', function (evt) {\n      self._selectTriggered(evt);\n    });\n  };\n\n  CloseOnSelect.prototype._selectTriggered = function (_, evt) {\n    var originalEvent = evt.originalEvent;\n\n    // Don't close if the control key is being held\n    if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) {\n      return;\n    }\n\n    this.trigger('close', {\n      originalEvent: originalEvent,\n      originalSelect2Event: evt\n    });\n  };\n\n  return CloseOnSelect;\n});\n\nS2.define('select2/i18n/en',[],function () {\n  // English\n  return {\n    errorLoading: function () {\n      return 'The results could not be loaded.';\n    },\n    inputTooLong: function (args) {\n      var overChars = args.input.length - args.maximum;\n\n      var message = 'Please delete ' + overChars + ' character';\n\n      if (overChars != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    inputTooShort: function (args) {\n      var remainingChars = args.minimum - args.input.length;\n\n      var message = 'Please enter ' + remainingChars + ' or more characters';\n\n      return message;\n    },\n    loadingMore: function () {\n      return 'Loading more results\u2026';\n    },\n    maximumSelected: function (args) {\n      var message = 'You can only select ' + args.maximum + ' item';\n\n      if (args.maximum != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    noResults: function () {\n      return 'No results found';\n    },\n    searching: function () {\n      return 'Searching\u2026';\n    },\n    removeAllItems: function () {\n      return 'Remove all items';\n    }\n  };\n});\n\nS2.define('select2/defaults',[\n  'jquery',\n  'require',\n\n  './results',\n\n  './selection/single',\n  './selection/multiple',\n  './selection/placeholder',\n  './selection/allowClear',\n  './selection/search',\n  './selection/eventRelay',\n\n  './utils',\n  './translation',\n  './diacritics',\n\n  './data/select',\n  './data/array',\n  './data/ajax',\n  './data/tags',\n  './data/tokenizer',\n  './data/minimumInputLength',\n  './data/maximumInputLength',\n  './data/maximumSelectionLength',\n\n  './dropdown',\n  './dropdown/search',\n  './dropdown/hidePlaceholder',\n  './dropdown/infiniteScroll',\n  './dropdown/attachBody',\n  './dropdown/minimumResultsForSearch',\n  './dropdown/selectOnClose',\n  './dropdown/closeOnSelect',\n\n  './i18n/en'\n], function ($, require,\n\n             ResultsList,\n\n             SingleSelection, MultipleSelection, Placeholder, AllowClear,\n             SelectionSearch, EventRelay,\n\n             Utils, Translation, DIACRITICS,\n\n             SelectData, ArrayData, AjaxData, Tags, Tokenizer,\n             MinimumInputLength, MaximumInputLength, MaximumSelectionLength,\n\n             Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,\n             AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,\n\n             EnglishTranslation) {\n  function Defaults () {\n    this.reset();\n  }\n\n  Defaults.prototype.apply = function (options) {\n    options = $.extend(true, {}, this.defaults, options);\n\n    if (options.dataAdapter == null) {\n      if (options.ajax != null) {\n        options.dataAdapter = AjaxData;\n      } else if (options.data != null) {\n        options.dataAdapter = ArrayData;\n      } else {\n        options.dataAdapter = SelectData;\n      }\n\n      if (options.minimumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MinimumInputLength\n        );\n      }\n\n      if (options.maximumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumInputLength\n        );\n      }\n\n      if (options.maximumSelectionLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumSelectionLength\n        );\n      }\n\n      if (options.tags) {\n        options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);\n      }\n\n      if (options.tokenSeparators != null || options.tokenizer != null) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          Tokenizer\n        );\n      }\n\n      if (options.query != null) {\n        var Query = require(options.amdBase + 'compat/query');\n\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          Query\n        );\n      }\n\n      if (options.initSelection != null) {\n        var InitSelection = require(options.amdBase + 'compat/initSelection');\n\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          InitSelection\n        );\n      }\n    }\n\n    if (options.resultsAdapter == null) {\n      options.resultsAdapter = ResultsList;\n\n      if (options.ajax != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          InfiniteScroll\n        );\n      }\n\n      if (options.placeholder != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          HidePlaceholder\n        );\n      }\n\n      if (options.selectOnClose) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          SelectOnClose\n        );\n      }\n    }\n\n    if (options.dropdownAdapter == null) {\n      if (options.multiple) {\n        options.dropdownAdapter = Dropdown;\n      } else {\n        var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);\n\n        options.dropdownAdapter = SearchableDropdown;\n      }\n\n      if (options.minimumResultsForSearch !== 0) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          MinimumResultsForSearch\n        );\n      }\n\n      if (options.closeOnSelect) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          CloseOnSelect\n        );\n      }\n\n      if (\n        options.dropdownCssClass != null ||\n        options.dropdownCss != null ||\n        options.adaptDropdownCssClass != null\n      ) {\n        var DropdownCSS = require(options.amdBase + 'compat/dropdownCss');\n\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          DropdownCSS\n        );\n      }\n\n      options.dropdownAdapter = Utils.Decorate(\n        options.dropdownAdapter,\n        AttachBody\n      );\n    }\n\n    if (options.selectionAdapter == null) {\n      if (options.multiple) {\n        options.selectionAdapter = MultipleSelection;\n      } else {\n        options.selectionAdapter = SingleSelection;\n      }\n\n      // Add the placeholder mixin if a placeholder was specified\n      if (options.placeholder != null) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          Placeholder\n        );\n      }\n\n      if (options.allowClear) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          AllowClear\n        );\n      }\n\n      if (options.multiple) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          SelectionSearch\n        );\n      }\n\n      if (\n        options.containerCssClass != null ||\n        options.containerCss != null ||\n        options.adaptContainerCssClass != null\n      ) {\n        var ContainerCSS = require(options.amdBase + 'compat/containerCss');\n\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          ContainerCSS\n        );\n      }\n\n      options.selectionAdapter = Utils.Decorate(\n        options.selectionAdapter,\n        EventRelay\n      );\n    }\n\n    // If the defaults were not previously applied from an element, it is\n    // possible for the language option to have not been resolved\n    options.language = this._resolveLanguage(options.language);\n\n    // Always fall back to English since it will always be complete\n    options.language.push('en');\n\n    var uniqueLanguages = [];\n\n    for (var l = 0; l < options.language.length; l++) {\n      var language = options.language[l];\n\n      if (uniqueLanguages.indexOf(language) === -1) {\n        uniqueLanguages.push(language);\n      }\n    }\n\n    options.language = uniqueLanguages;\n\n    options.translations = this._processTranslations(\n      options.language,\n      options.debug\n    );\n\n    return options;\n  };\n\n  Defaults.prototype.reset = function () {\n    function stripDiacritics (text) {\n      // Used 'uni range + named function' from http://jsperf.com/diacritics/18\n      function match(a) {\n        return DIACRITICS[a] || a;\n      }\n\n      return text.replace(/[^\\u0000-\\u007E]/g, match);\n    }\n\n    function matcher (params, data) {\n      // Always return the object if there is nothing to compare\n      if ($.trim(params.term) === '') {\n        return data;\n      }\n\n      // Do a recursive check for options with children\n      if (data.children && data.children.length > 0) {\n        // Clone the data object if there are children\n        // This is required as we modify the object to remove any non-matches\n        var match = $.extend(true, {}, data);\n\n        // Check each child of the option\n        for (var c = data.children.length - 1; c >= 0; c--) {\n          var child = data.children[c];\n\n          var matches = matcher(params, child);\n\n          // If there wasn't a match, remove the object in the array\n          if (matches == null) {\n            match.children.splice(c, 1);\n          }\n        }\n\n        // If any children matched, return the new object\n        if (match.children.length > 0) {\n          return match;\n        }\n\n        // If there were no matching children, check just the plain object\n        return matcher(params, match);\n      }\n\n      var original = stripDiacritics(data.text).toUpperCase();\n      var term = stripDiacritics(params.term).toUpperCase();\n\n      // Check if the text contains the term\n      if (original.indexOf(term) > -1) {\n        return data;\n      }\n\n      // If it doesn't contain the term, don't return anything\n      return null;\n    }\n\n    this.defaults = {\n      amdBase: './',\n      amdLanguageBase: './i18n/',\n      closeOnSelect: true,\n      debug: false,\n      dropdownAutoWidth: false,\n      escapeMarkup: Utils.escapeMarkup,\n      language: {},\n      matcher: matcher,\n      minimumInputLength: 0,\n      maximumInputLength: 0,\n      maximumSelectionLength: 0,\n      minimumResultsForSearch: 0,\n      selectOnClose: false,\n      scrollAfterSelect: false,\n      sorter: function (data) {\n        return data;\n      },\n      templateResult: function (result) {\n        return result.text;\n      },\n      templateSelection: function (selection) {\n        return selection.text;\n      },\n      theme: 'default',\n      width: 'resolve'\n    };\n  };\n\n  Defaults.prototype.applyFromElement = function (options, $element) {\n    var optionLanguage = options.language;\n    var defaultLanguage = this.defaults.language;\n    var elementLanguage = $element.prop('lang');\n    var parentLanguage = $element.closest('[lang]').prop('lang');\n\n    var languages = Array.prototype.concat.call(\n      this._resolveLanguage(elementLanguage),\n      this._resolveLanguage(optionLanguage),\n      this._resolveLanguage(defaultLanguage),\n      this._resolveLanguage(parentLanguage)\n    );\n\n    options.language = languages;\n\n    return options;\n  };\n\n  Defaults.prototype._resolveLanguage = function (language) {\n    if (!language) {\n      return [];\n    }\n\n    if ($.isEmptyObject(language)) {\n      return [];\n    }\n\n    if ($.isPlainObject(language)) {\n      return [language];\n    }\n\n    var languages;\n\n    if (!$.isArray(language)) {\n      languages = [language];\n    } else {\n      languages = language;\n    }\n\n    var resolvedLanguages = [];\n\n    for (var l = 0; l < languages.length; l++) {\n      resolvedLanguages.push(languages[l]);\n\n      if (typeof languages[l] === 'string' && languages[l].indexOf('-') > 0) {\n        // Extract the region information if it is included\n        var languageParts = languages[l].split('-');\n        var baseLanguage = languageParts[0];\n\n        resolvedLanguages.push(baseLanguage);\n      }\n    }\n\n    return resolvedLanguages;\n  };\n\n  Defaults.prototype._processTranslations = function (languages, debug) {\n    var translations = new Translation();\n\n    for (var l = 0; l < languages.length; l++) {\n      var languageData = new Translation();\n\n      var language = languages[l];\n\n      if (typeof language === 'string') {\n        try {\n          // Try to load it with the original name\n          languageData = Translation.loadPath(language);\n        } catch (e) {\n          try {\n            // If we couldn't load it, check if it wasn't the full path\n            language = this.defaults.amdLanguageBase + language;\n            languageData = Translation.loadPath(language);\n          } catch (ex) {\n            // The translation could not be loaded at all. Sometimes this is\n            // because of a configuration problem, other times this can be\n            // because of how Select2 helps load all possible translation files\n            if (debug && window.console && console.warn) {\n              console.warn(\n                'Select2: The language file for \"' + language + '\" could ' +\n                'not be automatically loaded. A fallback will be used instead.'\n              );\n            }\n          }\n        }\n      } else if ($.isPlainObject(language)) {\n        languageData = new Translation(language);\n      } else {\n        languageData = language;\n      }\n\n      translations.extend(languageData);\n    }\n\n    return translations;\n  };\n\n  Defaults.prototype.set = function (key, value) {\n    var camelKey = $.camelCase(key);\n\n    var data = {};\n    data[camelKey] = value;\n\n    var convertedData = Utils._convertData(data);\n\n    $.extend(true, this.defaults, convertedData);\n  };\n\n  var defaults = new Defaults();\n\n  return defaults;\n});\n\nS2.define('select2/options',[\n  'require',\n  'jquery',\n  './defaults',\n  './utils'\n], function (require, $, Defaults, Utils) {\n  function Options (options, $element) {\n    this.options = options;\n\n    if ($element != null) {\n      this.fromElement($element);\n    }\n\n    if ($element != null) {\n      this.options = Defaults.applyFromElement(this.options, $element);\n    }\n\n    this.options = Defaults.apply(this.options);\n\n    if ($element && $element.is('input')) {\n      var InputCompat = require(this.get('amdBase') + 'compat/inputData');\n\n      this.options.dataAdapter = Utils.Decorate(\n        this.options.dataAdapter,\n        InputCompat\n      );\n    }\n  }\n\n  Options.prototype.fromElement = function ($e) {\n    var excludedData = ['select2'];\n\n    if (this.options.multiple == null) {\n      this.options.multiple = $e.prop('multiple');\n    }\n\n    if (this.options.disabled == null) {\n      this.options.disabled = $e.prop('disabled');\n    }\n\n    if (this.options.dir == null) {\n      if ($e.prop('dir')) {\n        this.options.dir = $e.prop('dir');\n      } else if ($e.closest('[dir]').prop('dir')) {\n        this.options.dir = $e.closest('[dir]').prop('dir');\n      } else {\n        this.options.dir = 'ltr';\n      }\n    }\n\n    $e.prop('disabled', this.options.disabled);\n    $e.prop('multiple', this.options.multiple);\n\n    if (Utils.GetData($e[0], 'select2Tags')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-select2-tags` attribute has been changed to ' +\n          'use the `data-data` and `data-tags=\"true\"` attributes and will be ' +\n          'removed in future versions of Select2.'\n        );\n      }\n\n      Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags'));\n      Utils.StoreData($e[0], 'tags', true);\n    }\n\n    if (Utils.GetData($e[0], 'ajaxUrl')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-ajax-url` attribute has been changed to ' +\n          '`data-ajax--url` and support for the old attribute will be removed' +\n          ' in future versions of Select2.'\n        );\n      }\n\n      $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl'));\n      Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl'));\n    }\n\n    var dataset = {};\n\n    function upperCaseLetter(_, letter) {\n      return letter.toUpperCase();\n    }\n\n    // Pre-load all of the attributes which are prefixed with `data-`\n    for (var attr = 0; attr < $e[0].attributes.length; attr++) {\n      var attributeName = $e[0].attributes[attr].name;\n      var prefix = 'data-';\n\n      if (attributeName.substr(0, prefix.length) == prefix) {\n        // Get the contents of the attribute after `data-`\n        var dataName = attributeName.substring(prefix.length);\n\n        // Get the data contents from the consistent source\n        // This is more than likely the jQuery data helper\n        var dataValue = Utils.GetData($e[0], dataName);\n\n        // camelCase the attribute name to match the spec\n        var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter);\n\n        // Store the data attribute contents into the dataset since\n        dataset[camelDataName] = dataValue;\n      }\n    }\n\n    // Prefer the element's `dataset` attribute if it exists\n    // jQuery 1.x does not correctly handle data attributes with multiple dashes\n    if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {\n      dataset = $.extend(true, {}, $e[0].dataset, dataset);\n    }\n\n    // Prefer our internal data cache if it exists\n    var data = $.extend(true, {}, Utils.GetData($e[0]), dataset);\n\n    data = Utils._convertData(data);\n\n    for (var key in data) {\n      if ($.inArray(key, excludedData) > -1) {\n        continue;\n      }\n\n      if ($.isPlainObject(this.options[key])) {\n        $.extend(this.options[key], data[key]);\n      } else {\n        this.options[key] = data[key];\n      }\n    }\n\n    return this;\n  };\n\n  Options.prototype.get = function (key) {\n    return this.options[key];\n  };\n\n  Options.prototype.set = function (key, val) {\n    this.options[key] = val;\n  };\n\n  return Options;\n});\n\nS2.define('select2/core',[\n  'jquery',\n  './options',\n  './utils',\n  './keys'\n], function ($, Options, Utils, KEYS) {\n  var Select2 = function ($element, options) {\n    if (Utils.GetData($element[0], 'select2') != null) {\n      Utils.GetData($element[0], 'select2').destroy();\n    }\n\n    this.$element = $element;\n\n    this.id = this._generateId($element);\n\n    options = options || {};\n\n    this.options = new Options(options, $element);\n\n    Select2.__super__.constructor.call(this);\n\n    // Set up the tabindex\n\n    var tabindex = $element.attr('tabindex') || 0;\n    Utils.StoreData($element[0], 'old-tabindex', tabindex);\n    $element.attr('tabindex', '-1');\n\n    // Set up containers and adapters\n\n    var DataAdapter = this.options.get('dataAdapter');\n    this.dataAdapter = new DataAdapter($element, this.options);\n\n    var $container = this.render();\n\n    this._placeContainer($container);\n\n    var SelectionAdapter = this.options.get('selectionAdapter');\n    this.selection = new SelectionAdapter($element, this.options);\n    this.$selection = this.selection.render();\n\n    this.selection.position(this.$selection, $container);\n\n    var DropdownAdapter = this.options.get('dropdownAdapter');\n    this.dropdown = new DropdownAdapter($element, this.options);\n    this.$dropdown = this.dropdown.render();\n\n    this.dropdown.position(this.$dropdown, $container);\n\n    var ResultsAdapter = this.options.get('resultsAdapter');\n    this.results = new ResultsAdapter($element, this.options, this.dataAdapter);\n    this.$results = this.results.render();\n\n    this.results.position(this.$results, this.$dropdown);\n\n    // Bind events\n\n    var self = this;\n\n    // Bind the container to all of the adapters\n    this._bindAdapters();\n\n    // Register any DOM event handlers\n    this._registerDomEvents();\n\n    // Register any internal event handlers\n    this._registerDataEvents();\n    this._registerSelectionEvents();\n    this._registerDropdownEvents();\n    this._registerResultsEvents();\n    this._registerEvents();\n\n    // Set the initial state\n    this.dataAdapter.current(function (initialData) {\n      self.trigger('selection:update', {\n        data: initialData\n      });\n    });\n\n    // Hide the original select\n    $element.addClass('select2-hidden-accessible');\n    $element.attr('aria-hidden', 'true');\n\n    // Synchronize any monitored attributes\n    this._syncAttributes();\n\n    Utils.StoreData($element[0], 'select2', this);\n\n    // Ensure backwards compatibility with $element.data('select2').\n    $element.data('select2', this);\n  };\n\n  Utils.Extend(Select2, Utils.Observable);\n\n  Select2.prototype._generateId = function ($element) {\n    var id = '';\n\n    if ($element.attr('id') != null) {\n      id = $element.attr('id');\n    } else if ($element.attr('name') != null) {\n      id = $element.attr('name') + '-' + Utils.generateChars(2);\n    } else {\n      id = Utils.generateChars(4);\n    }\n\n    id = id.replace(/(:|\\.|\\[|\\]|,)/g, '');\n    id = 'select2-' + id;\n\n    return id;\n  };\n\n  Select2.prototype._placeContainer = function ($container) {\n    $container.insertAfter(this.$element);\n\n    var width = this._resolveWidth(this.$element, this.options.get('width'));\n\n    if (width != null) {\n      $container.css('width', width);\n    }\n  };\n\n  Select2.prototype._resolveWidth = function ($element, method) {\n    var WIDTH = /^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;\n\n    if (method == 'resolve') {\n      var styleWidth = this._resolveWidth($element, 'style');\n\n      if (styleWidth != null) {\n        return styleWidth;\n      }\n\n      return this._resolveWidth($element, 'element');\n    }\n\n    if (method == 'element') {\n      var elementWidth = $element.outerWidth(false);\n\n      if (elementWidth <= 0) {\n        return 'auto';\n      }\n\n      return elementWidth + 'px';\n    }\n\n    if (method == 'style') {\n      var style = $element.attr('style');\n\n      if (typeof(style) !== 'string') {\n        return null;\n      }\n\n      var attrs = style.split(';');\n\n      for (var i = 0, l = attrs.length; i < l; i = i + 1) {\n        var attr = attrs[i].replace(/\\s/g, '');\n        var matches = attr.match(WIDTH);\n\n        if (matches !== null && matches.length >= 1) {\n          return matches[1];\n        }\n      }\n\n      return null;\n    }\n\n    if (method == 'computedstyle') {\n      var computedStyle = window.getComputedStyle($element[0]);\n\n      return computedStyle.width;\n    }\n\n    return method;\n  };\n\n  Select2.prototype._bindAdapters = function () {\n    this.dataAdapter.bind(this, this.$container);\n    this.selection.bind(this, this.$container);\n\n    this.dropdown.bind(this, this.$container);\n    this.results.bind(this, this.$container);\n  };\n\n  Select2.prototype._registerDomEvents = function () {\n    var self = this;\n\n    this.$element.on('change.select2', function () {\n      self.dataAdapter.current(function (data) {\n        self.trigger('selection:update', {\n          data: data\n        });\n      });\n    });\n\n    this.$element.on('focus.select2', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this._syncA = Utils.bind(this._syncAttributes, this);\n    this._syncS = Utils.bind(this._syncSubtree, this);\n\n    if (this.$element[0].attachEvent) {\n      this.$element[0].attachEvent('onpropertychange', this._syncA);\n    }\n\n    var observer = window.MutationObserver ||\n      window.WebKitMutationObserver ||\n      window.MozMutationObserver\n    ;\n\n    if (observer != null) {\n      this._observer = new observer(function (mutations) {\n        self._syncA();\n        self._syncS(null, mutations);\n      });\n      this._observer.observe(this.$element[0], {\n        attributes: true,\n        childList: true,\n        subtree: false\n      });\n    } else if (this.$element[0].addEventListener) {\n      this.$element[0].addEventListener(\n        'DOMAttrModified',\n        self._syncA,\n        false\n      );\n      this.$element[0].addEventListener(\n        'DOMNodeInserted',\n        self._syncS,\n        false\n      );\n      this.$element[0].addEventListener(\n        'DOMNodeRemoved',\n        self._syncS,\n        false\n      );\n    }\n  };\n\n  Select2.prototype._registerDataEvents = function () {\n    var self = this;\n\n    this.dataAdapter.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerSelectionEvents = function () {\n    var self = this;\n    var nonRelayEvents = ['toggle', 'focus'];\n\n    this.selection.on('toggle', function () {\n      self.toggleDropdown();\n    });\n\n    this.selection.on('focus', function (params) {\n      self.focus(params);\n    });\n\n    this.selection.on('*', function (name, params) {\n      if ($.inArray(name, nonRelayEvents) !== -1) {\n        return;\n      }\n\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerDropdownEvents = function () {\n    var self = this;\n\n    this.dropdown.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerResultsEvents = function () {\n    var self = this;\n\n    this.results.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerEvents = function () {\n    var self = this;\n\n    this.on('open', function () {\n      self.$container.addClass('select2-container--open');\n    });\n\n    this.on('close', function () {\n      self.$container.removeClass('select2-container--open');\n    });\n\n    this.on('enable', function () {\n      self.$container.removeClass('select2-container--disabled');\n    });\n\n    this.on('disable', function () {\n      self.$container.addClass('select2-container--disabled');\n    });\n\n    this.on('blur', function () {\n      self.$container.removeClass('select2-container--focus');\n    });\n\n    this.on('query', function (params) {\n      if (!self.isOpen()) {\n        self.trigger('open', {});\n      }\n\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:all', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('query:append', function (params) {\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:append', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('keypress', function (evt) {\n      var key = evt.which;\n\n      if (self.isOpen()) {\n        if (key === KEYS.ESC || key === KEYS.TAB ||\n            (key === KEYS.UP && evt.altKey)) {\n          self.close(evt);\n\n          evt.preventDefault();\n        } else if (key === KEYS.ENTER) {\n          self.trigger('results:select', {});\n\n          evt.preventDefault();\n        } else if ((key === KEYS.SPACE && evt.ctrlKey)) {\n          self.trigger('results:toggle', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.UP) {\n          self.trigger('results:previous', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.DOWN) {\n          self.trigger('results:next', {});\n\n          evt.preventDefault();\n        }\n      } else {\n        if (key === KEYS.ENTER || key === KEYS.SPACE ||\n            (key === KEYS.DOWN && evt.altKey)) {\n          self.open();\n\n          evt.preventDefault();\n        }\n      }\n    });\n  };\n\n  Select2.prototype._syncAttributes = function () {\n    this.options.set('disabled', this.$element.prop('disabled'));\n\n    if (this.isDisabled()) {\n      if (this.isOpen()) {\n        this.close();\n      }\n\n      this.trigger('disable', {});\n    } else {\n      this.trigger('enable', {});\n    }\n  };\n\n  Select2.prototype._isChangeMutation = function (evt, mutations) {\n    var changed = false;\n    var self = this;\n\n    // Ignore any mutation events raised for elements that aren't options or\n    // optgroups. This handles the case when the select element is destroyed\n    if (\n      evt && evt.target && (\n        evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP'\n      )\n    ) {\n      return;\n    }\n\n    if (!mutations) {\n      // If mutation events aren't supported, then we can only assume that the\n      // change affected the selections\n      changed = true;\n    } else if (mutations.addedNodes && mutations.addedNodes.length > 0) {\n      for (var n = 0; n < mutations.addedNodes.length; n++) {\n        var node = mutations.addedNodes[n];\n\n        if (node.selected) {\n          changed = true;\n        }\n      }\n    } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {\n      changed = true;\n    } else if ($.isArray(mutations)) {\n      $.each(mutations, function(evt, mutation) {\n        if (self._isChangeMutation(evt, mutation)) {\n          // We've found a change mutation.\n          // Let's escape from the loop and continue\n          changed = true;\n          return false;\n        }\n      });\n    }\n    return changed;\n  };\n\n  Select2.prototype._syncSubtree = function (evt, mutations) {\n    var changed = this._isChangeMutation(evt, mutations);\n    var self = this;\n\n    // Only re-pull the data if we think there is a change\n    if (changed) {\n      this.dataAdapter.current(function (currentData) {\n        self.trigger('selection:update', {\n          data: currentData\n        });\n      });\n    }\n  };\n\n  /**\n   * Override the trigger method to automatically trigger pre-events when\n   * there are events that can be prevented.\n   */\n  Select2.prototype.trigger = function (name, args) {\n    var actualTrigger = Select2.__super__.trigger;\n    var preTriggerMap = {\n      'open': 'opening',\n      'close': 'closing',\n      'select': 'selecting',\n      'unselect': 'unselecting',\n      'clear': 'clearing'\n    };\n\n    if (args === undefined) {\n      args = {};\n    }\n\n    if (name in preTriggerMap) {\n      var preTriggerName = preTriggerMap[name];\n      var preTriggerArgs = {\n        prevented: false,\n        name: name,\n        args: args\n      };\n\n      actualTrigger.call(this, preTriggerName, preTriggerArgs);\n\n      if (preTriggerArgs.prevented) {\n        args.prevented = true;\n\n        return;\n      }\n    }\n\n    actualTrigger.call(this, name, args);\n  };\n\n  Select2.prototype.toggleDropdown = function () {\n    if (this.isDisabled()) {\n      return;\n    }\n\n    if (this.isOpen()) {\n      this.close();\n    } else {\n      this.open();\n    }\n  };\n\n  Select2.prototype.open = function () {\n    if (this.isOpen()) {\n      return;\n    }\n\n    if (this.isDisabled()) {\n      return;\n    }\n\n    this.trigger('query', {});\n  };\n\n  Select2.prototype.close = function (evt) {\n    if (!this.isOpen()) {\n      return;\n    }\n\n    this.trigger('close', { originalEvent : evt });\n  };\n\n  /**\n   * Helper method to abstract the \"enabled\" (not \"disabled\") state of this\n   * object.\n   *\n   * @return {true} if the instance is not disabled.\n   * @return {false} if the instance is disabled.\n   */\n  Select2.prototype.isEnabled = function () {\n    return !this.isDisabled();\n  };\n\n  /**\n   * Helper method to abstract the \"disabled\" state of this object.\n   *\n   * @return {true} if the disabled option is true.\n   * @return {false} if the disabled option is false.\n   */\n  Select2.prototype.isDisabled = function () {\n    return this.options.get('disabled');\n  };\n\n  Select2.prototype.isOpen = function () {\n    return this.$container.hasClass('select2-container--open');\n  };\n\n  Select2.prototype.hasFocus = function () {\n    return this.$container.hasClass('select2-container--focus');\n  };\n\n  Select2.prototype.focus = function (data) {\n    // No need to re-trigger focus events if we are already focused\n    if (this.hasFocus()) {\n      return;\n    }\n\n    this.$container.addClass('select2-container--focus');\n    this.trigger('focus', {});\n  };\n\n  Select2.prototype.enable = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"enable\")` method has been deprecated and will' +\n        ' be removed in later Select2 versions. Use $element.prop(\"disabled\")' +\n        ' instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      args = [true];\n    }\n\n    var disabled = !args[0];\n\n    this.$element.prop('disabled', disabled);\n  };\n\n  Select2.prototype.data = function () {\n    if (this.options.get('debug') &&\n        arguments.length > 0 && window.console && console.warn) {\n      console.warn(\n        'Select2: Data can no longer be set using `select2(\"data\")`. You ' +\n        'should consider setting the value instead using `$element.val()`.'\n      );\n    }\n\n    var data = [];\n\n    this.dataAdapter.current(function (currentData) {\n      data = currentData;\n    });\n\n    return data;\n  };\n\n  Select2.prototype.val = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"val\")` method has been deprecated and will be' +\n        ' removed in later Select2 versions. Use $element.val() instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      return this.$element.val();\n    }\n\n    var newVal = args[0];\n\n    if ($.isArray(newVal)) {\n      newVal = $.map(newVal, function (obj) {\n        return obj.toString();\n      });\n    }\n\n    this.$element.val(newVal).trigger('input').trigger('change');\n  };\n\n  Select2.prototype.destroy = function () {\n    this.$container.remove();\n\n    if (this.$element[0].detachEvent) {\n      this.$element[0].detachEvent('onpropertychange', this._syncA);\n    }\n\n    if (this._observer != null) {\n      this._observer.disconnect();\n      this._observer = null;\n    } else if (this.$element[0].removeEventListener) {\n      this.$element[0]\n        .removeEventListener('DOMAttrModified', this._syncA, false);\n      this.$element[0]\n        .removeEventListener('DOMNodeInserted', this._syncS, false);\n      this.$element[0]\n        .removeEventListener('DOMNodeRemoved', this._syncS, false);\n    }\n\n    this._syncA = null;\n    this._syncS = null;\n\n    this.$element.off('.select2');\n    this.$element.attr('tabindex',\n    Utils.GetData(this.$element[0], 'old-tabindex'));\n\n    this.$element.removeClass('select2-hidden-accessible');\n    this.$element.attr('aria-hidden', 'false');\n    Utils.RemoveData(this.$element[0]);\n    this.$element.removeData('select2');\n\n    this.dataAdapter.destroy();\n    this.selection.destroy();\n    this.dropdown.destroy();\n    this.results.destroy();\n\n    this.dataAdapter = null;\n    this.selection = null;\n    this.dropdown = null;\n    this.results = null;\n  };\n\n  Select2.prototype.render = function () {\n    var $container = $(\n      '<span class=\"select2 select2-container\">' +\n        '<span class=\"selection\"></span>' +\n        '<span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span>' +\n      '</span>'\n    );\n\n    $container.attr('dir', this.options.get('dir'));\n\n    this.$container = $container;\n\n    this.$container.addClass('select2-container--' + this.options.get('theme'));\n\n    Utils.StoreData($container[0], 'element', this.$element);\n\n    return $container;\n  };\n\n  return Select2;\n});\n\nS2.define('jquery-mousewheel',[\n  'jquery'\n], function ($) {\n  // Used to shim jQuery.mousewheel for non-full builds.\n  return $;\n});\n\nS2.define('jquery.select2',[\n  'jquery',\n  'jquery-mousewheel',\n\n  './select2/core',\n  './select2/defaults',\n  './select2/utils'\n], function ($, _, Select2, Defaults, Utils) {\n  if ($.fn.select2 == null) {\n    // All methods that should return the element\n    var thisMethods = ['open', 'close', 'destroy'];\n\n    $.fn.select2 = function (options) {\n      options = options || {};\n\n      if (typeof options === 'object') {\n        this.each(function () {\n          var instanceOptions = $.extend(true, {}, options);\n\n          var instance = new Select2($(this), instanceOptions);\n        });\n\n        return this;\n      } else if (typeof options === 'string') {\n        var ret;\n        var args = Array.prototype.slice.call(arguments, 1);\n\n        this.each(function () {\n          var instance = Utils.GetData(this, 'select2');\n\n          if (instance == null && window.console && console.error) {\n            console.error(\n              'The select2(\\'' + options + '\\') method was called on an ' +\n              'element that is not using Select2.'\n            );\n          }\n\n          ret = instance[options].apply(instance, args);\n        });\n\n        // Check if we should be returning `this`\n        if ($.inArray(options, thisMethods) > -1) {\n          return this;\n        }\n\n        return ret;\n      } else {\n        throw new Error('Invalid arguments for Select2: ' + options);\n      }\n    };\n  }\n\n  if ($.fn.select2.defaults == null) {\n    $.fn.select2.defaults = Defaults;\n  }\n\n  return Select2;\n});\n\n  // Return the AMD loader configuration so it can be used outside of this file\n  return {\n    define: S2.define,\n    require: S2.require\n  };\n}());\n\n  // Autoload the jQuery bindings\n  // We know that all of the modules exist above this, so we're safe\n  var select2 = S2.require('jquery.select2');\n\n  // Hold the AMD module references on the jQuery function that was just loaded\n  // This allows Select2 to use the internal loader outside of this file, such\n  // as in the language files.\n  jQuery.fn.select2.amd = S2;\n\n  // Return the Select2 instance for anyone who is importing it.\n  return select2;\n}));\n", "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\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}();", "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\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}();", "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/pt\",[],function(){return{errorLoading:function(){return\"Os resultados n\u00E3o puderam ser carregados.\"},inputTooLong:function(e){var r=e.input.length-e.maximum,n=\"Por favor apague \"+r+\" \";return n+=1!=r?\"caracteres\":\"caractere\"},inputTooShort:function(e){return\"Introduza \"+(e.minimum-e.input.length)+\" ou mais caracteres\"},loadingMore:function(){return\"A carregar mais resultados\u2026\"},maximumSelected:function(e){var r=\"Apenas pode seleccionar \"+e.maximum+\" \";return r+=1!=e.maximum?\"itens\":\"item\"},noResults:function(){return\"Sem resultados\"},searching:function(){return\"A procurar\u2026\"},removeAllItems:function(){return\"Remover todos os itens\"}}}),e.define,e.require}();", "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ja\",[],function(){return{errorLoading:function(){return\"\u7D50\u679C\u304C\u8AAD\u307F\u8FBC\u307E\u308C\u307E\u305B\u3093\u3067\u3057\u305F\"},inputTooLong:function(n){return n.input.length-n.maximum+\" \u6587\u5B57\u3092\u524A\u9664\u3057\u3066\u304F\u3060\u3055\u3044\"},inputTooShort:function(n){return\"\u5C11\u306A\u304F\u3068\u3082 \"+(n.minimum-n.input.length)+\" \u6587\u5B57\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\"},loadingMore:function(){return\"\u8AAD\u307F\u8FBC\u307F\u4E2D\u2026\"},maximumSelected:function(n){return n.maximum+\" \u4EF6\u3057\u304B\u9078\u629E\u3067\u304D\u307E\u305B\u3093\"},noResults:function(){return\"\u5BFE\u8C61\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\"},searching:function(){return\"\u691C\u7D22\u3057\u3066\u3044\u307E\u3059\u2026\"},removeAllItems:function(){return\"\u3059\u3079\u3066\u306E\u30A2\u30A4\u30C6\u30E0\u3092\u524A\u9664\"}}}),n.define,n.require}();", "/**\n * MicroEvent - to make any js object an event emitter\n *\n * - pure javascript - server compatible, browser compatible\n * - dont rely on the browser doms\n * - super simple - you get it immediatly, no mistery, no magic involved\n *\n * @author Jerome Etienne (https://github.com/jeromeetienne)\n */\n\ntype TCallback = (...args:any) => any;\n\n/**\n * Execute callback for each event in space separated list of event names\n *\n */\nfunction forEvents(events:string,callback:(event:string)=>any){\n\tevents.split(/\\s+/).forEach((event) =>{\n\t\tcallback(event);\n\t});\n}\n\nexport default class MicroEvent{\n\n\tpublic _events: {[key:string]:TCallback[]};\n\n\tconstructor(){\n\t\tthis._events = {};\n\t}\n\n\ton(events:string, fct:TCallback){\n\t\tforEvents(events,(event) => {\n\t\t\tconst event_array = this._events[event] || [];\n\t\t\tevent_array.push(fct);\n\t\t\tthis._events[event] = event_array;\n\t\t});\n\t}\n\n\toff(events:string, fct:TCallback){\n\t\tvar n = arguments.length;\n\t\tif( n === 0 ){\n\t\t\tthis._events = {};\n\t\t\treturn;\n\t\t}\n\n\t\tforEvents(events,(event) => {\n\n\t\t\tif (n === 1){\n\t\t\t\tdelete this._events[event];\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst event_array = this._events[event];\n\t\t\tif( event_array === undefined ) return;\n\n\t\t\tevent_array.splice(event_array.indexOf(fct), 1);\n\t\t\tthis._events[event] = event_array;\n\t\t});\n\t}\n\n\ttrigger(events:string, ...args:any){\n\t\tvar self = this;\n\n\t\tforEvents(events,(event) => {\n\t\t\tconst event_array = self._events[event];\n\t\t\tif( event_array === undefined ) return;\n\t\t\tevent_array.forEach(fct => {\n\t\t\t\tfct.apply(self, args );\n\t\t\t});\n\n\t\t});\n\t}\n};\n", "/**\n * microplugin.js\n * Copyright (c) 2013 Brian Reavis & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n */\n\ntype TSettings = {\n\t[key:string]:any\n}\n\ntype TPlugins = {\n\tnames: string[],\n\tsettings: TSettings,\n\trequested: {[key:string]:boolean},\n\tloaded: {[key:string]:any}\n};\n\nexport type TPluginItem = {name:string,options:{}};\nexport type TPluginHash = {[key:string]:{}};\n\n\n\n\nexport default function MicroPlugin(Interface: any ){\n\n\tInterface.plugins = {};\n\n\treturn class extends Interface{\n\n\t\tpublic plugins:TPlugins = {\n\t\t\tnames     : [],\n\t\t\tsettings  : {},\n\t\t\trequested : {},\n\t\t\tloaded    : {}\n\t\t};\n\n\t\t/**\n\t\t * Registers a plugin.\n\t\t *\n\t\t * @param {function} fn\n\t\t */\n\t\tstatic define(name:string, fn:(this:any,settings:TSettings)=>any){\n\t\t\tInterface.plugins[name] = {\n\t\t\t\t'name' : name,\n\t\t\t\t'fn'   : fn\n\t\t\t};\n\t\t}\n\n\n\t\t/**\n\t\t * Initializes the listed plugins (with options).\n\t\t * Acceptable formats:\n\t\t *\n\t\t * List (without options):\n\t\t *   ['a', 'b', 'c']\n\t\t *\n\t\t * List (with options):\n\t\t *   [{'name': 'a', options: {}}, {'name': 'b', options: {}}]\n\t\t *\n\t\t * Hash (with options):\n\t\t *   {'a': { ... }, 'b': { ... }, 'c': { ... }}\n\t\t *\n\t\t * @param {array|object} plugins\n\t\t */\n\t\tinitializePlugins(plugins:string[]|TPluginItem[]|TPluginHash) {\n\t\t\tvar key, name;\n\t\t\tconst self  = this;\n\t\t\tconst queue:string[] = [];\n\n\t\t\tif (Array.isArray(plugins)) {\n\t\t\t\tplugins.forEach((plugin:string|TPluginItem)=>{\n\t\t\t\t\tif (typeof plugin === 'string') {\n\t\t\t\t\t\tqueue.push(plugin);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.plugins.settings[plugin.name] = plugin.options;\n\t\t\t\t\t\tqueue.push(plugin.name);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else if (plugins) {\n\t\t\t\tfor (key in plugins) {\n\t\t\t\t\tif (plugins.hasOwnProperty(key)) {\n\t\t\t\t\t\tself.plugins.settings[key] = plugins[key];\n\t\t\t\t\t\tqueue.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile( name = queue.shift() ){\n\t\t\t\tself.require(name);\n\t\t\t}\n\t\t}\n\n\t\tloadPlugin(name:string) {\n\t\t\tvar self    = this;\n\t\t\tvar plugins = self.plugins;\n\t\t\tvar plugin  = Interface.plugins[name];\n\n\t\t\tif (!Interface.plugins.hasOwnProperty(name)) {\n\t\t\t\tthrow new Error('Unable to find \"' +  name + '\" plugin');\n\t\t\t}\n\n\t\t\tplugins.requested[name] = true;\n\t\t\tplugins.loaded[name] = plugin.fn.apply(self, [self.plugins.settings[name] || {}]);\n\t\t\tplugins.names.push(name);\n\t\t}\n\n\t\t/**\n\t\t * Initializes a plugin.\n\t\t *\n\t\t */\n\t\trequire(name:string) {\n\t\t\tvar self = this;\n\t\t\tvar plugins = self.plugins;\n\n\t\t\tif (!self.plugins.loaded.hasOwnProperty(name)) {\n\t\t\t\tif (plugins.requested[name]) {\n\t\t\t\t\tthrow new Error('Plugin has circular dependency (\"' + name + '\")');\n\t\t\t\t}\n\t\t\t\tself.loadPlugin(name);\n\t\t\t}\n\n\t\t\treturn plugins.loaded[name];\n\t\t}\n\n\t};\n\n}\n", "/*! @orchidjs/unicode-variants | https://github.com/orchidjs/unicode-variants | Apache License (v2) */\n/**\n * Convert array of strings to a regular expression\n *\tex ['ab','a'] => (?:ab|a)\n * \tex ['a','b'] => [ab]\n * @param {string[]} chars\n * @return {string}\n */\nconst arrayToPattern = chars => {\n  chars = chars.filter(Boolean);\n\n  if (chars.length < 2) {\n    return chars[0] || '';\n  }\n\n  return maxValueLength(chars) == 1 ? '[' + chars.join('') + ']' : '(?:' + chars.join('|') + ')';\n};\n/**\n * @param {string[]} array\n * @return {string}\n */\n\nconst sequencePattern = array => {\n  if (!hasDuplicates(array)) {\n    return array.join('');\n  }\n\n  let pattern = '';\n  let prev_char_count = 0;\n\n  const prev_pattern = () => {\n    if (prev_char_count > 1) {\n      pattern += '{' + prev_char_count + '}';\n    }\n  };\n\n  array.forEach((char, i) => {\n    if (char === array[i - 1]) {\n      prev_char_count++;\n      return;\n    }\n\n    prev_pattern();\n    pattern += char;\n    prev_char_count = 1;\n  });\n  prev_pattern();\n  return pattern;\n};\n/**\n * Convert array of strings to a regular expression\n *\tex ['ab','a'] => (?:ab|a)\n * \tex ['a','b'] => [ab]\n * @param {Set<string>} chars\n * @return {string}\n */\n\nconst setToPattern = chars => {\n  let array = toArray(chars);\n  return arrayToPattern(array);\n};\n/**\n *\n * https://stackoverflow.com/questions/7376598/in-javascript-how-do-i-check-if-an-array-has-duplicate-values\n * @param {any[]} array\n */\n\nconst hasDuplicates = array => {\n  return new Set(array).size !== array.length;\n};\n/**\n * https://stackoverflow.com/questions/63006601/why-does-u-throw-an-invalid-escape-error\n * @param {string} str\n * @return {string}\n */\n\nconst escape_regex = str => {\n  return (str + '').replace(/([\\$\\(\\)\\*\\+\\.\\?\\[\\]\\^\\{\\|\\}\\\\])/gu, '\\\\$1');\n};\n/**\n * Return the max length of array values\n * @param {string[]} array\n *\n */\n\nconst maxValueLength = array => {\n  return array.reduce((longest, value) => Math.max(longest, unicodeLength(value)), 0);\n};\n/**\n * @param {string} str\n */\n\nconst unicodeLength = str => {\n  return toArray(str).length;\n};\n/**\n * @param {any} p\n * @return {any[]}\n */\n\nconst toArray = p => Array.from(p);\n\nexport { arrayToPattern, escape_regex, hasDuplicates, maxValueLength, sequencePattern, setToPattern, toArray, unicodeLength };\n//# sourceMappingURL=regex.js.map\n", "/*! @orchidjs/unicode-variants | https://github.com/orchidjs/unicode-variants | Apache License (v2) */\n/**\n * Get all possible combinations of substrings that add up to the given string\n * https://stackoverflow.com/questions/30169587/find-all-the-combination-of-substrings-that-add-up-to-the-given-string\n * @param {string} input\n * @return {string[][]}\n */\nconst allSubstrings = input => {\n  if (input.length === 1) return [[input]];\n  /** @type {string[][]} */\n\n  let result = [];\n  const start = input.substring(1);\n  const suba = allSubstrings(start);\n  suba.forEach(function (subresult) {\n    let tmp = subresult.slice(0);\n    tmp[0] = input.charAt(0) + tmp[0];\n    result.push(tmp);\n    tmp = subresult.slice(0);\n    tmp.unshift(input.charAt(0));\n    result.push(tmp);\n  });\n  return result;\n};\n\nexport { allSubstrings };\n//# sourceMappingURL=strings.js.map\n", "/*! @orchidjs/unicode-variants | https://github.com/orchidjs/unicode-variants | Apache License (v2) */\nimport { toArray, setToPattern, escape_regex, arrayToPattern, sequencePattern } from './regex.js';\nexport { escape_regex } from './regex.js';\nimport { allSubstrings } from './strings.js';\n\n/**\n * @typedef {{[key:string]:string}} TUnicodeMap\n * @typedef {{[key:string]:Set<string>}} TUnicodeSets\n * @typedef {[[number,number]]} TCodePoints\n * @typedef {{folded:string,composed:string,code_point:number}} TCodePointObj\n * @typedef {{start:number,end:number,length:number,substr:string}} TSequencePart\n */\n/** @type {TCodePoints} */\n\nconst code_points = [[0, 65535]];\nconst accent_pat = '[\\u0300-\\u036F\\u{b7}\\u{2be}\\u{2bc}]';\n/** @type {TUnicodeMap} */\n\nlet unicode_map;\n/** @type {RegExp} */\n\nlet multi_char_reg;\nconst max_char_length = 3;\n/** @type {TUnicodeMap} */\n\nconst latin_convert = {};\n/** @type {TUnicodeMap} */\n\nconst latin_condensed = {\n  '/': '⁄∕',\n  '0': '߀',\n  \"a\": \"ⱥɐɑ\",\n  \"aa\": \"ꜳ\",\n  \"ae\": \"æǽǣ\",\n  \"ao\": \"ꜵ\",\n  \"au\": \"ꜷ\",\n  \"av\": \"ꜹꜻ\",\n  \"ay\": \"ꜽ\",\n  \"b\": \"ƀɓƃ\",\n  \"c\": \"ꜿƈȼↄ\",\n  \"d\": \"đɗɖᴅƌꮷԁɦ\",\n  \"e\": \"ɛǝᴇɇ\",\n  \"f\": \"ꝼƒ\",\n  \"g\": \"ǥɠꞡᵹꝿɢ\",\n  \"h\": \"ħⱨⱶɥ\",\n  \"i\": \"ɨı\",\n  \"j\": \"ɉȷ\",\n  \"k\": \"ƙⱪꝁꝃꝅꞣ\",\n  \"l\": \"łƚɫⱡꝉꝇꞁɭ\",\n  \"m\": \"ɱɯϻ\",\n  \"n\": \"ꞥƞɲꞑᴎлԉ\",\n  \"o\": \"øǿɔɵꝋꝍᴑ\",\n  \"oe\": \"œ\",\n  \"oi\": \"ƣ\",\n  \"oo\": \"ꝏ\",\n  \"ou\": \"ȣ\",\n  \"p\": \"ƥᵽꝑꝓꝕρ\",\n  \"q\": \"ꝗꝙɋ\",\n  \"r\": \"ɍɽꝛꞧꞃ\",\n  \"s\": \"ßȿꞩꞅʂ\",\n  \"t\": \"ŧƭʈⱦꞇ\",\n  \"th\": \"þ\",\n  \"tz\": \"ꜩ\",\n  \"u\": \"ʉ\",\n  \"v\": \"ʋꝟʌ\",\n  \"vy\": \"ꝡ\",\n  \"w\": \"ⱳ\",\n  \"y\": \"ƴɏỿ\",\n  \"z\": \"ƶȥɀⱬꝣ\",\n  \"hv\": \"ƕ\"\n};\n\nfor (let latin in latin_condensed) {\n  let unicode = latin_condensed[latin] || '';\n\n  for (let i = 0; i < unicode.length; i++) {\n    let char = unicode.substring(i, i + 1);\n    latin_convert[char] = latin;\n  }\n}\n\nconst convert_pat = new RegExp(Object.keys(latin_convert).join('|') + '|' + accent_pat, 'gu');\n/**\n * Initialize the unicode_map from the give code point ranges\n *\n * @param {TCodePoints=} _code_points\n */\n\nconst initialize = _code_points => {\n  if (unicode_map !== undefined) return;\n  unicode_map = generateMap(_code_points || code_points);\n};\n/**\n * Helper method for normalize a string\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize\n * @param {string} str\n * @param {string} form\n */\n\nconst normalize = (str, form = 'NFKD') => str.normalize(form);\n/**\n * Remove accents without reordering string\n * calling str.normalize('NFKD') on \\u{594}\\u{595}\\u{596} becomes \\u{596}\\u{594}\\u{595}\n * via https://github.com/krisk/Fuse/issues/133#issuecomment-318692703\n * @param {string} str\n * @return {string}\n */\n\nconst asciifold = str => {\n  return toArray(str).reduce(\n  /**\n   * @param {string} result\n   * @param {string} char\n   */\n  (result, char) => {\n    return result + _asciifold(char);\n  }, '');\n};\n/**\n * @param {string} str\n * @return {string}\n */\n\nconst _asciifold = str => {\n  str = normalize(str).toLowerCase().replace(convert_pat, (\n  /** @type {string} */\n  char) => {\n    return latin_convert[char] || '';\n  }); //return str;\n\n  return normalize(str, 'NFC');\n};\n/**\n * Generate a list of unicode variants from the list of code points\n * @param {TCodePoints} code_points\n * @yield {TCodePointObj}\n */\n\nfunction* generator(code_points) {\n  for (const [code_point_min, code_point_max] of code_points) {\n    for (let i = code_point_min; i <= code_point_max; i++) {\n      let composed = String.fromCharCode(i);\n      let folded = asciifold(composed);\n\n      if (folded == composed.toLowerCase()) {\n        continue;\n      } // skip when folded is a string longer than 3 characters long\n      // bc the resulting regex patterns will be long\n      // eg:\n      // folded صلى الله عليه وسلم length 18 code point 65018\n      // folded جل جلاله length 8 code point 65019\n\n\n      if (folded.length > max_char_length) {\n        continue;\n      }\n\n      if (folded.length == 0) {\n        continue;\n      }\n\n      yield {\n        folded: folded,\n        composed: composed,\n        code_point: i\n      };\n    }\n  }\n}\n/**\n * Generate a unicode map from the list of code points\n * @param {TCodePoints} code_points\n * @return {TUnicodeSets}\n */\n\nconst generateSets = code_points => {\n  /** @type {{[key:string]:Set<string>}} */\n  const unicode_sets = {};\n  /**\n   * @param {string} folded\n   * @param {string} to_add\n   */\n\n  const addMatching = (folded, to_add) => {\n    /** @type {Set<string>} */\n    const folded_set = unicode_sets[folded] || new Set();\n    const patt = new RegExp('^' + setToPattern(folded_set) + '$', 'iu');\n\n    if (to_add.match(patt)) {\n      return;\n    }\n\n    folded_set.add(escape_regex(to_add));\n    unicode_sets[folded] = folded_set;\n  };\n\n  for (let value of generator(code_points)) {\n    addMatching(value.folded, value.folded);\n    addMatching(value.folded, value.composed);\n  }\n\n  return unicode_sets;\n};\n/**\n * Generate a unicode map from the list of code points\n * ae => (?:(?:ae|Æ|Ǽ|Ǣ)|(?:A|Ⓐ|Ａ...)(?:E|ɛ|Ⓔ...))\n *\n * @param {TCodePoints} code_points\n * @return {TUnicodeMap}\n */\n\nconst generateMap = code_points => {\n  /** @type {TUnicodeSets} */\n  const unicode_sets = generateSets(code_points);\n  /** @type {TUnicodeMap} */\n\n  const unicode_map = {};\n  /** @type {string[]} */\n\n  let multi_char = [];\n\n  for (let folded in unicode_sets) {\n    let set = unicode_sets[folded];\n\n    if (set) {\n      unicode_map[folded] = setToPattern(set);\n    }\n\n    if (folded.length > 1) {\n      multi_char.push(escape_regex(folded));\n    }\n  }\n\n  multi_char.sort((a, b) => b.length - a.length);\n  const multi_char_patt = arrayToPattern(multi_char);\n  multi_char_reg = new RegExp('^' + multi_char_patt, 'u');\n  return unicode_map;\n};\n/**\n * Map each element of an array from it's folded value to all possible unicode matches\n * @param {string[]} strings\n * @param {number} min_replacement\n * @return {string}\n */\n\nconst mapSequence = (strings, min_replacement = 1) => {\n  let chars_replaced = 0;\n  strings = strings.map(str => {\n    if (unicode_map[str]) {\n      chars_replaced += str.length;\n    }\n\n    return unicode_map[str] || str;\n  });\n\n  if (chars_replaced >= min_replacement) {\n    return sequencePattern(strings);\n  }\n\n  return '';\n};\n/**\n * Convert a short string and split it into all possible patterns\n * Keep a pattern only if min_replacement is met\n *\n * 'abc'\n * \t\t=> [['abc'],['ab','c'],['a','bc'],['a','b','c']]\n *\t\t=> ['abc-pattern','ab-c-pattern'...]\n *\n *\n * @param {string} str\n * @param {number} min_replacement\n * @return {string}\n */\n\nconst substringsToPattern = (str, min_replacement = 1) => {\n  min_replacement = Math.max(min_replacement, str.length - 1);\n  return arrayToPattern(allSubstrings(str).map(sub_pat => {\n    return mapSequence(sub_pat, min_replacement);\n  }));\n};\n/**\n * Convert an array of sequences into a pattern\n * [{start:0,end:3,length:3,substr:'iii'}...] => (?:iii...)\n *\n * @param {Sequence[]} sequences\n * @param {boolean} all\n */\n\nconst sequencesToPattern = (sequences, all = true) => {\n  let min_replacement = sequences.length > 1 ? 1 : 0;\n  return arrayToPattern(sequences.map(sequence => {\n    let seq = [];\n    const len = all ? sequence.length() : sequence.length() - 1;\n\n    for (let j = 0; j < len; j++) {\n      seq.push(substringsToPattern(sequence.substrs[j] || '', min_replacement));\n    }\n\n    return sequencePattern(seq);\n  }));\n};\n/**\n * Return true if the sequence is already in the sequences\n * @param {Sequence} needle_seq\n * @param {Sequence[]} sequences\n */\n\n\nconst inSequences = (needle_seq, sequences) => {\n  for (const seq of sequences) {\n    if (seq.start != needle_seq.start || seq.end != needle_seq.end) {\n      continue;\n    }\n\n    if (seq.substrs.join('') !== needle_seq.substrs.join('')) {\n      continue;\n    }\n\n    let needle_parts = needle_seq.parts;\n    /**\n     * @param {TSequencePart} part\n     */\n\n    const filter = part => {\n      for (const needle_part of needle_parts) {\n        if (needle_part.start === part.start && needle_part.substr === part.substr) {\n          return false;\n        }\n\n        if (part.length == 1 || needle_part.length == 1) {\n          continue;\n        } // check for overlapping parts\n        // a = ['::=','==']\n        // b = ['::','===']\n        // a = ['r','sm']\n        // b = ['rs','m']\n\n\n        if (part.start < needle_part.start && part.end > needle_part.start) {\n          return true;\n        }\n\n        if (needle_part.start < part.start && needle_part.end > part.start) {\n          return true;\n        }\n      }\n\n      return false;\n    };\n\n    let filtered = seq.parts.filter(filter);\n\n    if (filtered.length > 0) {\n      continue;\n    }\n\n    return true;\n  }\n\n  return false;\n};\n\nclass Sequence {\n  constructor() {\n    /** @type {TSequencePart[]} */\n    this.parts = [];\n    /** @type {string[]} */\n\n    this.substrs = [];\n    this.start = 0;\n    this.end = 0;\n  }\n  /**\n   * @param {TSequencePart|undefined} part\n   */\n\n\n  add(part) {\n    if (part) {\n      this.parts.push(part);\n      this.substrs.push(part.substr);\n      this.start = Math.min(part.start, this.start);\n      this.end = Math.max(part.end, this.end);\n    }\n  }\n\n  last() {\n    return this.parts[this.parts.length - 1];\n  }\n\n  length() {\n    return this.parts.length;\n  }\n  /**\n   * @param {number} position\n   * @param {TSequencePart} last_piece\n   */\n\n\n  clone(position, last_piece) {\n    let clone = new Sequence();\n    let parts = JSON.parse(JSON.stringify(this.parts));\n    let last_part = parts.pop();\n\n    for (const part of parts) {\n      clone.add(part);\n    }\n\n    let last_substr = last_piece.substr.substring(0, position - last_part.start);\n    let clone_last_len = last_substr.length;\n    clone.add({\n      start: last_part.start,\n      end: last_part.start + clone_last_len,\n      length: clone_last_len,\n      substr: last_substr\n    });\n    return clone;\n  }\n\n}\n/**\n * Expand a regular expression pattern to include unicode variants\n * \teg /a/ becomes /aⓐａẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐɑAⒶＡÀÁÂẦẤẪẨÃĀĂẰẮẴẲȦǠÄǞẢÅǺǍȀȂẠẬẶḀĄȺⱯ/\n *\n * Issue:\n *  ﺊﺋ [ 'ﺊ = \\\\u{fe8a}', 'ﺋ = \\\\u{fe8b}' ]\n *\tbecomes:\tئئ [ 'ي = \\\\u{64a}', 'ٔ = \\\\u{654}', 'ي = \\\\u{64a}', 'ٔ = \\\\u{654}' ]\n *\n *\tİĲ = IIJ = ⅡJ\n *\n * \t1/2/4\n *\n * @param {string} str\n * @return {string|undefined}\n */\n\n\nconst getPattern = str => {\n  initialize();\n  str = asciifold(str);\n  let pattern = '';\n  let sequences = [new Sequence()];\n\n  for (let i = 0; i < str.length; i++) {\n    let substr = str.substring(i);\n    let match = substr.match(multi_char_reg);\n    const char = str.substring(i, i + 1);\n    const match_str = match ? match[0] : null; // loop through sequences\n    // add either the char or multi_match\n\n    let overlapping = [];\n    let added_types = new Set();\n\n    for (const sequence of sequences) {\n      const last_piece = sequence.last();\n\n      if (!last_piece || last_piece.length == 1 || last_piece.end <= i) {\n        // if we have a multi match\n        if (match_str) {\n          const len = match_str.length;\n          sequence.add({\n            start: i,\n            end: i + len,\n            length: len,\n            substr: match_str\n          });\n          added_types.add('1');\n        } else {\n          sequence.add({\n            start: i,\n            end: i + 1,\n            length: 1,\n            substr: char\n          });\n          added_types.add('2');\n        }\n      } else if (match_str) {\n        let clone = sequence.clone(i, last_piece);\n        const len = match_str.length;\n        clone.add({\n          start: i,\n          end: i + len,\n          length: len,\n          substr: match_str\n        });\n        overlapping.push(clone);\n      } else {\n        // don't add char\n        // adding would create invalid patterns: 234 => [2,34,4]\n        added_types.add('3');\n      }\n    } // if we have overlapping\n\n\n    if (overlapping.length > 0) {\n      // ['ii','iii'] before ['i','i','iii']\n      overlapping = overlapping.sort((a, b) => {\n        return a.length() - b.length();\n      });\n\n      for (let clone of overlapping) {\n        // don't add if we already have an equivalent sequence\n        if (inSequences(clone, sequences)) {\n          continue;\n        }\n\n        sequences.push(clone);\n      }\n\n      continue;\n    } // if we haven't done anything unique\n    // clean up the patterns\n    // helps keep patterns smaller\n    // if str = 'r₨㎧aarss', pattern will be 446 instead of 655\n\n\n    if (i > 0 && added_types.size == 1 && !added_types.has('3')) {\n      pattern += sequencesToPattern(sequences, false);\n      let new_seq = new Sequence();\n      const old_seq = sequences[0];\n\n      if (old_seq) {\n        new_seq.add(old_seq.last());\n      }\n\n      sequences = [new_seq];\n    }\n  }\n\n  pattern += sequencesToPattern(sequences, true);\n  return pattern;\n};\n\nexport { _asciifold, asciifold, code_points, generateMap, generateSets, generator, getPattern, initialize, mapSequence, normalize, substringsToPattern, unicode_map };\n//# sourceMappingURL=index.js.map\n", "/*! sifter.js | https://github.com/orchidjs/sifter.js | Apache License (v2) */\nimport { asciifold } from '@orchidjs/unicode-variants';\n\n/**\n * A property getter resolving dot-notation\n * @param  {Object}  obj     The root object to fetch property on\n * @param  {String}  name    The optionally dotted property name to fetch\n * @return {Object}          The resolved property value\n */\nconst getAttr = (obj, name) => {\n  if (!obj) return;\n  return obj[name];\n};\n/**\n * A property getter resolving dot-notation\n * @param  {Object}  obj     The root object to fetch property on\n * @param  {String}  name    The optionally dotted property name to fetch\n * @return {Object}          The resolved property value\n */\n\nconst getAttrNesting = (obj, name) => {\n  if (!obj) return;\n  var part,\n      names = name.split(\".\");\n\n  while ((part = names.shift()) && (obj = obj[part]));\n\n  return obj;\n};\n/**\n * Calculates how close of a match the\n * given value is against a search token.\n *\n */\n\nconst scoreValue = (value, token, weight) => {\n  var score, pos;\n  if (!value) return 0;\n  value = value + '';\n  if (token.regex == null) return 0;\n  pos = value.search(token.regex);\n  if (pos === -1) return 0;\n  score = token.string.length / value.length;\n  if (pos === 0) score += 0.5;\n  return score * weight;\n};\n/**\n * Cast object property to an array if it exists and has a value\n *\n */\n\nconst propToArray = (obj, key) => {\n  var value = obj[key];\n  if (typeof value == 'function') return value;\n\n  if (value && !Array.isArray(value)) {\n    obj[key] = [value];\n  }\n};\n/**\n * Iterates over arrays and hashes.\n *\n * ```\n * iterate(this.items, function(item, id) {\n *    // invoked for each item\n * });\n * ```\n *\n */\n\nconst iterate = (object, callback) => {\n  if (Array.isArray(object)) {\n    object.forEach(callback);\n  } else {\n    for (var key in object) {\n      if (object.hasOwnProperty(key)) {\n        callback(object[key], key);\n      }\n    }\n  }\n};\nconst cmp = (a, b) => {\n  if (typeof a === 'number' && typeof b === 'number') {\n    return a > b ? 1 : a < b ? -1 : 0;\n  }\n\n  a = asciifold(a + '').toLowerCase();\n  b = asciifold(b + '').toLowerCase();\n  if (a > b) return 1;\n  if (b > a) return -1;\n  return 0;\n};\n\nexport { cmp, getAttr, getAttrNesting, iterate, propToArray, scoreValue };\n//# sourceMappingURL=utils.js.map\n", "/*! sifter.js | https://github.com/orchidjs/sifter.js | Apache License (v2) */\nimport { iterate, cmp, propToArray, getAttrNesting, getAttr, scoreValue } from './utils.js';\nexport { cmp, getAttr, getAttrNesting, iterate, propToArray, scoreValue } from './utils.js';\nimport { escape_regex, getPattern } from '@orchidjs/unicode-variants';\nexport { getPattern } from '@orchidjs/unicode-variants';\n\n/**\n * sifter.js\n * Copyright (c) 2013–2020 Brian Reavis & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n */\n\nclass Sifter {\n  // []|{};\n\n  /**\n   * Textually searches arrays and hashes of objects\n   * by property (or multiple properties). Designed\n   * specifically for autocomplete.\n   *\n   */\n  constructor(items, settings) {\n    this.items = void 0;\n    this.settings = void 0;\n    this.items = items;\n    this.settings = settings || {\n      diacritics: true\n    };\n  }\n\n  /**\n   * Splits a search string into an array of individual\n   * regexps to be used to match results.\n   *\n   */\n  tokenize(query, respect_word_boundaries, weights) {\n    if (!query || !query.length) return [];\n    const tokens = [];\n    const words = query.split(/\\s+/);\n    var field_regex;\n\n    if (weights) {\n      field_regex = new RegExp('^(' + Object.keys(weights).map(escape_regex).join('|') + ')\\:(.*)$');\n    }\n\n    words.forEach(word => {\n      let field_match;\n      let field = null;\n      let regex = null; // look for \"field:query\" tokens\n\n      if (field_regex && (field_match = word.match(field_regex))) {\n        field = field_match[1];\n        word = field_match[2];\n      }\n\n      if (word.length > 0) {\n        if (this.settings.diacritics) {\n          regex = getPattern(word) || null;\n        } else {\n          regex = escape_regex(word);\n        }\n\n        if (regex && respect_word_boundaries) regex = \"\\\\b\" + regex;\n      }\n\n      tokens.push({\n        string: word,\n        regex: regex ? new RegExp(regex, 'iu') : null,\n        field: field\n      });\n    });\n    return tokens;\n  }\n\n  /**\n   * Returns a function to be used to score individual results.\n   *\n   * Good matches will have a higher score than poor matches.\n   * If an item is not a match, 0 will be returned by the function.\n   *\n   * @returns {T.ScoreFn}\n   */\n  getScoreFunction(query, options) {\n    var search = this.prepareSearch(query, options);\n    return this._getScoreFunction(search);\n  }\n  /**\n   * @returns {T.ScoreFn}\n   *\n   */\n\n\n  _getScoreFunction(search) {\n    const tokens = search.tokens,\n          token_count = tokens.length;\n\n    if (!token_count) {\n      return function () {\n        return 0;\n      };\n    }\n\n    const fields = search.options.fields,\n          weights = search.weights,\n          field_count = fields.length,\n          getAttrFn = search.getAttrFn;\n\n    if (!field_count) {\n      return function () {\n        return 1;\n      };\n    }\n    /**\n     * Calculates the score of an object\n     * against the search query.\n     *\n     */\n\n\n    const scoreObject = function () {\n      if (field_count === 1) {\n        return function (token, data) {\n          const field = fields[0].field;\n          return scoreValue(getAttrFn(data, field), token, weights[field] || 1);\n        };\n      }\n\n      return function (token, data) {\n        var sum = 0; // is the token specific to a field?\n\n        if (token.field) {\n          const value = getAttrFn(data, token.field);\n\n          if (!token.regex && value) {\n            sum += 1 / field_count;\n          } else {\n            sum += scoreValue(value, token, 1);\n          }\n        } else {\n          iterate(weights, (weight, field) => {\n            sum += scoreValue(getAttrFn(data, field), token, weight);\n          });\n        }\n\n        return sum / field_count;\n      };\n    }();\n\n    if (token_count === 1) {\n      return function (data) {\n        return scoreObject(tokens[0], data);\n      };\n    }\n\n    if (search.options.conjunction === 'and') {\n      return function (data) {\n        var score,\n            sum = 0;\n\n        for (let token of tokens) {\n          score = scoreObject(token, data);\n          if (score <= 0) return 0;\n          sum += score;\n        }\n\n        return sum / token_count;\n      };\n    } else {\n      return function (data) {\n        var sum = 0;\n        iterate(tokens, token => {\n          sum += scoreObject(token, data);\n        });\n        return sum / token_count;\n      };\n    }\n  }\n\n  /**\n   * Returns a function that can be used to compare two\n   * results, for sorting purposes. If no sorting should\n   * be performed, `null` will be returned.\n   *\n   * @return function(a,b)\n   */\n  getSortFunction(query, options) {\n    var search = this.prepareSearch(query, options);\n    return this._getSortFunction(search);\n  }\n\n  _getSortFunction(search) {\n    var implicit_score,\n        sort_flds = [];\n    const self = this,\n          options = search.options,\n          sort = !search.query && options.sort_empty ? options.sort_empty : options.sort;\n\n    if (typeof sort == 'function') {\n      return sort.bind(this);\n    }\n    /**\n     * Fetches the specified sort field value\n     * from a search result item.\n     *\n     */\n\n\n    const get_field = function get_field(name, result) {\n      if (name === '$score') return result.score;\n      return search.getAttrFn(self.items[result.id], name);\n    }; // parse options\n\n\n    if (sort) {\n      for (let s of sort) {\n        if (search.query || s.field !== '$score') {\n          sort_flds.push(s);\n        }\n      }\n    } // the \"$score\" field is implied to be the primary\n    // sort field, unless it's manually specified\n\n\n    if (search.query) {\n      implicit_score = true;\n\n      for (let fld of sort_flds) {\n        if (fld.field === '$score') {\n          implicit_score = false;\n          break;\n        }\n      }\n\n      if (implicit_score) {\n        sort_flds.unshift({\n          field: '$score',\n          direction: 'desc'\n        });\n      } // without a search.query, all items will have the same score\n\n    } else {\n      sort_flds = sort_flds.filter(fld => fld.field !== '$score');\n    } // build function\n\n\n    const sort_flds_count = sort_flds.length;\n\n    if (!sort_flds_count) {\n      return null;\n    }\n\n    return function (a, b) {\n      var result, field;\n\n      for (let sort_fld of sort_flds) {\n        field = sort_fld.field;\n        let multiplier = sort_fld.direction === 'desc' ? -1 : 1;\n        result = multiplier * cmp(get_field(field, a), get_field(field, b));\n        if (result) return result;\n      }\n\n      return 0;\n    };\n  }\n\n  /**\n   * Parses a search query and returns an object\n   * with tokens and fields ready to be populated\n   * with results.\n   *\n   */\n  prepareSearch(query, optsUser) {\n    const weights = {};\n    var options = Object.assign({}, optsUser);\n    propToArray(options, 'sort');\n    propToArray(options, 'sort_empty'); // convert fields to new format\n\n    if (options.fields) {\n      propToArray(options, 'fields');\n      const fields = [];\n      options.fields.forEach(field => {\n        if (typeof field == 'string') {\n          field = {\n            field: field,\n            weight: 1\n          };\n        }\n\n        fields.push(field);\n        weights[field.field] = 'weight' in field ? field.weight : 1;\n      });\n      options.fields = fields;\n    }\n\n    return {\n      options: options,\n      query: query.toLowerCase().trim(),\n      tokens: this.tokenize(query, options.respect_word_boundaries, weights),\n      total: 0,\n      items: [],\n      weights: weights,\n      getAttrFn: options.nesting ? getAttrNesting : getAttr\n    };\n  }\n\n  /**\n   * Searches through all items and returns a sorted array of matches.\n   *\n   */\n  search(query, options) {\n    var self = this,\n        score,\n        search;\n    search = this.prepareSearch(query, options);\n    options = search.options;\n    query = search.query; // generate result scoring function\n\n    const fn_score = options.score || self._getScoreFunction(search); // perform search and sort\n\n\n    if (query.length) {\n      iterate(self.items, (item, id) => {\n        score = fn_score(item);\n\n        if (options.filter === false || score > 0) {\n          search.items.push({\n            'score': score,\n            'id': id\n          });\n        }\n      });\n    } else {\n      iterate(self.items, (_, id) => {\n        search.items.push({\n          'score': 1,\n          'id': id\n        });\n      });\n    }\n\n    const fn_sort = self._getSortFunction(search);\n\n    if (fn_sort) search.items.sort(fn_sort); // apply limits\n\n    search.total = search.items.length;\n\n    if (typeof options.limit === 'number') {\n      search.items = search.items.slice(0, options.limit);\n    }\n\n    return search;\n  }\n\n}\n\nexport { Sifter };\n//# sourceMappingURL=sifter.js.map\n", "\nimport { asciifold } from '@orchidjs/unicode-variants';\nimport * as T from './types';\n\n\n/**\n * A property getter resolving dot-notation\n * @param  {Object}  obj     The root object to fetch property on\n * @param  {String}  name    The optionally dotted property name to fetch\n * @return {Object}          The resolved property value\n */\nexport const getAttr = (obj:{[key:string]:any}, name:string ) => {\n    if (!obj ) return;\n    return obj[name];\n};\n\n/**\n * A property getter resolving dot-notation\n * @param  {Object}  obj     The root object to fetch property on\n * @param  {String}  name    The optionally dotted property name to fetch\n * @return {Object}          The resolved property value\n */\nexport const getAttrNesting = (obj:{[key:string]:any}, name:string ) => {\n    if (!obj ) return;\n    var part, names = name.split(\".\");\n\twhile( (part = names.shift()) && (obj = obj[part]));\n    return obj;\n};\n\n/**\n * Calculates how close of a match the\n * given value is against a search token.\n *\n */\nexport const scoreValue = (value:string, token:T.Token, weight:number ):number => {\n\tvar score, pos;\n\n\tif (!value) return 0;\n\n\tvalue = value + '';\n\tif( token.regex == null ) return 0;\n\tpos = value.search(token.regex);\n\tif (pos === -1) return 0;\n\n\tscore = token.string.length / value.length;\n\tif (pos === 0) score += 0.5;\n\n\treturn score * weight;\n};\n\n\n/**\n * Cast object property to an array if it exists and has a value\n *\n */\nexport const propToArray = (obj:{[key:string]:any}, key:string) => {\n\tvar value = obj[key];\n\n\tif( typeof value == 'function' ) return value;\n\n\tif( value && !Array.isArray(value) ){\n\t\tobj[key] = [value];\n\t}\n}\n\n\n/**\n * Iterates over arrays and hashes.\n *\n * ```\n * iterate(this.items, function(item, id) {\n *    // invoked for each item\n * });\n * ```\n *\n */\nexport const iterate = (object:[]|{[key:string]:any}, callback:(value:any,key:any)=>any) => {\n\n\tif ( Array.isArray(object)) {\n\t\tobject.forEach(callback);\n\n\t}else{\n\n\t\tfor (var key in object) {\n\t\t\tif (object.hasOwnProperty(key)) {\n\t\t\t\tcallback(object[key], key);\n\t\t\t}\n\t\t}\n\t}\n};\n\n\n\nexport const cmp = (a:number|string, b:number|string) => {\n\tif (typeof a === 'number' && typeof b === 'number') {\n\t\treturn a > b ? 1 : (a < b ? -1 : 0);\n\t}\n\ta = asciifold(a + '').toLowerCase();\n\tb = asciifold(b + '').toLowerCase();\n\tif (a > b) return 1;\n\tif (b > a) return -1;\n\treturn 0;\n};\n", "\nimport { iterate } from '@orchidjs/sifter/lib/utils';\n\n/**\n * Return a dom element from either a dom query string, jQuery object, a dom element or html string\n * https://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-built-in-dom-methods-or-pro/35385518#35385518\n *\n * param query should be {}\n */\nexport const getDom = ( query:any ):HTMLElement => {\n\n\tif( query.jquery ){\n\t\treturn query[0];\n\t}\n\n\tif( query instanceof HTMLElement ){\n\t\treturn query;\n\t}\n\n\tif( isHtmlString(query) ){\n\t\tvar tpl = document.createElement('template');\n\t\ttpl.innerHTML = query.trim(); // Never return a text node of whitespace as the result\n\t\treturn tpl.content.firstChild as HTMLElement;\n\t}\n\n\treturn document.querySelector(query);\n};\n\nexport const isHtmlString = (arg:any): boolean => {\n\tif( typeof arg === 'string' && arg.indexOf('<') > -1 ){\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport const escapeQuery = (query:string):string => {\n\treturn query.replace(/['\"\\\\]/g, '\\\\$&');\n}\n\n/**\n * Dispatch an event\n *\n */\nexport const triggerEvent = ( dom_el:HTMLElement, event_name:string ):void => {\n\tvar event = document.createEvent('HTMLEvents');\n\tevent.initEvent(event_name, true, false);\n\tdom_el.dispatchEvent(event)\n};\n\n/**\n * Apply CSS rules to a dom element\n *\n */\nexport const applyCSS = ( dom_el:HTMLElement, css:{ [key: string]: string|number }):void => {\n\tObject.assign(dom_el.style, css);\n}\n\n\n/**\n * Add css classes\n *\n */\nexport const addClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n\tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map( cls => {\n\t\t\tel.classList.add( cls );\n\t\t});\n\t});\n}\n\n/**\n * Remove css classes\n *\n */\n export const removeClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n \tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map(cls => {\n\t \t\tel.classList.remove( cls );\n\t\t});\n \t});\n }\n\n\n/**\n * Return arguments\n *\n */\nexport const classesArray = (args:string[]|string[][]):string[] => {\n\tvar classes:string[] = [];\n\titerate( args, (_classes) =>{\n\t\tif( typeof _classes === 'string' ){\n\t\t\t_classes = _classes.trim().split(/[\\11\\12\\14\\15\\40]/);\n\t\t}\n\t\tif( Array.isArray(_classes) ){\n\t\t\tclasses = classes.concat(_classes);\n\t\t}\n\t});\n\n\treturn classes.filter(Boolean);\n}\n\n\n/**\n * Create an array from arg if it's not already an array\n *\n */\nexport const castAsArray = (arg:any):Array<any> => {\n\tif( !Array.isArray(arg) ){\n \t\targ = [arg];\n \t}\n\treturn arg;\n}\n\n\n/**\n * Get the closest node to the evt.target matching the selector\n * Stops at wrapper\n *\n */\nexport const parentMatch = ( target:null|HTMLElement, selector:string, wrapper?:HTMLElement ):HTMLElement|void => {\n\n\tif( wrapper && !wrapper.contains(target) ){\n\t\treturn;\n\t}\n\n\twhile( target && target.matches ){\n\n\t\tif( target.matches(selector) ){\n\t\t\treturn target;\n\t\t}\n\n\t\ttarget = target.parentNode as HTMLElement;\n\t}\n}\n\n\n/**\n * Get the first or last item from an array\n *\n * > 0 - right (last)\n * <= 0 - left (first)\n *\n */\nexport const getTail = ( list:Array<any>|NodeList, direction:number=0 ):any => {\n\n\tif( direction > 0 ){\n\t\treturn list[list.length-1];\n\t}\n\n\treturn list[0];\n}\n\n/**\n * Return true if an object is empty\n *\n */\nexport const isEmptyObject = (obj:object):boolean => {\n\treturn (Object.keys(obj).length === 0);\n}\n\n\n/**\n * Get the index of an element amongst sibling nodes of the same type\n *\n */\nexport const nodeIndex = ( el:null|Element, amongst?:string ):number => {\n\tif (!el) return -1;\n\n\tamongst = amongst || el.nodeName;\n\n\tvar i = 0;\n\twhile( el = el.previousElementSibling ){\n\n\t\tif( el.matches(amongst) ){\n\t\t\ti++;\n\t\t}\n\t}\n\treturn i;\n}\n\n\n/**\n * Set attributes of an element\n *\n */\nexport const setAttr = (el:Element,attrs:{ [key: string]: null|string|number }) => {\n\titerate( attrs,(val,attr) => {\n\t\tif( val == null ){\n\t\t\tel.removeAttribute(attr as string);\n\t\t}else{\n\t\t\tel.setAttribute(attr as string, ''+val);\n\t\t}\n\t});\n}\n\n\n/**\n * Replace a node\n */\nexport const replaceNode = ( existing:Node, replacement:Node ) => {\n\tif( existing.parentNode ) existing.parentNode.replaceChild(replacement, existing);\n}\n", "/**\n * highlight v3 | MIT license | Johann Burkard <jb@eaio.com>\n * Highlights arbitrary terms in a node.\n *\n * - Modified by Marshal <beatgates@gmail.com> 2011-6-24 (added regex)\n * - Modified by Brian Reavis <brian@thirdroute.com> 2012-8-27 (cleanup)\n */\n\nimport {replaceNode} from '../vanilla';\n\n\nexport const highlight = (element:HTMLElement, regex:string|RegExp) => {\n\n\tif( regex === null ) return;\n\n\t// convet string to regex\n\tif( typeof regex === 'string' ){\n\n\t\tif( !regex.length ) return;\n\t\tregex = new RegExp(regex, 'i');\n\t}\n\n\n\t// Wrap matching part of text node with highlighting <span>, e.g.\n\t// Soccer  ->  <span class=\"highlight\">Soc</span>cer  for regex = /soc/i\n\tconst highlightText = ( node:Text ):number => {\n\n\t\tvar match = node.data.match(regex);\n\t\tif( match && node.data.length > 0 ){\n\t\t\tvar spannode\t\t= document.createElement('span');\n\t\t\tspannode.className\t= 'highlight';\n\t\t\tvar middlebit\t\t= node.splitText(match.index as number);\n\n\t\t\tmiddlebit.splitText(match[0]!.length);\n\t\t\tvar middleclone\t\t= middlebit.cloneNode(true);\n\n\t\t\tspannode.appendChild(middleclone);\n\t\t\treplaceNode(middlebit, spannode);\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn 0;\n\t};\n\n\t// Recurse element node, looking for child text nodes to highlight, unless element\n\t// is childless, <script>, <style>, or already highlighted: <span class=\"hightlight\">\n\tconst highlightChildren = ( node:Element ):void => {\n\t\tif( node.nodeType === 1 && node.childNodes && !/(script|style)/i.test(node.tagName) && ( node.className !== 'highlight' || node.tagName !== 'SPAN' ) ){\n\t\t\tArray.from(node.childNodes).forEach(element => {\n\t\t\t\thighlightRecursive(element);\n\t\t\t});\n\t\t}\n\t};\n\n\n\tconst highlightRecursive = ( node:Node|Element ):number => {\n\n\t\tif( node.nodeType === 3 ){\n\t\t\treturn highlightText(node as Text);\n\t\t}\n\n\t\thighlightChildren(node as Element);\n\n\t\treturn 0;\n\t};\n\n\thighlightRecursive( element );\n};\n\n/**\n * removeHighlight fn copied from highlight v5 and\n * edited to remove with(), pass js strict mode, and use without jquery\n */\nexport const removeHighlight = (el:HTMLElement) => {\n\tvar elements = el.querySelectorAll(\"span.highlight\");\n\tArray.prototype.forEach.call(elements, function(el:HTMLElement){\n\t\tvar parent = el.parentNode as Node;\n\t\tparent.replaceChild(el.firstChild as Node, el);\n\t\tparent.normalize();\n\t});\n};\n", "export const KEY_A\t\t\t\t= 65;\nexport const KEY_RETURN\t\t\t= 13;\nexport const KEY_ESC\t\t\t= 27;\nexport const KEY_LEFT\t\t\t= 37;\nexport const KEY_UP\t\t\t\t= 38;\nexport const KEY_RIGHT\t\t\t= 39;\nexport const KEY_DOWN\t\t\t= 40;\nexport const KEY_BACKSPACE\t\t= 8;\nexport const KEY_DELETE\t\t\t= 46;\nexport const KEY_TAB\t\t\t= 9;\n\nexport const IS_MAC      \t\t= typeof navigator === 'undefined' ? false : /Mac/.test(navigator.userAgent);\nexport const KEY_SHORTCUT\t\t= IS_MAC ? 'metaKey' : 'ctrlKey'; // ctrl key or apple key for ma\n", "\nexport default {\n\toptions: [],\n\toptgroups: [],\n\n\tplugins: [],\n\tdelimiter: ',',\n\tsplitOn: null, // regexp or string for splitting up values from a paste command\n\tpersist: true,\n\tdiacritics: true,\n\tcreate: null,\n\tcreateOnBlur: false,\n\tcreateFilter: null,\n\thighlight: true,\n\topenOnFocus: true,\n\tshouldOpen: null,\n\tmaxOptions: 50,\n\tmaxItems: null,\n\thideSelected: null,\n\tduplicates: false,\n\taddPrecedence: false,\n\tselectOnTab: false,\n\tpreload: null,\n\tallowEmptyOption: false,\n\t//closeAfterSelect: false,\n\trefreshThrottle: 300,\n\n\n\tloadThrottle: 300,\n\tloadingClass: 'loading',\n\n\tdataAttr: null, //'data-data',\n\toptgroupField: 'optgroup',\n\tvalueField: 'value',\n\tlabelField: 'text',\n\tdisabledField: 'disabled',\n\toptgroupLabelField: 'label',\n\toptgroupValueField: 'value',\n\tlockOptgroupOrder: false,\n\n\tsortField: '$order',\n\tsearchField: ['text'],\n\tsearchConjunction: 'and',\n\n\tmode: null,\n\twrapperClass: 'ts-wrapper',\n\tcontrolClass: 'ts-control',\n\tdropdownClass: 'ts-dropdown',\n\tdropdownContentClass: 'ts-dropdown-content',\n\titemClass: 'item',\n\toptionClass: 'option',\n\n\tdropdownParent: null,\n\tcontrolInput: '<input type=\"text\" autocomplete=\"off\" size=\"1\" />',\n\n\tcopyClassesToDropdown: false,\n\n\tplaceholder: null,\n\thidePlaceholder: null,\n\n\tshouldLoad: function(query:string):boolean{\n\t\treturn query.length > 0;\n\t},\n\n\t/*\n\tload                 : null, // function(query, callback) { ... }\n\tscore                : null, // function(search) { ... }\n\tonInitialize         : null, // function() { ... }\n\tonChange             : null, // function(value) { ... }\n\tonItemAdd            : null, // function(value, $item) { ... }\n\tonItemRemove         : null, // function(value) { ... }\n\tonClear              : null, // function() { ... }\n\tonOptionAdd          : null, // function(value, data) { ... }\n\tonOptionRemove       : null, // function(value) { ... }\n\tonOptionClear        : null, // function() { ... }\n\tonOptionGroupAdd     : null, // function(id, data) { ... }\n\tonOptionGroupRemove  : null, // function(id) { ... }\n\tonOptionGroupClear   : null, // function() { ... }\n\tonDropdownOpen       : null, // function(dropdown) { ... }\n\tonDropdownClose      : null, // function(dropdown) { ... }\n\tonType               : null, // function(str) { ... }\n\tonDelete             : null, // function(values) { ... }\n\t*/\n\n\trender: {\n\t\t/*\n\t\titem: null,\n\t\toptgroup: null,\n\t\toptgroup_header: null,\n\t\toption: null,\n\t\toption_create: null\n\t\t*/\n\t}\n};\n", "\nimport TomSelect from './tom-select';\nimport { TomLoadCallback } from './types/index';\n\n\n/**\n * Converts a scalar to its best string representation\n * for hash keys and HTML attribute values.\n *\n * Transformations:\n *   'str'     -> 'str'\n *   null      -> ''\n *   undefined -> ''\n *   true      -> '1'\n *   false     -> '0'\n *   0         -> '0'\n *   1         -> '1'\n *\n */\nexport const hash_key = (value:undefined|null|boolean|string|number):string|null => {\n\tif (typeof value === 'undefined' || value === null) return null;\n\treturn get_hash(value);\n};\n\nexport const get_hash = (value:boolean|string|number):string => {\n\tif (typeof value === 'boolean') return value ? '1' : '0';\n\treturn value + '';\n};\n\n/**\n * Escapes a string for use within HTML.\n *\n */\nexport const escape_html = (str:string):string => {\n\treturn (str + '')\n\t\t.replace(/&/g, '&amp;')\n\t\t.replace(/</g, '&lt;')\n\t\t.replace(/>/g, '&gt;')\n\t\t.replace(/\"/g, '&quot;');\n};\n\n\n/**\n * use setTimeout if timeout > 0 \n */\nexport const timeout = (fn:()=>void,timeout:number) => {\n\tif( timeout > 0 ){\n\t\treturn setTimeout(fn,timeout);\n\t}\n\n\tfn.call(null);\n\treturn null;\n}\n\n/**\n * Debounce the user provided load function\n *\n */\nexport const loadDebounce = (fn:(value:string,callback:TomLoadCallback) => void,delay:number) => {\n\tvar timeout: null|ReturnType<typeof setTimeout>;\n\treturn function(this:TomSelect, value:string,callback:TomLoadCallback) {\n\t\tvar self = this;\n\n\t\tif( timeout ){\n\t\t\tself.loading = Math.max(self.loading - 1, 0);\n\t\t\tclearTimeout(timeout);\n\t\t}\n\t\ttimeout = setTimeout(function() {\n\t\t\ttimeout = null;\n\t\t\tself.loadedSearches[value] = true;\n\t\t\tfn.call(self, value, callback);\n\n\t\t}, delay);\n\t};\n};\n\n\n/**\n * Debounce all fired events types listed in `types`\n * while executing the provided `fn`.\n *\n */\nexport const debounce_events = ( self:TomSelect, types:string[], fn:() => void ) => {\n\tvar type:string;\n\tvar trigger = self.trigger;\n\tvar event_args:{ [key: string]: any } = {};\n\n\t// override trigger method\n\tself.trigger = function(){\n\t\tvar type = arguments[0];\n\t\tif (types.indexOf(type) !== -1) {\n\t\t\tevent_args[type] = arguments;\n\t\t} else {\n\t\t\treturn trigger.apply(self, arguments);\n\t\t}\n\t};\n\n\t// invoke provided function\n\tfn.apply(self, []);\n\tself.trigger = trigger;\n\n\t// trigger queued events\n\tfor( type of types ){\n\t\tif( type in event_args ){\n\t\t\ttrigger.apply(self, event_args[type]);\n\t\t}\n\t}\n};\n\n\n/**\n * Determines the current selection within a text input control.\n * Returns an object containing:\n *   - start\n *   - length\n *\n * Note: \"selectionStart, selectionEnd ... apply only to inputs of types text, search, URL, tel and password\"\n * \t- https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n */\nexport const getSelection = (input:HTMLInputElement):{ start: number; length: number } => {\n\treturn {\n\t\tstart\t: input.selectionStart || 0,\n\t\tlength\t: (input.selectionEnd||0) - (input.selectionStart||0),\n\t};\n};\n\n\n/**\n * Prevent default\n *\n */\nexport const preventDefault = (evt?:Event, stop:boolean=false):void => {\n\tif( evt ){\n\t\tevt.preventDefault();\n\t\tif( stop ){\n\t\t\tevt.stopPropagation();\n\t\t}\n\t}\n}\n\n\n/**\n * Add event helper\n *\n */\nexport const addEvent = (target:EventTarget, type:string, callback:EventListenerOrEventListenerObject, options?:object):void => {\n\ttarget.addEventListener(type,callback,options);\n};\n\n\n/**\n * Return true if the requested key is down\n * Will return false if more than one control character is pressed ( when [ctrl+shift+a] != [ctrl+a] )\n * The current evt may not always set ( eg calling advanceSelection() )\n *\n */\nexport const isKeyDown = ( key_name:keyof (KeyboardEvent|MouseEvent), evt?:KeyboardEvent|MouseEvent ) => {\n\n\tif( !evt ){\n\t\treturn false;\n\t}\n\n\tif( !evt[key_name] ){\n\t\treturn false;\n\t}\n\n\tvar count = (evt.altKey?1:0) + (evt.ctrlKey?1:0) + (evt.shiftKey?1:0) + (evt.metaKey?1:0);\n\n\tif( count === 1 ){\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n\n/**\n * Get the id of an element\n * If the id attribute is not set, set the attribute with the given id\n *\n */\nexport const getId = (el:Element,id:string) => {\n\tconst existing_id = el.getAttribute('id');\n\tif( existing_id ){\n\t\treturn existing_id;\n\t}\n\n\tel.setAttribute('id',id);\n\treturn id;\n};\n\n\n/**\n * Returns a string with backslashes added before characters that need to be escaped.\n */\nexport const addSlashes = (str:string):string => {\n\treturn str.replace(/[\\\\\"']/g, '\\\\$&');\n};\n\n/**\n *\n */\nexport const append = ( parent:Element|DocumentFragment, node: string|Node|null|undefined ):void =>{\n\tif( node ) parent.append(node);\n};\n", "import defaults from './defaults';\nimport { hash_key } from './utils';\nimport { TomOption, TomSettings, RecursivePartial } from './types/index';\nimport { iterate } from '@orchidjs/sifter/lib/utils';\nimport { TomInput } from './types/index';\n\n\nexport default function getSettings( input:TomInput, settings_user:RecursivePartial<TomSettings>):TomSettings{\n\tvar settings:TomSettings\t= Object.assign({}, defaults, settings_user);\n\n\tvar attr_data\t\t\t\t= settings.dataAttr;\n\tvar field_label\t\t\t\t= settings.labelField;\n\tvar field_value\t\t\t\t= settings.valueField;\n\tvar field_disabled\t\t\t= settings.disabledField;\n\tvar field_optgroup\t\t\t= settings.optgroupField;\n\tvar field_optgroup_label\t= settings.optgroupLabelField;\n\tvar field_optgroup_value\t= settings.optgroupValueField;\n\n\tvar tag_name\t\t\t\t= input.tagName.toLowerCase();\n\tvar placeholder\t\t\t\t= input.getAttribute('placeholder') || input.getAttribute('data-placeholder');\n\n\tif (!placeholder && !settings.allowEmptyOption) {\n\t\tlet option\t\t= input.querySelector('option[value=\"\"]');\n\t\tif( option ){\n\t\t\tplaceholder = option.textContent;\n\t\t}\n\n\t}\n\n\tvar settings_element:{\n\t\tplaceholder\t: null|string,\n\t\toptions\t\t: TomOption[],\n\t\toptgroups\t: TomOption[],\n\t\titems\t\t: string[],\n\t\tmaxItems\t: null|number,\n\t} = {\n\t\tplaceholder\t: placeholder,\n\t\toptions\t\t: [],\n\t\toptgroups\t: [],\n\t\titems\t\t: [],\n\t\tmaxItems\t: null,\n\t};\n\n\n\t/**\n\t * Initialize from a <select> element.\n\t *\n\t */\n\tvar init_select = () => {\n\t\tvar tagName;\n\t\tvar options = settings_element.options;\n\t\tvar optionsMap:{[key:string]:any} = {};\n\t\tvar group_count = 1;\n\t\tlet $order = 0;\n\n\t\tvar readData = (el:HTMLElement):TomOption => {\n\n\t\t\tvar data\t= Object.assign({},el.dataset); // get plain object from DOMStringMap\n\t\t\tvar json\t= attr_data && data[attr_data];\n\n\t\t\tif( typeof json === 'string' && json.length ){\n\t\t\t\tdata = Object.assign(data,JSON.parse(json));\n\t\t\t}\n\n\t\t\treturn data;\n\t\t};\n\n\t\tvar addOption = (option:HTMLOptionElement, group?:string) => {\n\n\t\t\tvar value = hash_key(option.value);\n\t\t\tif ( value == null ) return;\n\t\t\tif ( !value && !settings.allowEmptyOption) return;\n\n\t\t\t// if the option already exists, it's probably been\n\t\t\t// duplicated in another optgroup. in this case, push\n\t\t\t// the current group to the \"optgroup\" property on the\n\t\t\t// existing option so that it's rendered in both places.\n\t\t\tif (optionsMap.hasOwnProperty(value)) {\n\t\t\t\tif (group) {\n\t\t\t\t\tvar arr = optionsMap[value][field_optgroup];\n\t\t\t\t\tif (!arr) {\n\t\t\t\t\t\toptionsMap[value][field_optgroup] = group;\n\t\t\t\t\t} else if (!Array.isArray(arr)) {\n\t\t\t\t\t\toptionsMap[value][field_optgroup] = [arr, group];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tarr.push(group);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}else{\n\n\t\t\t\tvar option_data             = readData(option);\n\t\t\t\toption_data[field_label]    = option_data[field_label] || option.textContent;\n\t\t\t\toption_data[field_value]    = option_data[field_value] || value;\n\t\t\t\toption_data[field_disabled] = option_data[field_disabled] || option.disabled;\n\t\t\t\toption_data[field_optgroup] = option_data[field_optgroup] || group;\n\t\t\t\toption_data.$option\t\t\t= option;\n\t\t\t\toption_data.$order\t\t\t= option_data.$order || ++$order;\n\n\t\t\t\toptionsMap[value] = option_data;\n\t\t\t\toptions.push(option_data);\n\t\t\t}\n\n\t\t\tif( option.selected ){\n\t\t\t\tsettings_element.items.push(value);\n\t\t\t}\n\t\t};\n\n\t\tvar addGroup = ( optgroup:HTMLOptGroupElement ) => {\n\t\t\tvar id:string, optgroup_data\n\n\t\t\toptgroup_data\t\t\t\t\t\t\t= readData(optgroup);\n\t\t\toptgroup_data[field_optgroup_label]\t\t= optgroup_data[field_optgroup_label] || optgroup.getAttribute('label') || '';\n\t\t\toptgroup_data[field_optgroup_value]\t\t= optgroup_data[field_optgroup_value] || group_count++;\n\t\t\toptgroup_data[field_disabled]\t\t\t= optgroup_data[field_disabled] || optgroup.disabled;\n\t\t\toptgroup_data.$order\t\t\t\t\t= optgroup_data.$order || ++$order;\n\n\t\t\tsettings_element.optgroups.push(optgroup_data);\n\n\t\t\tid = optgroup_data[field_optgroup_value];\n\n\t\t\titerate(optgroup.children, (option)=>{\n\t\t\t\taddOption(option as HTMLOptionElement, id);\n\t\t\t});\n\n\t\t};\n\n\t\tsettings_element.maxItems = input.hasAttribute('multiple') ? null : 1;\n\n\t\titerate(input.children,(child)=>{\n\t\t\ttagName = child.tagName.toLowerCase();\n\t\t\tif (tagName === 'optgroup') {\n\t\t\t\taddGroup(child as HTMLOptGroupElement);\n\t\t\t} else if (tagName === 'option') {\n\t\t\t\taddOption(child as HTMLOptionElement);\n\t\t\t}\n\t\t});\n\n\t};\n\n\n\t/**\n\t * Initialize from a <input type=\"text\"> element.\n\t *\n\t */\n\tvar init_textbox = () => {\n\t\tconst data_raw = input.getAttribute(attr_data);\n\n\t\tif (!data_raw) {\n\t\t\tvar value = input.value.trim() || '';\n\t\t\tif (!settings.allowEmptyOption && !value.length) return;\n\t\t\tconst values = value.split(settings.delimiter);\n\n\t\t\titerate( values, (value) => {\n\t\t\t\tconst option:TomOption = {};\n\t\t\t\toption[field_label] = value;\n\t\t\t\toption[field_value] = value;\n\t\t\t\tsettings_element.options.push(option);\n\t\t\t});\n\t\t\tsettings_element.items = values;\n\t\t} else {\n\t\t\tsettings_element.options = JSON.parse(data_raw);\n\t\t\titerate( settings_element.options, (opt) => {\n\t\t\t\tsettings_element.items.push(opt[field_value]);\n\t\t\t});\n\t\t}\n\t};\n\n\n\tif (tag_name === 'select') {\n\t\tinit_select();\n\t} else {\n\t\tinit_textbox();\n\t}\n\n\treturn Object.assign( {}, defaults, settings_element, settings_user) as TomSettings;\n};\n", "\nimport MicroEvent from './contrib/microevent';\nimport MicroPlugin from './contrib/microplugin';\nimport { Sifter, iterate } from '@orchidjs/sifter';\nimport { escape_regex } from '@orchidjs/unicode-variants';\nimport { TomInput, TomArgObject, TomOption, TomOptions, TomCreateFilter, TomCreateCallback, TomItem, TomSettings, TomTemplateNames, TomClearFilter, RecursivePartial } from './types/index';\nimport {highlight, removeHighlight} from './contrib/highlight';\nimport * as constants from './constants';\nimport getSettings from './getSettings';\nimport {\n\thash_key,\n\tget_hash,\n\tescape_html,\n\tdebounce_events,\n\tgetSelection,\n\tpreventDefault,\n\taddEvent,\n\tloadDebounce,\n\ttimeout,\n\tisKeyDown,\n\tgetId,\n\taddSlashes,\n\tappend\n} from './utils';\n\nimport {\n\tgetDom,\n\tisHtmlString,\n\tescapeQuery,\n\ttriggerEvent,\n\tapplyCSS,\n\taddClasses,\n\tremoveClasses,\n\tparentMatch,\n\tgetTail,\n\tisEmptyObject,\n\tnodeIndex,\n\tsetAttr,\n\treplaceNode\n} from './vanilla';\n\nvar instance_i = 0;\n\nexport default class TomSelect extends MicroPlugin(MicroEvent){\n\n\tpublic control_input\t\t\t: HTMLInputElement;\n\tpublic wrapper\t\t\t\t\t: HTMLElement;\n\tpublic dropdown\t\t\t\t\t: HTMLElement;\n\tpublic control\t\t\t\t\t: HTMLElement;\n\tpublic dropdown_content\t\t\t: HTMLElement;\n\tpublic focus_node\t\t\t\t: HTMLElement;\n\n\tpublic order\t\t\t\t\t: number = 0;\n\tpublic settings\t\t\t\t\t: TomSettings;\n\tpublic input\t\t\t\t\t: TomInput;\n\tpublic tabIndex\t\t\t\t\t: number;\n\tpublic is_select_tag\t\t\t: boolean;\n\tpublic rtl\t\t\t\t\t\t: boolean;\n\tprivate inputId\t\t\t\t\t: string;\n\n\tprivate _destroy\t\t\t\t!: () => void;\n\tpublic sifter\t\t\t\t\t: Sifter;\n\n\n\tpublic isOpen\t\t\t\t\t: boolean = false;\n\tpublic isDisabled\t\t\t\t: boolean = false;\n\tpublic isReadOnly\t\t\t\t: boolean = false;\n\tpublic isRequired\t\t\t\t: boolean;\n\tpublic isInvalid\t\t\t\t: boolean = false; // @deprecated 1.8\n\tpublic isValid\t\t\t\t\t: boolean = true;\n\tpublic isLocked\t\t\t\t\t: boolean = false;\n\tpublic isFocused\t\t\t\t: boolean = false;\n\tpublic isInputHidden\t\t\t: boolean = false;\n\tpublic isSetup\t\t\t\t\t: boolean = false;\n\tpublic ignoreFocus\t\t\t\t: boolean = false;\n\tpublic ignoreHover\t\t\t\t: boolean = false;\n\tpublic hasOptions\t\t\t\t: boolean = false;\n\tpublic currentResults\t\t\t?: ReturnType<Sifter['search']>;\n\tpublic lastValue\t\t\t\t: string = '';\n\tpublic caretPos\t\t\t\t\t: number = 0;\n\tpublic loading\t\t\t\t\t: number = 0;\n\tpublic loadedSearches\t\t\t: { [key: string]: boolean } = {};\n\n\tpublic activeOption\t\t\t\t: null|HTMLElement = null;\n\tpublic activeItems\t\t\t\t: TomItem[] = [];\n\n\tpublic optgroups\t\t\t\t: TomOptions = {};\n\tpublic options\t\t\t\t\t: TomOptions = {};\n\tpublic userOptions\t\t\t\t: {[key:string]:boolean} = {};\n\tpublic items\t\t\t\t\t: string[] = [];\n\n\tprivate refreshTimeout\t\t\t: null|ReturnType<typeof setTimeout> = null;\n\n\n\tconstructor( input_arg: string|TomInput, user_settings:RecursivePartial<TomSettings> ){\n\t\tsuper();\n\n\t\tinstance_i++;\n\n\t\tvar dir;\n\t\tvar input\t\t\t\t= getDom( input_arg ) as TomInput;\n\n\t\tif( input.tomselect ){\n\t\t\tthrow new Error('Tom Select already initialized on this element');\n\t\t}\n\n\n\t\tinput.tomselect\t\t\t= this;\n\n\n\t\t// detect rtl environment\n\t\tvar computedStyle\t\t= window.getComputedStyle && window.getComputedStyle(input, null);\n\t\tdir\t\t\t\t\t\t= computedStyle.getPropertyValue('direction');\n\n\t\t// setup default state\n\t\tconst settings\t\t\t= getSettings( input, user_settings );\n\t\tthis.settings\t\t\t= settings;\n\t\tthis.input\t\t\t\t= input;\n\t\tthis.tabIndex\t\t\t= input.tabIndex || 0;\n\t\tthis.is_select_tag\t\t= input.tagName.toLowerCase() === 'select';\n\t\tthis.rtl\t\t\t\t= /rtl/i.test(dir);\n\t\tthis.inputId\t\t\t= getId(input, 'tomselect-'+instance_i);\n\t\tthis.isRequired\t\t\t= input.required;\n\n\n\t\t// search system\n\t\tthis.sifter = new Sifter(this.options, {diacritics: settings.diacritics});\n\n\t\t// option-dependent defaults\n\t\tsettings.mode = settings.mode || (settings.maxItems === 1 ? 'single' : 'multi');\n\t\tif (typeof settings.hideSelected !== 'boolean') {\n\t\t\tsettings.hideSelected = settings.mode === 'multi';\n\t\t}\n\n\t\tif( typeof settings.hidePlaceholder !== 'boolean' ){\n\t\t\tsettings.hidePlaceholder = settings.mode !== 'multi';\n\t\t}\n\n\t\t// set up createFilter callback\n\t\tvar filter = settings.createFilter;\n\t\tif( typeof filter !== 'function' ){\n\n\t\t\tif( typeof filter === 'string' ){\n\t\t\t\tfilter = new RegExp(filter);\n\t\t\t}\n\n\t\t\tif( filter instanceof RegExp ){\n\t\t\t\tsettings.createFilter = (input) => (filter as RegExp).test(input);\n\t\t\t}else{\n\t\t\t\tsettings.createFilter = (value) => {\n\t\t\t\t\treturn this.settings.duplicates || !this.options[value];\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\n\t\tthis.initializePlugins(settings.plugins);\n\t\tthis.setupCallbacks();\n\t\tthis.setupTemplates();\n\n\n\t\t// Create all elements\n\t\tconst wrapper\t\t\t= getDom('<div>');\n\t\tconst control\t\t\t= getDom('<div>');\n\t\tconst dropdown\t\t\t= this._render('dropdown');\n\t\tconst dropdown_content\t= getDom(`<div role=\"listbox\" tabindex=\"-1\">`);\n\n\t\tconst classes\t\t\t= this.input.getAttribute('class') || '';\n\t\tconst inputMode\t\t\t= settings.mode;\n\n\t\tvar control_input: HTMLInputElement;\n\n\n\t\taddClasses( wrapper, settings.wrapperClass, classes, inputMode);\n\n\n\t\taddClasses(control,settings.controlClass);\n\t\tappend( wrapper, control );\n\n\n\t\taddClasses(dropdown, settings.dropdownClass, inputMode);\n\t\tif( settings.copyClassesToDropdown ){\n\t\t\taddClasses( dropdown, classes);\n\t\t}\n\n\n\t\taddClasses(dropdown_content, settings.dropdownContentClass);\n\t\tappend( dropdown, dropdown_content );\n\n\t\tgetDom( settings.dropdownParent || wrapper ).appendChild( dropdown );\n\n\n\t\t// default controlInput\n\t\tif( isHtmlString(settings.controlInput) ){\n\t\t\tcontrol_input\t\t= getDom(settings.controlInput ) as HTMLInputElement;\n\n\t\t\t// set attributes\n\t\t\tvar attrs = ['autocorrect','autocapitalize','autocomplete','spellcheck'];\n\t\t\titerate(attrs,(attr:string) => {\n\t\t\t\tif( input.getAttribute(attr) ){\n\t\t\t\t\tsetAttr(control_input,{[attr]:input.getAttribute(attr)});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcontrol_input.tabIndex = -1;\n\t\t\tcontrol.appendChild( control_input );\n\t\t\tthis.focus_node\t\t= control_input;\n\n\t\t// dom element\n\t\t}else if( settings.controlInput ){\n\t\t\tcontrol_input\t\t= getDom( settings.controlInput ) as HTMLInputElement;\n\t\t\tthis.focus_node\t\t= control_input;\n\n\t\t}else{\n\t\t\tcontrol_input\t\t= getDom('<input/>') as HTMLInputElement;\n\t\t\tthis.focus_node\t\t= control;\n\t\t}\n\n\t\tthis.wrapper\t\t\t= wrapper;\n\t\tthis.dropdown\t\t\t= dropdown;\n\t\tthis.dropdown_content\t= dropdown_content;\n\t\tthis.control \t\t\t= control;\n\t\tthis.control_input\t\t= control_input;\n\n\t\tthis.setup();\n\t}\n\n\t/**\n\t * set up event bindings.\n\t *\n\t */\n\tsetup(){\n\n\t\tconst self = this;\n\t\tconst settings\t\t\t\t= self.settings;\n\t\tconst control_input\t\t\t= self.control_input;\n\t\tconst dropdown\t\t\t\t= self.dropdown;\n\t\tconst dropdown_content\t\t= self.dropdown_content;\n\t\tconst wrapper\t\t\t\t= self.wrapper;\n\t\tconst control\t\t\t\t= self.control;\n\t\tconst input\t\t\t\t\t= self.input;\n\t\tconst focus_node\t\t\t= self.focus_node;\n\t\tconst passive_event\t\t\t= { passive: true };\n\t\tconst listboxId\t\t\t\t= self.inputId +'-ts-dropdown';\n\n\n\t\tsetAttr(dropdown_content,{\n\t\t\tid: listboxId\n\t\t});\n\n\t\tsetAttr(focus_node,{\n\t\t\trole:'combobox',\n\t\t\t'aria-haspopup':'listbox',\n\t\t\t'aria-expanded':'false',\n\t\t\t'aria-controls':listboxId\n\t\t});\n\n\t\tconst control_id\t= getId(focus_node,self.inputId + '-ts-control');\n\t\tconst query\t\t\t= \"label[for='\"+escapeQuery(self.inputId)+\"']\";\n\t\tconst label\t\t\t= document.querySelector(query);\n\t\tconst label_click\t= self.focus.bind(self);\n\t\tif( label ){\n\t\t\taddEvent(label,'click', label_click );\n\t\t\tsetAttr(label,{for:control_id});\n\t\t\tconst label_id = getId(label,self.inputId+'-ts-label');\n\t\t\tsetAttr(focus_node,{'aria-labelledby':label_id});\n\t\t\tsetAttr(dropdown_content,{'aria-labelledby':label_id});\n\t\t}\n\n\t\twrapper.style.width = input.style.width;\n\n\t\tif (self.plugins.names.length) {\n\t\t\tconst classes_plugins = 'plugin-' + self.plugins.names.join(' plugin-');\n\t\t\taddClasses( [wrapper,dropdown], classes_plugins);\n\t\t}\n\n\t\tif ((settings.maxItems === null || settings.maxItems > 1) && self.is_select_tag ){\n\t\t\tsetAttr(input,{multiple:'multiple'});\n\t\t}\n\n\t\tif (settings.placeholder) {\n\t\t\tsetAttr(control_input,{placeholder:settings.placeholder});\n\t\t}\n\n\t\t// if splitOn was not passed in, construct it from the delimiter to allow pasting universally\n\t\tif (!settings.splitOn && settings.delimiter) {\n\t\t\tsettings.splitOn = new RegExp('\\\\s*' + escape_regex(settings.delimiter) + '+\\\\s*');\n\t\t}\n\n\t\t// debounce user defined load() if loadThrottle > 0\n\t\t// after initializePlugins() so plugins can create/modify user defined loaders\n\t\tif( settings.load && settings.loadThrottle ){\n\t\t\tsettings.load = loadDebounce(settings.load,settings.loadThrottle)\n\t\t}\n\n\t\taddEvent(dropdown,'mousemove', () => {\n\t\t\tself.ignoreHover = false;\n\t\t});\n\n\t\taddEvent(dropdown,'mouseenter', (e) => {\n\n\t\t\tvar target_match = parentMatch(e.target as HTMLElement, '[data-selectable]', dropdown);\n\t\t\tif( target_match ) self.onOptionHover( e as MouseEvent, target_match );\n\n\t\t}, {capture:true});\n\n\t\t// clicking on an option should select it\n\t\taddEvent(dropdown,'click',(evt) => {\n\t\t\tconst option = parentMatch(evt.target as HTMLElement, '[data-selectable]');\n\t\t\tif( option ){\n\t\t\t\tself.onOptionSelect( evt as MouseEvent, option );\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t}\n\t\t});\n\n\t\taddEvent(control,'click', (evt) => {\n\n\t\t\tvar target_match = parentMatch( evt.target as HTMLElement, '[data-ts-item]', control);\n\t\t\tif( target_match && self.onItemSelect(evt as MouseEvent, target_match as TomItem) ){\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// retain focus (see control_input mousedown)\n\t\t\tif( control_input.value != '' ){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tself.onClick();\n\t\t\tpreventDefault(evt,true);\n\t\t});\n\n\n\t\t// keydown on focus_node for arrow_down/arrow_up\n\t\taddEvent(focus_node,'keydown',\t\t(e) => self.onKeyDown(e as KeyboardEvent) );\n\n\t\t// keypress and input/keyup\n\t\taddEvent(control_input,'keypress',\t(e) => self.onKeyPress(e as KeyboardEvent) );\n\t\taddEvent(control_input,'input',\t\t(e) => self.onInput(e as KeyboardEvent) );\n\t\taddEvent(focus_node,'blur', \t\t(e) => self.onBlur(e as FocusEvent) );\n\t\taddEvent(focus_node,'focus',\t\t(e) => self.onFocus(e as MouseEvent) );\n\t\taddEvent(control_input,'paste',\t\t(e) => self.onPaste(e as MouseEvent) );\n\n\n\t\tconst doc_mousedown = (evt:Event) => {\n\n\t\t\t// blur if target is outside of this instance\n\t\t\t// dropdown is not always inside wrapper\n\t\t\tconst target = evt.composedPath()[0];\n\t\t\tif( !wrapper.contains(target as HTMLElement) && !dropdown.contains(target as HTMLElement) ){\n\t\t\t\tif (self.isFocused) {\n\t\t\t\t\tself.blur();\n\t\t\t\t}\n\t\t\t\tself.inputState();\n\t\t\t\treturn;\n\t\t\t}\n\n\n\t\t\t// retain focus by preventing native handling. if the\n\t\t\t// event target is the input it should not be modified.\n\t\t\t// otherwise, text selection within the input won't work.\n\t\t\t// Fixes bug #212 which is no covered by tests\n\t\t\tif( target == control_input && self.isOpen ){\n\t\t\t\tevt.stopPropagation();\n\n\t\t\t// clicking anywhere in the control should not blur the control_input (which would close the dropdown)\n\t\t\t}else{\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t}\n\n\t\t};\n\n\t\tconst win_scroll = () => {\n\t\t\tif (self.isOpen) {\n\t\t\t\tself.positionDropdown();\n\t\t\t}\n\t\t};\n\n\n\t\taddEvent(document,'mousedown', doc_mousedown);\n\t\taddEvent(window,'scroll', win_scroll, passive_event);\n\t\taddEvent(window,'resize', win_scroll, passive_event);\n\n\t\tthis._destroy = () => {\n\t\t\tdocument.removeEventListener('mousedown',doc_mousedown);\n\t\t\twindow.removeEventListener('scroll',win_scroll);\n\t\t\twindow.removeEventListener('resize',win_scroll);\n\t\t\tif( label ) label.removeEventListener('click',label_click);\n\t\t};\n\n\t\t// store original html and tab index so that they can be\n\t\t// restored when the destroy() method is called.\n\t\tthis.revertSettings = {\n\t\t\tinnerHTML : input.innerHTML,\n\t\t\ttabIndex : input.tabIndex\n\t\t};\n\n\n\t\tinput.tabIndex = -1;\n\t\tinput.insertAdjacentElement('afterend', self.wrapper);\n\n\t\tself.sync(false);\n\t\tsettings.items = [];\n\t\tdelete settings.optgroups;\n\t\tdelete settings.options;\n\n\t\taddEvent(input,'invalid', () => {\n\t\t\tif( self.isValid ){\n\t\t\t\tself.isValid = false;\n\t\t\t\tself.isInvalid = true;\n\t\t\t\tself.refreshState();\n\t\t\t}\n\t\t});\n\n\t\tself.updateOriginalInput();\n\t\tself.refreshItems();\n\t\tself.close(false);\n\t\tself.inputState();\n\t\tself.isSetup = true;\n\n\t\tif( input.disabled ){\n\t\t\tself.disable();\n\t\t}else if( input.readOnly ){\n\t\t\tself.setReadOnly(true);\n\t\t}else{\n\t\t\tself.enable(); //sets tabIndex\n\t\t}\n\n\t\tself.on('change', this.onChange);\n\n\t\taddClasses(input,'tomselected','ts-hidden-accessible');\n\t\tself.trigger('initialize');\n\n\t\t// preload options\n\t\tif (settings.preload === true) {\n\t\t\tself.preload();\n\t\t}\n\n\t}\n\n\n\t/**\n\t * Register options and optgroups\n\t *\n\t */\n\tsetupOptions(options:TomOption[] = [], optgroups:TomOption[] = []){\n\n\t\t// build options table\n\t\tthis.addOptions(options);\n\n\n\t\t// build optgroup table\n\t\titerate( optgroups, (optgroup:TomOption) => {\n\t\t\tthis.registerOptionGroup(optgroup);\n\t\t});\n\t}\n\n\t/**\n\t * Sets up default rendering functions.\n\t */\n\tsetupTemplates() {\n\t\tvar self = this;\n\t\tvar field_label = self.settings.labelField;\n\t\tvar field_optgroup = self.settings.optgroupLabelField;\n\n\t\tvar templates = {\n\t\t\t'optgroup': (data:TomOption) => {\n\t\t\t\tlet optgroup = document.createElement('div');\n\t\t\t\toptgroup.className = 'optgroup';\n\t\t\t\toptgroup.appendChild(data.options);\n\t\t\t\treturn optgroup;\n\n\t\t\t},\n\t\t\t'optgroup_header': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div class=\"optgroup-header\">' + escape(data[field_optgroup]) + '</div>';\n\t\t\t},\n\t\t\t'option': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div>' + escape(data[field_label]) + '</div>';\n\t\t\t},\n\t\t\t'item': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div>' + escape(data[field_label]) + '</div>';\n\t\t\t},\n\t\t\t'option_create': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div class=\"create\">Add <strong>' + escape(data.input) + '</strong>&hellip;</div>';\n\t\t\t},\n\t\t\t'no_results':() => {\n\t\t\t\treturn '<div class=\"no-results\">No results found</div>';\n\t\t\t},\n\t\t\t'loading':() => {\n\t\t\t\treturn '<div class=\"spinner\"></div>';\n\t\t\t},\n\t\t\t'not_loading':() => {},\n\t\t\t'dropdown':() => {\n\t\t\t\treturn '<div></div>';\n\t\t\t}\n\t\t};\n\n\n\t\tself.settings.render = Object.assign({}, templates, self.settings.render);\n\t}\n\n\t/**\n\t * Maps fired events to callbacks provided\n\t * in the settings used when creating the control.\n\t */\n\tsetupCallbacks() {\n\t\tvar key, fn;\n\t\tvar callbacks:{[key:string]:string} = {\n\t\t\t'initialize'      : 'onInitialize',\n\t\t\t'change'          : 'onChange',\n\t\t\t'item_add'        : 'onItemAdd',\n\t\t\t'item_remove'     : 'onItemRemove',\n\t\t\t'item_select'     : 'onItemSelect',\n\t\t\t'clear'           : 'onClear',\n\t\t\t'option_add'      : 'onOptionAdd',\n\t\t\t'option_remove'   : 'onOptionRemove',\n\t\t\t'option_clear'    : 'onOptionClear',\n\t\t\t'optgroup_add'    : 'onOptionGroupAdd',\n\t\t\t'optgroup_remove' : 'onOptionGroupRemove',\n\t\t\t'optgroup_clear'  : 'onOptionGroupClear',\n\t\t\t'dropdown_open'   : 'onDropdownOpen',\n\t\t\t'dropdown_close'  : 'onDropdownClose',\n\t\t\t'type'            : 'onType',\n\t\t\t'load'            : 'onLoad',\n\t\t\t'focus'           : 'onFocus',\n\t\t\t'blur'            : 'onBlur'\n\t\t};\n\n\t\tfor (key in callbacks) {\n\n\t\t\tfn = this.settings[callbacks[key] as (keyof TomSettings)];\n\t\t\tif (fn) this.on(key, fn);\n\n\t\t}\n\t}\n\n\t/**\n\t * Sync the Tom Select instance with the original input or select\n\t *\n\t */\n\tsync(get_settings:boolean=true):void{\n\t\tconst self\t\t= this;\n\t\tconst settings\t= get_settings ? getSettings( self.input, {delimiter:self.settings.delimiter} as RecursivePartial<TomSettings> ) : self.settings;\n\n\t\tself.setupOptions(settings.options,settings.optgroups);\n\n\t\tself.setValue(settings.items||[],true); // silent prevents recursion\n\n\t\tself.lastQuery = null; // so updated options will be displayed in dropdown\n\t}\n\n\t/**\n\t * Triggered when the main control element\n\t * has a click event.\n\t *\n\t */\n\tonClick():void {\n\t\tvar self = this;\n\n\t\tif( self.activeItems.length > 0 ){\n\t\t\tself.clearActiveItems();\n\t\t\tself.focus();\n\t\t\treturn;\n\t\t}\n\n\t\tif( self.isFocused && self.isOpen ){\n\t\t\tself.blur();\n\t\t} else {\n\t\t\tself.focus();\n\t\t}\n\t}\n\n\t/**\n\t * @deprecated v1.7\n\t *\n\t */\n\tonMouseDown():void {}\n\n\t/**\n\t * Triggered when the value of the control has been changed.\n\t * This should propagate the event to the original DOM\n\t * input / select element.\n\t */\n\tonChange() {\n\t\ttriggerEvent(this.input, 'input');\n\t\ttriggerEvent(this.input, 'change');\n\t}\n\n\t/**\n\t * Triggered on <input> paste.\n\t *\n\t */\n\tonPaste(e:MouseEvent|KeyboardEvent):void {\n\t\tvar self = this;\n\n\t\tif( self.isInputHidden || self.isLocked ){\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\n\t\t// If a regex or string is included, this will split the pasted\n\t\t// input and create Items for each separate value\n\t\tif( !self.settings.splitOn ){\n\t\t\treturn;\n\t\t}\n\n\t\t// Wait for pasted text to be recognized in value\n\t\tsetTimeout(() => {\n\t\t\tvar pastedText = self.inputValue();\n\t\t\tif( !pastedText.match(self.settings.splitOn)){\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tvar splitInput = pastedText.trim().split(self.settings.splitOn);\n\t\t\titerate( splitInput, (piece:string) => {\n\n\t\t\t\tconst hash = hash_key(piece);\n\t\t\t\tif( hash ){\n\t\t\t\t\tif( this.options[piece] ){\n\t\t\t\t\t\tself.addItem(piece);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tself.createItem(piece);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}, 0);\n\n\t}\n\n\t/**\n\t * Triggered on <input> keypress.\n\t *\n\t */\n\tonKeyPress(e:KeyboardEvent):void {\n\t\tvar self = this;\n\t\tif(self.isLocked){\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\t\tvar character = String.fromCharCode(e.keyCode || e.which);\n\t\tif (self.settings.create && self.settings.mode === 'multi' && character === self.settings.delimiter) {\n\t\t\tself.createItem();\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\t}\n\n\t/**\n\t * Triggered on <input> keydown.\n\t *\n\t */\n\tonKeyDown(e:KeyboardEvent):void {\n\t\tvar self = this;\n\n\t\tself.ignoreHover = true;\n\n\t\tif (self.isLocked) {\n\t\t\tif (e.keyCode !== constants.KEY_TAB) {\n\t\t\t\tpreventDefault(e);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tswitch (e.keyCode) {\n\n\t\t\t// ctrl+A: select all\n\t\t\tcase constants.KEY_A:\n\t\t\t\tif( isKeyDown(constants.KEY_SHORTCUT,e) ){\n\t\t\t\t\tif( self.control_input.value == '' ){\n\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t\tself.selectAll();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// esc: close dropdown\n\t\t\tcase constants.KEY_ESC:\n\t\t\t\tif (self.isOpen) {\n\t\t\t\t\tpreventDefault(e,true);\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\t\t\t\tself.clearActiveItems();\n\t\t\t\treturn;\n\n\t\t\t// down: open dropdown or move selection down\n\t\t\tcase constants.KEY_DOWN:\n\t\t\t\tif (!self.isOpen && self.hasOptions) {\n\t\t\t\t\tself.open();\n\t\t\t\t} else if (self.activeOption) {\n\t\t\t\t\tlet next = self.getAdjacent(self.activeOption, 1);\n\t\t\t\t\tif (next) self.setActiveOption(next);\n\t\t\t\t}\n\t\t\t\tpreventDefault(e);\n\t\t\t\treturn;\n\n\t\t\t// up: move selection up\n\t\t\tcase constants.KEY_UP:\n\t\t\t\tif (self.activeOption) {\n\t\t\t\t\tlet prev = self.getAdjacent(self.activeOption, -1);\n\t\t\t\t\tif (prev) self.setActiveOption(prev);\n\t\t\t\t}\n\t\t\t\tpreventDefault(e);\n\t\t\t\treturn;\n\n\t\t\t// return: select active option\n\t\t\tcase constants.KEY_RETURN:\n\t\t\t\tif( self.canSelect(self.activeOption) ){\n\t\t\t\t\tself.onOptionSelect(e,self.activeOption!);\n\t\t\t\t\tpreventDefault(e);\n\n\t\t\t\t// if the option_create=null, the dropdown might be closed\n\t\t\t\t}else if (self.settings.create && self.createItem()) {\n\t\t\t\t\tpreventDefault(e);\n\n\t\t\t\t// don't submit form when searching for a value\n\t\t\t\t}else if( document.activeElement == self.control_input && self.isOpen ){\n\t\t\t\t\tpreventDefault(e);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\n\t\t\t// left: modifiy item selection to the left\n\t\t\tcase constants.KEY_LEFT:\n\t\t\t\tself.advanceSelection(-1, e);\n\t\t\t\treturn;\n\n\t\t\t// right: modifiy item selection to the right\n\t\t\tcase constants.KEY_RIGHT:\n\t\t\t\tself.advanceSelection(1, e);\n\t\t\t\treturn;\n\n\t\t\t// tab: select active option and/or create item\n\t\t\tcase constants.KEY_TAB:\n\n\t\t\t\tif( self.settings.selectOnTab ){\n\t\t\t\t\tif( self.canSelect(self.activeOption) ){\n\t\t\t\t\t\tself.onOptionSelect(e,self.activeOption!);\n\n\t\t\t\t\t\t// prevent default [tab] behaviour of jump to the next field\n\t\t\t\t\t\t// if select isFull, then the dropdown won't be open and [tab] will work normally\n\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t}\n\t\t\t\t\tif (self.settings.create && self.createItem()) {\n\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\n\t\t\t// delete|backspace: delete items\n\t\t\tcase constants.KEY_BACKSPACE:\n\t\t\tcase constants.KEY_DELETE:\n\t\t\t\tself.deleteSelection(e);\n\t\t\t\treturn;\n\t\t}\n\n\t\t// don't enter text in the control_input when active items are selected\n\t\tif( self.isInputHidden && !isKeyDown(constants.KEY_SHORTCUT,e) ){\n\t\t\tpreventDefault(e);\n\t\t}\n\t}\n\n\t/**\n\t * Triggered on <input> keyup.\n\t *\n\t */\n\tonInput(e:MouseEvent|KeyboardEvent):void {\n\t\t\n\t\tif( this.isLocked ){\n\t\t\treturn;\n\t\t}\n\n\t\tconst value = this.inputValue();\n\t\tif( this.lastValue === value ) return;\n\t\tthis.lastValue = value;\n\t\t\n\t\tif( value == '' ){\n\t\t\tthis._onInput();\n\t\t\treturn;\n\t\t}\n\n\t\tif( this.refreshTimeout ){\n\t\t\tclearTimeout(this.refreshTimeout);\n\t\t}\n\n\t\tthis.refreshTimeout = timeout(()=> {\n\t\t\tthis.refreshTimeout = null;\n\t\t\tthis._onInput();\n\t\t}, this.settings.refreshThrottle);\n\t}\n\n\t_onInput():void {\n\t\tconst value = this.lastValue;\n\n\t\tif( this.settings.shouldLoad.call(this,value) ){\n\t\t\tthis.load(value);\n\t\t}\n\n\t\tthis.refreshOptions();\n\t\tthis.trigger('type', value);\n\t}\n\n\t/**\n\t * Triggered when the user rolls over\n\t * an option in the autocomplete dropdown menu.\n\t *\n\t */\n\tonOptionHover( evt:MouseEvent|KeyboardEvent, option:HTMLElement ):void{\n\t\tif( this.ignoreHover ) return;\n\t\tthis.setActiveOption(option, false);\n\t}\n\n\t/**\n\t * Triggered on <input> focus.\n\t *\n\t */\n\tonFocus(e?:MouseEvent|KeyboardEvent):void {\n\t\tvar self = this;\n\t\tvar wasFocused = self.isFocused;\n\n\t\tif( self.isDisabled || self.isReadOnly ){\n\t\t\tself.blur();\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\n\t\tif (self.ignoreFocus) return;\n\t\tself.isFocused = true;\n\t\tif( self.settings.preload === 'focus' ) self.preload();\n\n\t\tif (!wasFocused) self.trigger('focus');\n\n\t\tif (!self.activeItems.length) {\n\t\t\tself.inputState();\n\t\t\tself.refreshOptions(!!self.settings.openOnFocus);\n\t\t}\n\n\t\tself.refreshState();\n\t}\n\n\t/**\n\t * Triggered on <input> blur.\n\t *\n\t */\n\tonBlur(e?:FocusEvent):void {\n\n\t\tif( document.hasFocus() === false ) return;\n\n\t\tvar self = this;\n\t\tif (!self.isFocused) return;\n\t\tself.isFocused = false;\n\t\tself.ignoreFocus = false;\n\n\t\tvar deactivate = () => {\n\t\t\tself.close();\n\t\t\tself.setActiveItem();\n\t\t\tself.setCaret(self.items.length);\n\t\t\tself.trigger('blur');\n\t\t};\n\n\t\tif (self.settings.create && self.settings.createOnBlur) {\n\t\t\tself.createItem(null, deactivate);\n\t\t} else {\n\t\t\tdeactivate();\n\t\t}\n\t}\n\n\n\t/**\n\t * Triggered when the user clicks on an option\n\t * in the autocomplete dropdown menu.\n\t *\n\t */\n\tonOptionSelect( evt:MouseEvent|KeyboardEvent, option:HTMLElement ){\n\t\tvar value, self = this;\n\n\n\t\t// should not be possible to trigger a option under a disabled optgroup\n\t\tif( option.parentElement && option.parentElement.matches('[data-disabled]') ){\n\t\t\treturn;\n\t\t}\n\n\n\t\tif( option.classList.contains('create') ){\n\t\t\tself.createItem(null, () => {\n\t\t\t\tif (self.settings.closeAfterSelect) {\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tvalue = option.dataset.value;\n\t\t\tif (typeof value !== 'undefined') {\n\t\t\t\tself.lastQuery = null;\n\t\t\t\tself.addItem(value);\n\t\t\t\tif (self.settings.closeAfterSelect) {\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\n\t\t\t\tif( !self.settings.hideSelected && evt.type && /click/.test(evt.type) ){\n\t\t\t\t\tself.setActiveOption(option);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Return true if the given option can be selected\n\t *\n\t */\n\tcanSelect(option:HTMLElement|null):boolean{\n\n\t\tif( this.isOpen && option && this.dropdown_content.contains(option) ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Triggered when the user clicks on an item\n\t * that has been selected.\n\t *\n\t */\n\tonItemSelect( evt?:MouseEvent, item?:TomItem ):boolean{\n\t\tvar self = this;\n\n\t\tif( !self.isLocked && self.settings.mode === 'multi' ){\n\t\t\tpreventDefault(evt);\n\t\t\tself.setActiveItem(item, evt);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Determines whether or not to invoke\n\t * the user-provided option provider / loader\n\t *\n\t * Note, there is a subtle difference between\n\t * this.canLoad() and this.settings.shouldLoad();\n\t *\n\t *\t- settings.shouldLoad() is a user-input validator.\n\t *\tWhen false is returned, the not_loading template\n\t *\twill be added to the dropdown\n\t *\n\t *\t- canLoad() is lower level validator that checks\n\t * \tthe Tom Select instance. There is no inherent user\n\t *\tfeedback when canLoad returns false\n\t *\n\t */\n\tcanLoad(value:string):boolean{\n\n\t\tif( !this.settings.load ) return false;\n\t\tif( this.loadedSearches.hasOwnProperty(value) ) return false;\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Invokes the user-provided option provider / loader.\n\t *\n\t */\n\tload(value:string):void {\n\t\tconst self = this;\n\n\t\tif( !self.canLoad(value) ) return;\n\n\t\taddClasses(self.wrapper,self.settings.loadingClass);\n\t\tself.loading++;\n\n\t\tconst callback = self.loadCallback.bind(self);\n\t\tself.settings.load.call(self, value, callback);\n\t}\n\n\t/**\n\t * Invoked by the user-provided option provider\n\t *\n\t */\n\tloadCallback( options:TomOption[], optgroups:TomOption[] ):void{\n\t\tconst self = this;\n\t\tself.loading = Math.max(self.loading - 1, 0);\n\t\tself.lastQuery = null;\n\n\t\tself.clearActiveOption(); // when new results load, focus should be on first option\n\t\tself.setupOptions(options,optgroups);\n\n\t\tself.refreshOptions(self.isFocused && !self.isInputHidden);\n\n\t\tif (!self.loading) {\n\t\t\tremoveClasses(self.wrapper,self.settings.loadingClass);\n\t\t}\n\n\t\tself.trigger('load', options, optgroups);\n\t}\n\n\tpreload():void{\n\t\tvar classList = this.wrapper.classList;\n\t\tif( classList.contains('preloaded') ) return;\n\t\tclassList.add('preloaded');\n\t\tthis.load('');\n\t}\n\n\n\t/**\n\t * Sets the input field of the control to the specified value.\n\t *\n\t */\n\tsetTextboxValue(value:string = '') {\n\t\tvar input = this.control_input;\n\t\tvar changed = input.value !== value;\n\t\tif (changed) {\n\t\t\tinput.value = value;\n\t\t\ttriggerEvent(input,'update');\n\t\t\tthis.lastValue = value;\n\t\t}\n\t}\n\n\t/**\n\t * Returns the value of the control. If multiple items\n\t * can be selected (e.g. <select multiple>), this returns\n\t * an array. If only one item can be selected, this\n\t * returns a string.\n\t *\n\t */\n\tgetValue():string|string[] {\n\n\t\tif( this.is_select_tag && this.input.hasAttribute('multiple')) {\n\t\t\treturn this.items;\n\t\t}\n\n\t\treturn this.items.join(this.settings.delimiter);\n\t}\n\n\t/**\n\t * Resets the selected items to the given value.\n\t *\n\t */\n\tsetValue( value:string|string[], silent?:boolean ):void{\n\t\tvar events = silent ? [] : ['change'];\n\n\t\tdebounce_events(this, events,() => {\n\t\t\tthis.clear(silent);\n\t\t\tthis.addItems(value, silent);\n\t\t});\n\t}\n\n\n\t/**\n\t * Resets the number of max items to the given value\n\t *\n\t */\n\tsetMaxItems(value:null|number){\n\t\tif(value === 0) value = null; //reset to unlimited items.\n\t\tthis.settings.maxItems = value;\n\t\tthis.refreshState();\n\t}\n\n\t/**\n\t * Sets the selected item.\n\t *\n\t */\n\tsetActiveItem( item?:TomItem, e?:MouseEvent|KeyboardEvent ){\n\t\tvar self = this;\n\t\tvar eventName;\n\t\tvar i, begin, end, swap;\n\t\tvar last;\n\n\t\tif (self.settings.mode === 'single') return;\n\n\t\t// clear the active selection\n\t\tif( !item ){\n\t\t\tself.clearActiveItems();\n\t\t\tif (self.isFocused) {\n\t\t\t\tself.inputState();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// modify selection\n\t\teventName = e && e.type.toLowerCase();\n\n\t\tif (eventName === 'click' && isKeyDown('shiftKey',e) && self.activeItems.length) {\n\t\t\tlast\t= self.getLastActive();\n\t\t\tbegin\t= Array.prototype.indexOf.call(self.control.children, last);\n\t\t\tend\t\t= Array.prototype.indexOf.call(self.control.children, item);\n\n\t\t\tif (begin > end) {\n\t\t\t\tswap  = begin;\n\t\t\t\tbegin = end;\n\t\t\t\tend   = swap;\n\t\t\t}\n\t\t\tfor (i = begin; i <= end; i++) {\n\t\t\t\titem = self.control.children[i] as TomItem;\n\t\t\t\tif (self.activeItems.indexOf(item) === -1) {\n\t\t\t\t\tself.setActiveItemClass(item);\n\t\t\t\t}\n\t\t\t}\n\t\t\tpreventDefault(e);\n\t\t} else if ((eventName === 'click' && isKeyDown(constants.KEY_SHORTCUT,e) ) || (eventName === 'keydown' && isKeyDown('shiftKey',e))) {\n\t\t\tif( item.classList.contains('active') ){\n\t\t\t\tself.removeActiveItem( item );\n\t\t\t} else {\n\t\t\t\tself.setActiveItemClass(item);\n\t\t\t}\n\t\t} else {\n\t\t\tself.clearActiveItems();\n\t\t\tself.setActiveItemClass(item);\n\t\t}\n\n\t\t// ensure control has focus\n\t\tself.inputState();\n\t\tif (!self.isFocused) {\n\t\t\tself.focus();\n\t\t}\n\t}\n\n\t/**\n\t * Set the active and last-active classes\n\t *\n\t */\n\tsetActiveItemClass( item:TomItem ){\n\t\tconst self = this;\n\t\tconst last_active = self.control.querySelector('.last-active');\n\t\tif( last_active ) removeClasses(last_active as HTMLElement,'last-active');\n\n\t\taddClasses(item,'active last-active');\n\t\tself.trigger('item_select', item);\n\t\tif( self.activeItems.indexOf(item) == -1 ){\n\t\t\tself.activeItems.push( item );\n\t\t}\n\t}\n\n\t/**\n\t * Remove active item\n\t *\n\t */\n\tremoveActiveItem( item:TomItem ){\n\t\tvar idx = this.activeItems.indexOf(item);\n\t\tthis.activeItems.splice(idx, 1);\n\t\tremoveClasses(item,'active');\n\t}\n\n\t/**\n\t * Clears all the active items\n\t *\n\t */\n\tclearActiveItems(){\n\t\tremoveClasses(this.activeItems,'active');\n\t\tthis.activeItems = [];\n\t}\n\n\t/**\n\t * Sets the selected item in the dropdown menu\n\t * of available options.\n\t *\n\t */\n\tsetActiveOption( option:null|HTMLElement,scroll:boolean=true ):void{\n\n\t\tif( option === this.activeOption ){\n\t\t\treturn;\n\t\t}\n\n\t\tthis.clearActiveOption();\n\t\tif( !option ) return;\n\n\t\tthis.activeOption = option;\n\t\tsetAttr(this.focus_node,{'aria-activedescendant':option.getAttribute('id')});\n\t\tsetAttr(option,{'aria-selected':'true'});\n\t\taddClasses(option,'active');\n\t\tif( scroll ) this.scrollToOption(option);\n\t}\n\n\t/**\n\t * Sets the dropdown_content scrollTop to display the option\n\t *\n\t */\n\tscrollToOption( option:null|HTMLElement, behavior?:string ):void{\n\n\t\tif( !option ) return;\n\n\t\tconst content\t\t= this.dropdown_content;\n\t\tconst height_menu\t= content.clientHeight;\n\t\tconst scrollTop\t\t= content.scrollTop || 0;\n\t\tconst height_item\t= option.offsetHeight;\n\t\tconst y\t\t\t\t= option.getBoundingClientRect().top - content.getBoundingClientRect().top + scrollTop;\n\n\t\tif (y + height_item > height_menu + scrollTop) {\n\t\t\tthis.scroll(y - height_menu + height_item, behavior);\n\n\t\t} else if (y < scrollTop) {\n\t\t\tthis.scroll(y, behavior);\n\t\t}\n\t}\n\n\t/**\n\t * Scroll the dropdown to the given position\n\t *\n\t */\n\tscroll( scrollTop:number, behavior?:string ):void{\n\t\tconst content = this.dropdown_content;\n\t\tif( behavior ){\n\t\t\tcontent.style.scrollBehavior = behavior;\n\t\t}\n\t\tcontent.scrollTop = scrollTop;\n\t\tcontent.style.scrollBehavior = '';\n\t}\n\n\t/**\n\t * Clears the active option\n\t *\n\t */\n\tclearActiveOption(){\n\t\tif( this.activeOption ){\n\t\t\tremoveClasses(this.activeOption,'active');\n\t\t\tsetAttr(this.activeOption,{'aria-selected':null});\n\t\t}\n\t\tthis.activeOption = null;\n\t\tsetAttr(this.focus_node,{'aria-activedescendant':null});\n\t}\n\n\n\t/**\n\t * Selects all items (CTRL + A).\n\t */\n\tselectAll() {\n\t\tconst self = this;\n\n\t\tif (self.settings.mode === 'single') return;\n\n\t\tconst activeItems = self.controlChildren();\n\n\t\tif( !activeItems.length ) return;\n\n\t\tself.inputState();\n\t\tself.close();\n\n\t\tself.activeItems = activeItems;\n\t\titerate( activeItems, (item:TomItem) => {\n\t\t\tself.setActiveItemClass(item);\n\t\t});\n\n\t}\n\n\t/**\n\t * Determines if the control_input should be in a hidden or visible state\n\t *\n\t */\n\tinputState(){\n\t\tvar self = this;\n\n\t\tif( !self.control.contains(self.control_input) ) return;\n\n\t\tsetAttr(self.control_input,{placeholder:self.settings.placeholder});\n\n\t\tif( self.activeItems.length > 0 || (!self.isFocused && self.settings.hidePlaceholder && self.items.length > 0) ){\n\t\t\tself.setTextboxValue();\n\t\t\tself.isInputHidden = true;\n\n\t\t}else{\n\n\t\t\tif( self.settings.hidePlaceholder && self.items.length > 0 ){\n\t\t\t\tsetAttr(self.control_input,{placeholder:''});\n\t\t\t}\n\t\t\tself.isInputHidden = false;\n\t\t}\n\n\t\tself.wrapper.classList.toggle('input-hidden', self.isInputHidden );\n\t}\n\n\t/**\n\t * Get the input value\n\t */\n\tinputValue(){\n\t\treturn this.control_input.value.trim();\n\t}\n\n\t/**\n\t * Gives the control focus.\n\t */\n\tfocus() {\n\t\tvar self = this;\n\t\tif( self.isDisabled || self.isReadOnly) return;\n\n\t\tself.ignoreFocus = true;\n\n\t\tif( self.control_input.offsetWidth ){\n\t\t\tself.control_input.focus();\n\t\t}else{\n\t\t\tself.focus_node.focus();\n\t\t}\n\n\t\tsetTimeout(() => {\n\t\t\tself.ignoreFocus = false;\n\t\t\tself.onFocus();\n\t\t}, 0);\n\t}\n\n\t/**\n\t * Forces the control out of focus.\n\t *\n\t */\n\tblur():void {\n\t\tthis.focus_node.blur();\n\t\tthis.onBlur();\n\t}\n\n\t/**\n\t * Returns a function that scores an object\n\t * to show how good of a match it is to the\n\t * provided query.\n\t *\n\t * @return {function}\n\t */\n\tgetScoreFunction(query:string) {\n\t\treturn this.sifter.getScoreFunction(query, this.getSearchOptions());\n\t}\n\n\t/**\n\t * Returns search options for sifter (the system\n\t * for scoring and sorting results).\n\t *\n\t * @see https://github.com/orchidjs/sifter.js\n\t * @return {object}\n\t */\n\tgetSearchOptions() {\n\t\tvar settings = this.settings;\n\t\tvar sort = settings.sortField;\n\t\tif (typeof settings.sortField === 'string') {\n\t\t\tsort = [{field: settings.sortField}];\n\t\t}\n\n\t\treturn {\n\t\t\tfields      : settings.searchField,\n\t\t\tconjunction : settings.searchConjunction,\n\t\t\tsort        : sort,\n\t\t\tnesting     : settings.nesting\n\t\t};\n\t}\n\n\t/**\n\t * Searches through available options and returns\n\t * a sorted array of matches.\n\t *\n\t */\n\tsearch(query:string) : ReturnType<Sifter['search']>{\n\t\tvar result, calculateScore;\n\t\tvar self     = this;\n\t\tvar options  = this.getSearchOptions();\n\n\t\t// validate user-provided result scoring function\n\t\tif ( self.settings.score ){\n\t\t\tcalculateScore = self.settings.score.call(self,query);\n\t\t\tif (typeof calculateScore !== 'function') {\n\t\t\t\tthrow new Error('Tom Select \"score\" setting must be a function that returns a function');\n\t\t\t}\n\t\t}\n\n\t\t// perform search\n\t\tif (query !== self.lastQuery) {\n\t\t\tself.lastQuery\t\t\t= query;\n\t\t\tresult\t\t\t\t\t= self.sifter.search(query, Object.assign(options, {score: calculateScore}));\n\t\t\tself.currentResults\t\t= result;\n\t\t} else {\n\t\t\tresult\t\t\t\t\t= Object.assign( {}, self.currentResults);\n\t\t}\n\n\t\t// filter out selected items\n\t\tif( self.settings.hideSelected ){\n\t\t\tresult.items = result.items.filter((item) => {\n\t\t\t\tlet hashed = hash_key(item.id);\n\t\t\t\treturn !(hashed && self.items.indexOf(hashed) !== -1 );\n\t\t\t});\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Refreshes the list of available options shown\n\t * in the autocomplete dropdown menu.\n\t *\n\t */\n\trefreshOptions( triggerDropdown:boolean = true ){\n\t\tvar i, j, k, n, optgroup, optgroups, html:DocumentFragment, has_create_option, active_group;\n\t\tvar create;\n\n\t\ttype Group = {fragment:DocumentFragment,order:number,optgroup:string}\n\t\tconst groups: {[key:string]:number} = {};\n\t\tconst groups_order:Group[]\t= [];\n\n\t\tvar self\t\t\t\t\t= this;\n\t\tvar query\t\t\t\t\t= self.inputValue();\n\t\tconst same_query\t\t\t= query === self.lastQuery || (query == '' && self.lastQuery == null);\n\t\tvar results\t\t\t\t\t= self.search(query);\n\t\tvar active_option:HTMLElement|null = null;\n\t\tvar show_dropdown\t\t\t= self.settings.shouldOpen || false;\n\t\tvar dropdown_content\t\t= self.dropdown_content;\n\n\n\t\tif( same_query ){\n\t\t\tactive_option\t\t\t= self.activeOption;\n\n\t\t\tif( active_option ){\n\t\t\t\tactive_group = active_option.closest('[data-group]') as HTMLElement;\n\t\t\t}\n\t\t}\n\n\t\t// build markup\n\t\tn = results.items.length;\n\t\tif (typeof self.settings.maxOptions === 'number') {\n\t\t\tn = Math.min(n, self.settings.maxOptions);\n\t\t}\n\n\t\tif( n > 0 ){\n\t\t\tshow_dropdown = true;\n\t\t}\n\n\t\t// get fragment for group and the position of the group in group_order\n\t\tconst getGroupFragment = (optgroup:string,order:number):[number,DocumentFragment] => {\n\n\t\t\tlet group_order_i = groups[optgroup];\n\n\t\t\tif( group_order_i !== undefined ){\n\t\t\t\tlet order_group = groups_order[group_order_i];\n\t\t\t\tif( order_group !== undefined ){\n\t\t\t\t\treturn [group_order_i,order_group.fragment];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet group_fragment = document.createDocumentFragment();\n\t\t\tgroup_order_i = groups_order.length;\n\t\t\tgroups_order.push({fragment:group_fragment,order,optgroup});\n\n\t\t\treturn [group_order_i,group_fragment]\n\t\t}\n\n\t\t// render and group available options individually\n\t\tfor (i = 0; i < n; i++) {\n\n\t\t\t// get option dom element\n\t\t\tlet item\t\t\t= results.items[i];\n\t\t\tif( !item ) continue;\n\n\t\t\tlet opt_value\t\t= item.id;\n\t\t\tlet option\t\t\t= self.options[opt_value];\n\n\t\t\tif( option === undefined ) continue;\n\n\t\t\tlet opt_hash\t\t= get_hash(opt_value);\n\t\t\tlet option_el\t\t= self.getOption(opt_hash,true) as HTMLElement;\n\n\t\t\t// toggle 'selected' class\n\t\t\tif( !self.settings.hideSelected ){\n\t\t\t\toption_el.classList.toggle('selected', self.items.includes(opt_hash) );\n\t\t\t}\n\n\t\t\toptgroup    = option[self.settings.optgroupField] || '';\n\t\t\toptgroups   = Array.isArray(optgroup) ? optgroup : [optgroup];\n\t\t\t\n\n\t\t\tfor (j = 0, k = optgroups && optgroups.length; j < k; j++) {\n\t\t\t\toptgroup = optgroups[j];\n\n\t\t\t\tlet order = option.$order;\n\t\t\t\tlet self_optgroup = self.optgroups[optgroup];\n\t\t\t\tif( self_optgroup === undefined ){\t\t\t\t\t\n\t\t\t\t\toptgroup = '';\n\t\t\t\t}else{\n\t\t\t\t\torder = self_optgroup.$order;\n\t\t\t\t}\n\n\t\t\t\tconst [group_order_i,group_fragment] = getGroupFragment(optgroup,order);\n\n\n\t\t\t\t// nodes can only have one parent, so if the option is in mutple groups, we need a clone\n\t\t\t\tif( j > 0 ){\n\t\t\t\t\toption_el = option_el.cloneNode(true) as HTMLElement;\n\t\t\t\t\tsetAttr(option_el,{id: option.$id+'-clone-'+j,'aria-selected':null});\n\t\t\t\t\toption_el.classList.add('ts-cloned');\n\t\t\t\t\tremoveClasses(option_el,'active');\n\n\n\t\t\t\t\t// make sure we keep the activeOption in the same group\n\t\t\t\t\tif( self.activeOption && self.activeOption.dataset.value == opt_value ){\n\t\t\t\t\t\tif( active_group && active_group.dataset.group === optgroup.toString() ){\n\t\t\t\t\t\t\tactive_option = option_el;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\t\n\t\t\t\t\n\t\t\t\tgroup_fragment.appendChild(option_el);\n\t\t\t\tif( optgroup != '' ){\n\t\t\t\t\tgroups[optgroup] = group_order_i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// sort optgroups\n\t\tif( self.settings.lockOptgroupOrder ){\n\t\t\tgroups_order.sort((a, b) => {\n\t\t\t\treturn a.order - b.order;\n\t\t\t});\n\t\t}\n\n\t\t// render optgroup headers & join groups\n\t\thtml = document.createDocumentFragment();\n\t\titerate( groups_order, (group_order:Group) => {\n\n\t\t\tlet group_fragment = group_order.fragment;\n\t\t\tlet optgroup = group_order.optgroup\n\n\t\t\tif( !group_fragment || !group_fragment.children.length ) return;\n\n\t\t\tlet group_heading = self.optgroups[optgroup];\n\n\t\t\tif( group_heading !== undefined ){\n\n\t\t\t\tlet group_options = document.createDocumentFragment();\n\t\t\t\tlet header = self.render('optgroup_header', group_heading);\n\t\t\t\tappend( group_options, header );\n\t\t\t\tappend( group_options, group_fragment );\n\n\t\t\t\tlet group_html = self.render('optgroup', {group:group_heading,options:group_options} );\n\n\t\t\t\tappend( html, group_html );\n\n\t\t\t} else {\n\t\t\t\tappend( html, group_fragment );\n\t\t\t}\n\t\t});\n\n\t\tdropdown_content.innerHTML = '';\n\t\tappend( dropdown_content, html );\n\n\t\t// highlight matching terms inline\n\t\tif (self.settings.highlight) {\n\t\t\tremoveHighlight( dropdown_content );\n\t\t\tif (results.query.length && results.tokens.length) {\n\t\t\t\titerate( results.tokens, (tok) => {\n\t\t\t\t\thighlight( dropdown_content, tok.regex);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// helper method for adding templates to dropdown\n\t\tvar add_template = (template:TomTemplateNames) => {\n\t\t\tlet content = self.render(template,{input:query});\n\t\t\tif( content ){\n\t\t\t\tshow_dropdown = true;\n\t\t\t\tdropdown_content.insertBefore(content, dropdown_content.firstChild);\n\t\t\t}\n\t\t\treturn content;\n\t\t};\n\n\n\t\t// add loading message\n\t\tif( self.loading ){\n\t\t\tadd_template('loading');\n\n\t\t// invalid query\n\t\t}else if( !self.settings.shouldLoad.call(self,query) ){\n\t\t\tadd_template('not_loading');\n\n\t\t// add no_results message\n\t\t}else if( results.items.length === 0 ){\n\t\t\tadd_template('no_results');\n\n\t\t}\n\n\n\n\t\t// add create option\n\t\thas_create_option = self.canCreate(query);\n\t\tif (has_create_option) {\n\t\t\tcreate = add_template('option_create');\n\t\t}\n\n\n\t\t// activate\n\t\tself.hasOptions = results.items.length > 0 || has_create_option;\n\t\tif( show_dropdown ){\n\n\t\t\tif (results.items.length > 0) {\n\n\t\t\t\tif( !active_option && self.settings.mode === 'single' && self.items[0] != undefined ){\n\t\t\t\t\tactive_option = self.getOption(self.items[0]);\n\t\t\t\t}\n\n\t\t\t\tif( !dropdown_content.contains(active_option)  ){\n\n\t\t\t\t\tlet active_index = 0;\n\t\t\t\t\tif( create && !self.settings.addPrecedence ){\n\t\t\t\t\t\tactive_index = 1;\n\t\t\t\t\t}\n\t\t\t\t\tactive_option = self.selectable()[active_index] as HTMLElement;\n\t\t\t\t}\n\n\t\t\t}else if( create ){\n\t\t\t\tactive_option = create;\n\t\t\t}\n\n\t\t\tif( triggerDropdown && !self.isOpen ){\n\t\t\t\tself.open();\n\t\t\t\tself.scrollToOption(active_option,'auto');\n\t\t\t}\n\t\t\tself.setActiveOption(active_option);\n\n\t\t}else{\n\t\t\tself.clearActiveOption();\n\t\t\tif( triggerDropdown && self.isOpen ){\n\t\t\t\tself.close(false); // if create_option=null, we want the dropdown to close but not reset the textbox value\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Return list of selectable options\n\t *\n\t */\n\tselectable():NodeList{\n\t\treturn this.dropdown_content.querySelectorAll('[data-selectable]');\n\t}\n\n\n\n\t/**\n\t * Adds an available option. If it already exists,\n\t * nothing will happen. Note: this does not refresh\n\t * the options list dropdown (use `refreshOptions`\n\t * for that).\n\t *\n\t * Usage:\n\t *\n\t *   this.addOption(data)\n\t *\n\t */\n\taddOption( data:TomOption, user_created = false ):false|string {\n\t\tconst self = this;\n\n\t\t// @deprecated 1.7.7\n\t\t// use addOptions( array, user_created ) for adding multiple options\n\t\tif( Array.isArray(data) ){\n\t\t\tself.addOptions( data, user_created);\n\t\t\treturn false;\n\t\t}\n\n\t\tconst key = hash_key(data[self.settings.valueField]);\n\t\tif( key === null || self.options.hasOwnProperty(key) ){\n\t\t\treturn false;\n\t\t}\n\n\t\tdata.$order\t\t\t= data.$order || ++self.order;\n\t\tdata.$id\t\t\t= self.inputId + '-opt-' + data.$order;\n\t\tself.options[key]\t= data;\n\t\tself.lastQuery\t\t= null;\n\n\t\tif( user_created ){\n\t\t\tself.userOptions[key] = user_created;\n\t\t\tself.trigger('option_add', key, data);\n\t\t}\n\n\t\treturn key;\n\t}\n\n\t/**\n\t * Add multiple options\n\t *\n\t */\n\taddOptions( data:TomOption[], user_created = false ):void{\n\t\titerate( data, (dat:TomOption) => {\n\t\t\tthis.addOption(dat, user_created);\n\t\t});\n\t}\n\n\t/**\n\t * @deprecated 1.7.7\n\t */\n\tregisterOption( data:TomOption ):false|string {\n\t\treturn this.addOption(data);\n\t}\n\n\t/**\n\t * Registers an option group to the pool of option groups.\n\t *\n\t * @return {boolean|string}\n\t */\n\tregisterOptionGroup(data:TomOption) {\n\t\tvar key = hash_key(data[this.settings.optgroupValueField]);\n\n\t\tif ( key === null ) return false;\n\n\t\tdata.$order = data.$order || ++this.order;\n\t\tthis.optgroups[key] = data;\n\t\treturn key;\n\t}\n\n\t/**\n\t * Registers a new optgroup for options\n\t * to be bucketed into.\n\t *\n\t */\n\taddOptionGroup(id:string, data:TomOption) {\n\t\tvar hashed_id;\n\t\tdata[this.settings.optgroupValueField] = id;\n\n\t\tif( hashed_id = this.registerOptionGroup(data) ){\n\t\t\tthis.trigger('optgroup_add', hashed_id, data);\n\t\t}\n\t}\n\n\t/**\n\t * Removes an existing option group.\n\t *\n\t */\n\tremoveOptionGroup(id:string) {\n\t\tif (this.optgroups.hasOwnProperty(id)) {\n\t\t\tdelete this.optgroups[id];\n\t\t\tthis.clearCache();\n\t\t\tthis.trigger('optgroup_remove', id);\n\t\t}\n\t}\n\n\t/**\n\t * Clears all existing option groups.\n\t */\n\tclearOptionGroups() {\n\t\tthis.optgroups = {};\n\t\tthis.clearCache();\n\t\tthis.trigger('optgroup_clear');\n\t}\n\n\t/**\n\t * Updates an option available for selection. If\n\t * it is visible in the selected items or options\n\t * dropdown, it will be re-rendered automatically.\n\t *\n\t */\n\tupdateOption(value:string, data:TomOption) {\n\t\tconst self = this;\n\t\tvar item_new;\n\t\tvar index_item;\n\n\t\tconst value_old\t\t= hash_key(value);\n\t\tconst value_new\t\t= hash_key(data[self.settings.valueField]);\n\n\t\t// sanity checks\n\t\tif( value_old === null ) return;\n\n\t\tconst data_old\t\t= self.options[value_old];\n\n\t\tif( data_old == undefined ) return;\n\t\tif( typeof value_new !== 'string' ) throw new Error('Value must be set in option data');\n\n\n\t\tconst option\t\t= self.getOption(value_old);\n\t\tconst item\t\t\t= self.getItem(value_old);\n\n\n\t\tdata.$order = data.$order || data_old.$order;\n\t\tdelete self.options[value_old];\n\n\t\t// invalidate render cache\n\t\t// don't remove existing node yet, we'll remove it after replacing it\n\t\tself.uncacheValue(value_new);\n\n\t\tself.options[value_new] = data;\n\n\t\t// update the option if it's in the dropdown\n\t\tif( option ){\n\t\t\tif( self.dropdown_content.contains(option) ){\n\n\t\t\t\tconst option_new\t= self._render('option', data);\n\t\t\t\treplaceNode(option, option_new);\n\n\t\t\t\tif( self.activeOption === option ){\n\t\t\t\t\tself.setActiveOption(option_new);\n\t\t\t\t}\n\t\t\t}\n\t\t\toption.remove();\n\t\t}\n\n\t\t// update the item if we have one\n\t\tif( item ){\n\t\t\tindex_item = self.items.indexOf(value_old);\n\t\t\tif (index_item !== -1) {\n\t\t\t\tself.items.splice(index_item, 1, value_new);\n\t\t\t}\n\n\t\t\titem_new\t= self._render('item', data);\n\n\t\t\tif( item.classList.contains('active') ) addClasses(item_new,'active');\n\n\t\t\treplaceNode( item, item_new);\n\t\t}\n\n\t\t// invalidate last query because we might have updated the sortField\n\t\tself.lastQuery = null;\n\t}\n\n\t/**\n\t * Removes a single option.\n\t *\n\t */\n\tremoveOption(value:string, silent?:boolean):void {\n\t\tconst self = this;\n\t\tvalue = get_hash(value);\n\n\t\tself.uncacheValue(value);\n\n\t\tdelete self.userOptions[value];\n\t\tdelete self.options[value];\n\t\tself.lastQuery = null;\n\t\tself.trigger('option_remove', value);\n\t\tself.removeItem(value, silent);\n\t}\n\n\t/**\n\t * Clears all options.\n\t */\n\tclearOptions(filter?:TomClearFilter ) {\n\n\t\tconst boundFilter = (filter || this.clearFilter).bind(this);\n\n\t\tthis.loadedSearches\t\t= {};\n\t\tthis.userOptions\t\t= {};\n\t\tthis.clearCache();\n\n\t\tconst selected:TomOptions\t= {};\n\t\titerate(this.options,(option:TomOption,key:string)=>{\n\t\t\tif( boundFilter(option,key as string) ){\n\t\t\t\tselected[key] = option;\n\t\t\t}\n\t\t});\n\n\t\tthis.options = this.sifter.items = selected;\n\t\tthis.lastQuery = null;\n\t\tthis.trigger('option_clear');\n\t}\n\n\t/**\n\t * Used by clearOptions() to decide whether or not an option should be removed\n\t * Return true to keep an option, false to remove\n\t *\n\t */\n\tclearFilter(option:TomOption,value:string){\n\t\tif( this.items.indexOf(value) >= 0 ){\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Returns the dom element of the option\n\t * matching the given value.\n\t *\n\t */\n\tgetOption(value:undefined|null|boolean|string|number, create:boolean=false):null|HTMLElement {\n\n\t\tconst hashed = hash_key(value);\n\t\tif( hashed === null ) return null;\n\n\t\tconst option = this.options[hashed];\n\t\tif( option != undefined ){\n\n\t\t\tif( option.$div ){\n\t\t\t\treturn option.$div;\n\t\t\t}\n\n\t\t\tif( create ){\n\t\t\t\treturn this._render('option', option);\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Returns the dom element of the next or previous dom element of the same type\n\t * Note: adjacent options may not be adjacent DOM elements (optgroups)\n\t *\n\t */\n\tgetAdjacent( option:null|HTMLElement, direction:number, type:string = 'option' ) : HTMLElement|null{\n\t\tvar self = this, all;\n\n\t\tif( !option ){\n\t\t\treturn null;\n\t\t}\n\n\t\tif( type == 'item' ){\n\t\t\tall\t\t\t= self.controlChildren();\n\t\t}else{\n\t\t\tall\t\t\t= self.dropdown_content.querySelectorAll('[data-selectable]');\n\t\t}\n\n\t\tfor( let i = 0; i < all.length; i++ ){\n\t\t\tif( all[i] != option ){\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif( direction > 0 ){\n\t\t\t\treturn all[i+1] as HTMLElement;\n\t\t\t}\n\n\t\t\treturn all[i-1] as HTMLElement;\n\t\t}\n\t\treturn null;\n\t}\n\n\n\t/**\n\t * Returns the dom element of the item\n\t * matching the given value.\n\t *\n\t */\n\tgetItem(item:string|TomItem|null):null|TomItem {\n\n\t\tif( typeof item == 'object' ){\n\t\t\treturn item;\n\t\t}\n\n\t\tvar value = hash_key(item);\n\t\treturn value !== null\n\t\t\t? this.control.querySelector(`[data-value=\"${addSlashes(value)}\"]`)\n\t\t\t: null;\n\t}\n\n\t/**\n\t * \"Selects\" multiple items at once. Adds them to the list\n\t * at the current caret position.\n\t *\n\t */\n\taddItems( values:string|string[], silent?:boolean ):void{\n\t\tvar self = this;\n\n\t\tvar items = Array.isArray(values) ? values : [values];\n\t\titems = items.filter(x => self.items.indexOf(x) === -1);\n\t\tconst last_item = items[items.length - 1];\n\t\titems.forEach(item => {\n\t\t\tself.isPending = (item !== last_item);\n\t\t\tself.addItem(item, silent);\n\t\t});\n\t}\n\n\t/**\n\t * \"Selects\" an item. Adds it to the list\n\t * at the current caret position.\n\t *\n\t */\n\taddItem( value:string, silent?:boolean ):void{\n\t\tvar events = silent ? [] : ['change','dropdown_close'];\n\n\t\tdebounce_events(this, events, () => {\n\t\t\tvar item, wasFull;\n\t\t\tconst self = this;\n\t\t \tconst inputMode = self.settings.mode;\n\t\t\tconst hashed = hash_key(value);\n\n\t\t\tif( hashed && self.items.indexOf(hashed) !== -1 ){\n\n\t\t\t\tif( inputMode === 'single' ){\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\n\t\t\t\tif( inputMode === 'single' || !self.settings.duplicates ){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (hashed === null || !self.options.hasOwnProperty(hashed)) return;\n\t\t\tif (inputMode === 'single') self.clear(silent);\n\t\t\tif (inputMode === 'multi' && self.isFull()) return;\n\n\t\t\titem = self._render('item', self.options[hashed]);\n\n\t\t\tif( self.control.contains(item) ){ // duplicates\n\t\t\t\titem = item.cloneNode(true) as HTMLElement;\n\t\t\t}\n\n\t\t\twasFull = self.isFull();\n\t\t\tself.items.splice(self.caretPos, 0, hashed);\n\t\t\tself.insertAtCaret(item);\n\n\t\t\tif (self.isSetup) {\n\n\t\t\t\t// update menu / remove the option (if this is not one item being added as part of series)\n\t\t\t\tif( !self.isPending && self.settings.hideSelected ){\n\t\t\t\t\tlet option = self.getOption(hashed);\n\t\t\t\t\tlet next = self.getAdjacent(option, 1);\n\t\t\t\t\tif( next ){\n\t\t\t\t\t\tself.setActiveOption(next);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// refreshOptions after setActiveOption(),\n\t\t\t\t// otherwise setActiveOption() will be called by refreshOptions() with the wrong value\n\t\t\t\tif( !self.isPending && !self.settings.closeAfterSelect ){\n\t\t\t\t\tself.refreshOptions(self.isFocused && inputMode !== 'single');\n\t\t\t\t}\n\n\t\t\t\t// hide the menu if the maximum number of items have been selected or no options are left\n\t\t\t\tif( self.settings.closeAfterSelect != false && self.isFull() ){\n\t\t\t\t\tself.close();\n\t\t\t\t} else if (!self.isPending) {\n\t\t\t\t\tself.positionDropdown();\n\t\t\t\t}\n\n\t\t\t\tself.trigger('item_add', hashed, item);\n\n\t\t\t\tif (!self.isPending) {\n\t\t\t\t\tself.updateOriginalInput({silent: silent});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!self.isPending || (!wasFull && self.isFull())) {\n\t\t\t\tself.inputState();\n\t\t\t\tself.refreshState();\n\t\t\t}\n\n\t\t});\n\t}\n\n\t/**\n\t * Removes the selected item matching\n\t * the provided value.\n\t *\n\t */\n\tremoveItem( item:string|TomItem|null=null, silent?:boolean ){\n\t\tconst self\t\t= this;\n\t\titem\t\t\t= self.getItem(item);\n\n\t\tif( !item ) return;\n\n\t\tvar i,idx;\n\t\tconst value\t= item.dataset.value;\n\t\ti = nodeIndex(item);\n\n\t\titem.remove();\n\t\tif( item.classList.contains('active') ){\n\t\t\tidx = self.activeItems.indexOf(item);\n\t\t\tself.activeItems.splice(idx, 1);\n\t\t\tremoveClasses(item,'active');\n\t\t}\n\n\t\tself.items.splice(i, 1);\n\t\tself.lastQuery = null;\n\t\tif (!self.settings.persist && self.userOptions.hasOwnProperty(value)) {\n\t\t\tself.removeOption(value, silent);\n\t\t}\n\n\t\tif (i < self.caretPos) {\n\t\t\tself.setCaret(self.caretPos - 1);\n\t\t}\n\n\t\tself.updateOriginalInput({silent: silent});\n\t\tself.refreshState();\n\t\tself.positionDropdown();\n\t\tself.trigger('item_remove', value, item);\n\n\t}\n\n\t/**\n\t * Invokes the `create` method provided in the\n\t * TomSelect options that should provide the data\n\t * for the new item, given the user input.\n\t *\n\t * Once this completes, it will be added\n\t * to the item list.\n\t *\n\t */\n\tcreateItem( input:null|string=null, callback:TomCreateCallback = ()=>{} ):boolean{\n\n\t\t// triggerDropdown parameter @deprecated 2.1.1\n\t\tif( arguments.length === 3 ){\n\t\t\tcallback = arguments[2];\n\t\t}\n\t\tif( typeof callback != 'function' ){\n\t\t\tcallback = () => {};\n\t\t}\n\n\t\tvar self  = this;\n\t\tvar caret = self.caretPos;\n\t\tvar output;\n\t\tinput = input || self.inputValue();\n\n\t\tif (!self.canCreate(input)) {\n\t\t\tcallback();\n\t\t\treturn false;\n\t\t}\n\n\t\tself.lock();\n\n\t\tvar created = false;\n\t\tvar create = (data?:boolean|TomOption) => {\n\t\t\tself.unlock();\n\n\t\t\tif (!data || typeof data !== 'object') return callback();\n\t\t\tvar value = hash_key(data[self.settings.valueField]);\n\t\t\tif( typeof value !== 'string' ){\n\t\t\t\treturn callback();\n\t\t\t}\n\n\t\t\tself.setTextboxValue();\n\t\t\tself.addOption(data,true);\n\t\t\tself.setCaret(caret);\n\t\t\tself.addItem(value);\n\t\t\tcallback(data);\n\t\t\tcreated = true;\n\t\t};\n\n\t\tif( typeof self.settings.create === 'function' ){\n\t\t\toutput = self.settings.create.call(this, input, create);\n\t\t}else{\n\t\t\toutput = {\n\t\t\t\t[self.settings.labelField]: input,\n\t\t\t\t[self.settings.valueField]: input,\n\t\t\t};\n\t\t}\n\n\t\tif( !created ){\n\t\t\tcreate(output);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Re-renders the selected item lists.\n\t */\n\trefreshItems() {\n\t\tvar self = this;\n\t\tself.lastQuery = null;\n\n\t\tif (self.isSetup) {\n\t\t\tself.addItems(self.items);\n\t\t}\n\n\t\tself.updateOriginalInput();\n\t\tself.refreshState();\n\t}\n\n\t/**\n\t * Updates all state-dependent attributes\n\t * and CSS classes.\n\t */\n\trefreshState() {\n\t\tconst self     = this;\n\n\t\tself.refreshValidityState();\n\n\t\tconst isFull\t= self.isFull();\n\t\tconst isLocked\t= self.isLocked;\n\n\t\tself.wrapper.classList.toggle('rtl',self.rtl);\n\n\n\t\tconst wrap_classList = self.wrapper.classList;\n\n\t\twrap_classList.toggle('focus', self.isFocused)\n\t\twrap_classList.toggle('disabled', self.isDisabled)\n\t\twrap_classList.toggle('readonly', self.isReadOnly)\n\t\twrap_classList.toggle('required', self.isRequired)\n\t\twrap_classList.toggle('invalid', !self.isValid)\n\t\twrap_classList.toggle('locked', isLocked)\n\t\twrap_classList.toggle('full', isFull)\n\t\twrap_classList.toggle('input-active', self.isFocused && !self.isInputHidden)\n\t\twrap_classList.toggle('dropdown-active', self.isOpen)\n\t\twrap_classList.toggle('has-options', isEmptyObject(self.options) )\n\t\twrap_classList.toggle('has-items', self.items.length > 0);\n\n\t}\n\n\n\t/**\n\t * Update the `required` attribute of both input and control input.\n\t *\n\t * The `required` property needs to be activated on the control input\n\t * for the error to be displayed at the right place. `required` also\n\t * needs to be temporarily deactivated on the input since the input is\n\t * hidden and can't show errors.\n\t */\n\trefreshValidityState() {\n\t\tvar self = this;\n\n\t\tif( !self.input.validity ){\n\t\t\treturn;\n\t\t}\n\n\t\tself.isValid = self.input.validity.valid;\n\t\tself.isInvalid = !self.isValid;\n\t}\n\n\t/**\n\t * Determines whether or not more items can be added\n\t * to the control without exceeding the user-defined maximum.\n\t *\n\t * @returns {boolean}\n\t */\n\tisFull() {\n\t\treturn this.settings.maxItems !== null && this.items.length >= this.settings.maxItems;\n\t}\n\n\t/**\n\t * Refreshes the original <select> or <input>\n\t * element to reflect the current state.\n\t *\n\t */\n\tupdateOriginalInput( opts:TomArgObject = {} ){\n\t\tconst self = this;\n\t\tvar option, label;\n\n\t\tconst empty_option = self.input.querySelector('option[value=\"\"]') as HTMLOptionElement;\n\n\t\tif( self.is_select_tag ){\n\n\t\t\tconst selected:HTMLOptionElement[]\t\t= [];\n\t\t\tconst has_selected:number\t\t\t\t= self.input.querySelectorAll('option:checked').length;\n\n\t\t\tfunction AddSelected(option_el:HTMLOptionElement|null, value:string, label:string):HTMLOptionElement{\n\n\t\t\t\tif( !option_el ){\n\t\t\t\t\toption_el = getDom('<option value=\"' + escape_html(value) + '\">' + escape_html(label) + '</option>') as HTMLOptionElement;\n\t\t\t\t}\n\n\t\t\t\t// don't move empty option from top of list\n\t\t\t\t// fixes bug in firefox https://bugzilla.mozilla.org/show_bug.cgi?id=1725293\n\t\t\t\tif( option_el != empty_option ){\n\t\t\t\t\tself.input.append(option_el);\n\t\t\t\t}\n\n\t\t\t\tselected.push(option_el);\n\n\t\t\t\t// marking empty option as selected can break validation\n\t\t\t\t// fixes https://github.com/orchidjs/tom-select/issues/303\n\t\t\t\tif( option_el != empty_option || has_selected > 0 ){\n\t\t\t\t\toption_el.selected = true;\n\t\t\t\t}\n\n\t\t\t\treturn option_el;\n\t\t\t}\n\n\t\t\t// unselect all selected options\n\t\t\tself.input.querySelectorAll('option:checked').forEach((option_el:Element) => {\n\t\t\t\t(<HTMLOptionElement>option_el).selected = false;\n\t\t\t});\n\n\n\t\t\t// nothing selected?\n\t\t\tif( self.items.length == 0 && self.settings.mode == 'single' ){\n\n\t\t\t\tAddSelected(empty_option, \"\", \"\");\n\n\t\t\t// order selected <option> tags for values in self.items\n\t\t\t}else{\n\n\t\t\t\tself.items.forEach((value)=>{\n\t\t\t\t\toption\t\t\t= self.options[value]!;\n\t\t\t\t\tlabel\t\t\t= option[self.settings.labelField] || '';\n\n\t\t\t\t\tif( selected.includes(option.$option) ){\n\t\t\t\t\t\tconst reuse_opt = self.input.querySelector(`option[value=\"${addSlashes(value)}\"]:not(:checked)`) as HTMLOptionElement;\n\t\t\t\t\t\tAddSelected(reuse_opt, value, label);\n\t\t\t\t\t}else{\n\t\t\t\t\t\toption.$option\t= AddSelected(option.$option, value, label);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t}\n\n\t\t} else {\n\t\t\tself.input.value = self.getValue() as string;\n\t\t}\n\n\t\tif (self.isSetup) {\n\t\t\tif (!opts.silent) {\n\t\t\t\tself.trigger('change', self.getValue() );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Shows the autocomplete dropdown containing\n\t * the available options.\n\t */\n\topen() {\n\t\tvar self = this;\n\n\t\tif (self.isLocked || self.isOpen || (self.settings.mode === 'multi' && self.isFull())) return;\n\t\tself.isOpen = true;\n\t\tsetAttr(self.focus_node,{'aria-expanded': 'true'});\n\t\tself.refreshState();\n\t\tapplyCSS(self.dropdown,{visibility: 'hidden', display: 'block'});\n\t\tself.positionDropdown();\n\t\tapplyCSS(self.dropdown,{visibility: 'visible', display: 'block'});\n\t\tself.focus();\n\t\tself.trigger('dropdown_open', self.dropdown);\n\t}\n\n\t/**\n\t * Closes the autocomplete dropdown menu.\n\t */\n\tclose(setTextboxValue=true) {\n\t\tvar self = this;\n\t\tvar trigger = self.isOpen;\n\n\t\tif( setTextboxValue ){\n\n\t\t\t// before blur() to prevent form onchange event\n\t\t\tself.setTextboxValue();\n\n\t\t\tif (self.settings.mode === 'single' && self.items.length) {\n\t\t\t\tself.inputState();\n\t\t\t}\n\t\t}\n\n\t\tself.isOpen = false;\n\t\tsetAttr(self.focus_node,{'aria-expanded': 'false'});\n\t\tapplyCSS(self.dropdown,{display: 'none'});\n\t\tif( self.settings.hideSelected ){\n\t\t\tself.clearActiveOption();\n\t\t}\n\t\tself.refreshState();\n\n\t\tif (trigger) self.trigger('dropdown_close', self.dropdown);\n\t}\n\n\t/**\n\t * Calculates and applies the appropriate\n\t * position of the dropdown if dropdownParent = 'body'.\n\t * Otherwise, position is determined by css\n\t */\n\tpositionDropdown(){\n\n\t\tif( this.settings.dropdownParent !== 'body' ){\n\t\t\treturn;\n\t\t}\n\n\t\tvar context\t\t\t= this.control;\n\t\tvar rect\t\t\t= context.getBoundingClientRect();\n\t\tvar top\t\t\t\t= context.offsetHeight + rect.top  + window.scrollY;\n\t\tvar left\t\t\t= rect.left + window.scrollX;\n\n\n\t\tapplyCSS(this.dropdown,{\n\t\t\twidth : rect.width + 'px',\n\t\t\ttop   : top + 'px',\n\t\t\tleft  : left + 'px'\n\t\t});\n\n\t}\n\n\t/**\n\t * Resets / clears all selected items\n\t * from the control.\n\t *\n\t */\n\tclear(silent?:boolean) {\n\t\tvar self = this;\n\n\t\tif (!self.items.length) return;\n\n\t\tvar items = self.controlChildren();\n\t\titerate(items,(item:TomItem)=>{\n\t\t\tself.removeItem(item,true);\n\t\t});\n\n\t\tself.inputState();\n\t\tif( !silent ) self.updateOriginalInput();\n\t\tself.trigger('clear');\n\t}\n\n\t/**\n\t * A helper method for inserting an element\n\t * at the current caret position.\n\t *\n\t */\n\tinsertAtCaret(el:HTMLElement) {\n\t\tconst self\t\t= this;\n\t\tconst caret\t\t= self.caretPos;\n\t\tconst target\t= self.control;\n\n\t\ttarget.insertBefore(el, target.children[caret] || null);\n\t\tself.setCaret(caret + 1);\n\t}\n\n\t/**\n\t * Removes the current selected item(s).\n\t *\n\t */\n\tdeleteSelection(e:KeyboardEvent):boolean {\n\t\tvar direction, selection, caret, tail;\n\t\tvar self = this;\n\n\t\tdirection = (e && e.keyCode === constants.KEY_BACKSPACE) ? -1 : 1;\n\t\tselection = getSelection(self.control_input);\n\n\n\t\t// determine items that will be removed\n\t\tconst rm_items:TomItem[]\t= [];\n\n\t\tif (self.activeItems.length) {\n\n\t\t\ttail = getTail(self.activeItems, direction);\n\t\t\tcaret = nodeIndex(tail);\n\n\t\t\tif (direction > 0) { caret++; }\n\n\t\t\titerate(self.activeItems, (item:TomItem) => rm_items.push(item) );\n\n\t\t} else if ((self.isFocused || self.settings.mode === 'single') && self.items.length) {\n\t\t\tconst items = self.controlChildren();\n\t\t\tlet rm_item;\n\t\t\tif( direction < 0 && selection.start === 0 && selection.length === 0 ){\n\t\t\t\trm_item = items[self.caretPos - 1];\n\n\t\t\t}else if( direction > 0 && selection.start === self.inputValue().length ){\n\t\t\t\trm_item = items[self.caretPos];\n\t\t\t}\n\n\t\t\tif( rm_item !== undefined ){\n\t\t\t\trm_items.push( rm_item );\n\t\t\t}\n\t\t}\n\n\t\tif( !self.shouldDelete(rm_items,e) ){\n\t\t\treturn false;\n\t\t}\n\n\t\tpreventDefault(e,true);\n\n\t\t// perform removal\n\t\tif (typeof caret !== 'undefined') {\n\t\t\tself.setCaret(caret);\n\t\t}\n\n\t\twhile( rm_items.length ){\n\t\t\tself.removeItem(rm_items.pop());\n\t\t}\n\n\t\tself.inputState();\n\t\tself.positionDropdown();\n\t\tself.refreshOptions(false);\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Return true if the items should be deleted\n\t */\n\tshouldDelete(items:TomItem[],evt:MouseEvent|KeyboardEvent){\n\n\t\tconst values = items.map(item => item.dataset.value);\n\n\t\t// allow the callback to abort\n\t\tif( !values.length || (typeof this.settings.onDelete === 'function' && this.settings.onDelete(values,evt) === false) ){\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Selects the previous / next item (depending on the `direction` argument).\n\t *\n\t * > 0 - right\n\t * < 0 - left\n\t *\n\t */\n\tadvanceSelection(direction:number, e?:MouseEvent|KeyboardEvent) {\n\t\tvar last_active, adjacent, self = this;\n\n\t\tif (self.rtl) direction *= -1;\n\t\tif( self.inputValue().length ) return;\n\n\n\t\t// add or remove to active items\n\t\tif( isKeyDown(constants.KEY_SHORTCUT,e) || isKeyDown('shiftKey',e) ){\n\n\t\t\tlast_active\t\t\t= self.getLastActive(direction);\n\t\t\tif( last_active ){\n\n\t\t\t\tif( !last_active.classList.contains('active') ){\n\t\t\t\t\tadjacent\t\t\t= last_active;\n\t\t\t\t}else{\n\t\t\t\t\tadjacent\t\t\t= self.getAdjacent(last_active,direction,'item');\n\t\t\t\t}\n\n\t\t\t// if no active item, get items adjacent to the control input\n\t\t\t}else if( direction > 0 ){\n\t\t\t\tadjacent\t\t\t= self.control_input.nextElementSibling;\n\t\t\t}else{\n\t\t\t\tadjacent\t\t\t= self.control_input.previousElementSibling;\n\t\t\t}\n\n\n\t\t\tif( adjacent ){\n\t\t\t\tif( adjacent.classList.contains('active') ){\n\t\t\t\t\tself.removeActiveItem(last_active);\n\t\t\t\t}\n\t\t\t\tself.setActiveItemClass(adjacent); // mark as last_active !! after removeActiveItem() on last_active\n\t\t\t}\n\n\t\t// move caret to the left or right\n\t\t}else{\n\t\t\tself.moveCaret(direction);\n\t\t}\n\t}\n\n\tmoveCaret(direction:number){}\n\n\t/**\n\t * Get the last active item\n\t *\n\t */\n\tgetLastActive(direction?:number){\n\n\t\tlet last_active = this.control.querySelector('.last-active');\n\t\tif( last_active ){\n\t\t\treturn last_active;\n\t\t}\n\n\n\t\tvar result = this.control.querySelectorAll('.active');\n\t\tif( result ){\n\t\t\treturn getTail(result,direction);\n\t\t}\n\t}\n\n\n\t/**\n\t * Moves the caret to the specified index.\n\t *\n\t * The input must be moved by leaving it in place and moving the\n\t * siblings, due to the fact that focus cannot be restored once lost\n\t * on mobile webkit devices\n\t *\n\t */\n\tsetCaret(new_pos:number) {\n\t\tthis.caretPos = this.items.length;\n\t}\n\n\t/**\n\t * Return list of item dom elements\n\t *\n\t */\n\tcontrolChildren():TomItem[]{\n\t\treturn Array.from( this.control.querySelectorAll('[data-ts-item]') ) as TomItem[];\n\t}\n\n\t/**\n\t * Disables user input on the control. Used while\n\t * items are being asynchronously created.\n\t */\n\tlock() {\n\t\tthis.setLocked(true);\n\t}\n\n\t/**\n\t * Re-enables user input on the control.\n\t */\n\tunlock() {\n\t\tthis.setLocked(false);\n\t}\n\n\t/**\n\t * Disable or enable user input on the control\n\t */\n\tsetLocked( lock:boolean = this.isReadOnly || this.isDisabled ){\n\t\tthis.isLocked = lock;\n\t\tthis.refreshState();\n\t}\n\n\t/**\n\t * Disables user input on the control completely.\n\t * While disabled, it cannot receive focus.\n\t */\n\tdisable() {\n\t\tthis.setDisabled(true);\n\t\tthis.close();\n\t}\n\n\t/**\n\t * Enables the control so that it can respond\n\t * to focus and user input.\n\t */\n\tenable() {\n\t\tthis.setDisabled(false);\n\t}\n\n\tsetDisabled(disabled:boolean){\n\t\tthis.focus_node.tabIndex\t\t= disabled ? -1 : this.tabIndex;\n\t\tthis.isDisabled\t\t\t\t\t= disabled;\n\t\tthis.input.disabled\t\t\t\t= disabled;\n\t\tthis.control_input.disabled\t\t= disabled;\n\t\tthis.setLocked();\n\t}\n\n\tsetReadOnly(isReadOnly:boolean){\n\t\tthis.isReadOnly\t\t\t\t\t= isReadOnly;\n\t\tthis.input.readOnly\t\t\t\t= isReadOnly;\n\t\tthis.control_input.readOnly\t\t= isReadOnly;\n\t\tthis.setLocked();\n\t}\n\n\t/**\n\t * Completely destroys the control and\n\t * unbinds all event listeners so that it can\n\t * be garbage collected.\n\t */\n\tdestroy() {\n\t\tvar self = this;\n\t\tvar revertSettings = self.revertSettings;\n\n\t\tself.trigger('destroy');\n\t\tself.off();\n\t\tself.wrapper.remove();\n\t\tself.dropdown.remove();\n\n\t\tself.input.innerHTML = revertSettings.innerHTML;\n\t\tself.input.tabIndex = revertSettings.tabIndex;\n\n\t\tremoveClasses(self.input,'tomselected','ts-hidden-accessible');\n\n\t\tself._destroy();\n\n\t\tdelete self.input.tomselect;\n\t}\n\n\t/**\n\t * A helper method for rendering \"item\" and\n\t * \"option\" templates, given the data.\n\t *\n\t */\n\trender( templateName:TomTemplateNames, data?:any ):null|HTMLElement{\n\t\tvar id, html;\n\t\tconst self = this;\n\n\t\tif( typeof this.settings.render[templateName] !== 'function' ){\n\t\t\treturn null;\n\t\t}\n\n\t\t// render markup\n\t\thtml = self.settings.render[templateName].call(this, data, escape_html);\n\n\t\tif( !html ){\n\t\t\treturn null;\n\t\t}\n\n\t\thtml = getDom( html );\n\n\t\t// add mandatory attributes\n\t\tif (templateName === 'option' || templateName === 'option_create') {\n\n\t\t\tif( data[self.settings.disabledField] ){\n\t\t\t\tsetAttr(html,{'aria-disabled':'true'});\n\t\t\t}else{\n\t\t\t\tsetAttr(html,{'data-selectable': ''});\n\t\t\t}\n\n\t\t}else if (templateName === 'optgroup') {\n\t\t\tid = data.group[self.settings.optgroupValueField];\n\t\t\tsetAttr(html,{'data-group': id});\n\t\t\tif(data.group[self.settings.disabledField]) {\n\t\t\t\tsetAttr(html,{'data-disabled': ''});\n\t\t\t}\n\t\t}\n\n\t\tif (templateName === 'option' || templateName === 'item') {\n\t\t\tconst value\t= get_hash(data[self.settings.valueField]);\n\t\t\tsetAttr(html,{'data-value': value });\n\n\n\t\t\t// make sure we have some classes if a template is overwritten\n\t\t\tif( templateName === 'item' ){\n\t\t\t\taddClasses(html,self.settings.itemClass);\n\t\t\t\tsetAttr(html,{'data-ts-item':''});\n\t\t\t}else{\n\t\t\t\taddClasses(html,self.settings.optionClass);\n\t\t\t\tsetAttr(html,{\n\t\t\t\t\trole:'option',\n\t\t\t\t\tid:data.$id\n\t\t\t\t});\n\n\t\t\t\t// update cache\n\t\t\t\tdata.$div = html;\n\t\t\t\tself.options[value] = data;\n\t\t\t}\n\n\n\t\t}\n\n\t\treturn html;\n\n\t}\n\n\n\t/**\n\t * Type guarded rendering\n\t *\n\t */\n\t_render( templateName:TomTemplateNames, data?:any ):HTMLElement{\n\t\tconst html = this.render(templateName, data);\n\n\t\tif( html == null ){\n\t\t\tthrow 'HTMLElement expected';\n\t\t}\n\t\treturn html;\n\t}\n\n\n\t/**\n\t * Clears the render cache for a template. If\n\t * no template is given, clears all render\n\t * caches.\n\t *\n\t */\n\tclearCache():void{\n\n\t\titerate(this.options, (option:TomOption)=>{\n\t\t\tif( option.$div ){\n\t\t\t\toption.$div.remove();\n\t\t\t\tdelete option.$div;\n\t\t\t}\n\t\t});\n\n\t}\n\n\t/**\n\t * Removes a value from item and option caches\n\t *\n\t */\n\tuncacheValue(value:string){\n\n\t\tconst option_el\t\t\t= this.getOption(value);\n\t\tif( option_el ) option_el.remove();\n\n\t}\n\n\t/**\n\t * Determines whether or not to display the\n\t * create item prompt, given a user input.\n\t *\n\t */\n\tcanCreate( input:string ):boolean {\n\t\treturn this.settings.create && (input.length > 0) && (this.settings.createFilter as TomCreateFilter ).call(this, input);\n\t}\n\n\n\t/**\n\t * Wraps this.`method` so that `new_fn` can be invoked 'before', 'after', or 'instead' of the original method\n\t *\n\t * this.hook('instead','onKeyDown',function( arg1, arg2 ...){\n\t *\n\t * });\n\t */\n\thook( when:string, method:string, new_fn:any ){\n\t\tvar self = this;\n\t\tvar orig_method = self[method];\n\n\n\t\tself[method] = function(){\n\t\t\tvar result, result_new;\n\n\t\t\tif( when === 'after' ){\n\t\t\t\tresult = orig_method.apply(self, arguments);\n\t\t\t}\n\n\t\t\tresult_new = new_fn.apply(self, arguments );\n\n\t\t\tif( when === 'instead' ){\n\t\t\t\treturn result_new;\n\t\t\t}\n\n\t\t\tif( when === 'before' ){\n\t\t\t\tresult = orig_method.apply(self, arguments);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\n\t}\n\n};\n", "/**\n * Plugin: \"change_listener\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport { addEvent } from '../../utils';\n\nexport default function(this:TomSelect) {\n\taddEvent(this.input,'change',()=>{\n\t\tthis.sync();\n\t});\n};\n", "/**\n * Plugin: \"checkbox_options\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport { preventDefault, hash_key } from '../../utils';\nimport { getDom } from '../../vanilla';\nimport { CBOptions } from './types';\n\n\nexport default function(this:TomSelect, userOptions:CBOptions) {\n\tvar self = this;\n\tvar orig_onOptionSelect = self.onOptionSelect;\n\n\tself.settings.hideSelected = false;\n\n\tconst cbOptions : CBOptions = Object.assign({\n\t\t// so that the user may add different ones as well\n\t\tclassName             : \"tomselect-checkbox\",\n\n\t\t// the following default to the historic plugin's values\n\t\tcheckedClassNames     : undefined,\n\t\tuncheckedClassNames   : undefined,\n\t}, userOptions);\n\n\n\tvar UpdateChecked = function(checkbox:HTMLInputElement, toCheck : boolean) {\n\t\tif( toCheck ){\n\t\t\tcheckbox.checked = true;\n\t\t\tif (cbOptions.uncheckedClassNames) {\n\t\t\t\tcheckbox.classList.remove(...cbOptions.uncheckedClassNames);\n\t\t\t}\n\t\t\tif (cbOptions.checkedClassNames) {\n\t\t\t\tcheckbox.classList.add(...cbOptions.checkedClassNames);\n\t\t\t}\n\t\t}else{\n\t\t\tcheckbox.checked = false;\n\t\t\tif (cbOptions.checkedClassNames) {\n\t\t\t\tcheckbox.classList.remove(...cbOptions.checkedClassNames);\n\t\t\t}\n\t\t\tif (cbOptions.uncheckedClassNames) {\n\t\t\t\tcheckbox.classList.add(...cbOptions.uncheckedClassNames);\n\t\t\t}\n\t\t}\n\t}\n\n\t// update the checkbox for an option\n\tvar UpdateCheckbox = function(option:HTMLElement){\n\t\tsetTimeout(()=>{\n\t\t\tvar checkbox = option.querySelector('input.' + cbOptions.className);\n\t\t\tif( checkbox instanceof HTMLInputElement ){\n\t\t\t\tUpdateChecked(checkbox, option.classList.contains('selected'));\n\t\t\t}\n\t\t},1);\n\t};\n\n\t// add checkbox to option template\n\tself.hook('after','setupTemplates',() => {\n\n\t\tvar orig_render_option = self.settings.render.option;\n\n\t\tself.settings.render.option = (data, escape_html) => {\n\t\t\tvar rendered = getDom(orig_render_option.call(self, data, escape_html));\n\t\t\tvar checkbox = document.createElement('input');\n\t\t\tif (cbOptions.className) {\n\t\t\t\tcheckbox.classList.add(cbOptions.className);\n\t\t\t}\n\t\t\tcheckbox.addEventListener('click',function(evt){\n\t\t\t\tpreventDefault(evt);\n\t\t\t});\n\n\t\t\tcheckbox.type = 'checkbox';\n\t\t\tconst hashed = hash_key(data[self.settings.valueField]);\n\n\t\t\tUpdateChecked(checkbox, !!(hashed && self.items.indexOf(hashed) > -1) );\n\n\t\t\trendered.prepend(checkbox);\n\t\t\treturn rendered;\n\t\t};\n\t});\n\n\t// uncheck when item removed\n\tself.on('item_remove',(value:string) => {\n\t\tvar option = self.getOption(value);\n\n\t\tif( option ){ // if dropdown hasn't been opened yet, the option won't exist\n\t\t\toption.classList.remove('selected'); // selected class won't be removed yet\n\t\t\tUpdateCheckbox(option);\n\t\t}\n\t});\n\n\t// check when item added\n\tself.on('item_add',(value:string) => {\n\t\tvar option = self.getOption(value);\n\n\t\tif( option ){ // if dropdown hasn't been opened yet, the option won't exist\n\t\t\tUpdateCheckbox(option);\n\t\t}\n\t});\n\n\n\t// remove items when selected option is clicked\n\tself.hook('instead','onOptionSelect',( evt:KeyboardEvent, option:HTMLElement )=>{\n\n\t\tif( option.classList.contains('selected') ){\n\t\t\toption.classList.remove('selected')\n\t\t\tself.removeItem(option.dataset.value);\n\t\t\tself.refreshOptions();\n\t\t\tpreventDefault(evt,true);\n\t\t\treturn;\n        }\n\n\t\torig_onOptionSelect.call(self, evt, option);\n\n\t\tUpdateCheckbox(option);\n\t});\n\n};\n", "/**\n * Plugin: \"dropdown_header\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport { getDom } from '../../vanilla';\nimport { CBOptions } from './types';\n\nexport default function(this:TomSelect, userOptions:CBOptions) {\n\tconst self = this;\n\n\tconst options = Object.assign({\n\t\tclassName: 'clear-button',\n\t\ttitle: 'Clear All',\n\t\thtml: (data:CBOptions) => {\n\t\t\treturn `<div class=\"${data.className}\" title=\"${data.title}\">&#10799;</div>`;\n\t\t}\n\t}, userOptions);\n\n\tself.on('initialize',()=>{\n\t\tvar button = getDom(options.html(options));\n\t\tbutton.addEventListener('click',(evt)=>{\n\n\t\t\tif( self.isLocked ) return;\n\n\t\t\tself.clear();\n\n\t\t\tif( self.settings.mode === 'single' && self.settings.allowEmptyOption ){\n\t\t\t\tself.addItem('');\n\t\t\t}\n\n\t\t\tevt.preventDefault();\n\t\t\tevt.stopPropagation();\n\t\t});\n\t\tself.control.appendChild(button);\n\t});\n\n};\n", "/**\n * Plugin: \"drag_drop\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport { TomOption, TomItem } from '../../types/index';\nimport { escape_html, preventDefault, addEvent } from '../../utils';\nimport { getDom, setAttr } from '../../vanilla';\n\n\nconst insertAfter = (referenceNode:Element, newNode:Element) => {\n\treferenceNode.parentNode?.insertBefore(newNode, referenceNode.nextSibling);\n}\n\nconst insertBefore = (referenceNode:Element, newNode:Element) => {\n\treferenceNode.parentNode?.insertBefore(newNode, referenceNode);\n}\n\nconst isBefore = (referenceNode:Element|undefined|null, newNode:Element|undefined|null) =>{\n\t\n\tdo{\n\t\tnewNode = newNode?.previousElementSibling;\n\n\t\tif( referenceNode == newNode ){\n\t\t\treturn true;\n\t\t}\n\n\t}while( newNode && newNode.previousElementSibling );\n\n\treturn false;\n}\n\nexport default function(this:TomSelect) {\n\tvar self = this;\n\tif (self.settings.mode !== 'multi') return;\n\n\tvar orig_lock\t\t= self.lock;\n\tvar orig_unlock\t\t= self.unlock;\n\tlet sortable = true;\n\t\tlet drag_item:TomItem|undefined;\n\n\n\t/**\n\t * Add draggable attribute to item\n\t */\n\tself.hook('after','setupTemplates',() => {\n\n\t\tvar orig_render_item = self.settings.render.item;\n\n\t\tself.settings.render.item = (data:TomOption, escape:typeof escape_html) => {\n\t\t\tconst item = getDom(orig_render_item.call(self, data, escape)) as TomItem;\n\t\t\tsetAttr(item,{'draggable':'true'});\n\n\n\t\t\t// prevent doc_mousedown (see tom-select.ts)\n\t\t\tconst mousedown = (evt:Event) => {\n\t\t\t\tif( !sortable ) preventDefault(evt);\n\t\t\t\tevt.stopPropagation();\n\t\t\t}\n\n\t\t\tconst dragStart = (evt:Event) => {\n\t\t\t\tdrag_item = item;\n\t\t\t\t\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\titem.classList.add('ts-dragging');\n\t\t\t\t}, 0);\n\t\t\t\t\n\t\t\t}\n\n\t\t\tconst dragOver = (evt:Event) =>{\n\t\t\t\tevt.preventDefault();\n\t\t\t\titem.classList.add('ts-drag-over');\n\t\t\t\tmoveitem(item,drag_item);\n\t\t\t}\n\n\t\t\tconst dragLeave = () => {\n\t\t\t\titem.classList.remove('ts-drag-over');\n\t\t\t}\n\n\t\t\tconst moveitem = (targetitem:TomItem, dragitem:TomItem|undefined) => {\n\t\t\t\tif( dragitem === undefined ) return;\n\t\t\t\t\n\t\t\t\tif( isBefore(dragitem,item) ){\n\t\t\t\t\tinsertAfter(targetitem,dragitem);\n\t\t\t\t}else{\n\t\t\t\t\tinsertBefore(targetitem,dragitem);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst dragend = () => {\n\t\t\t\tdocument.querySelectorAll('.ts-drag-over').forEach(el=> el.classList.remove('ts-drag-over'));\n\t\t\t\tdrag_item?.classList.remove('ts-dragging');\n\t\t\t\tdrag_item = undefined;\n\n\t\t\t\tvar values:string[] = [];\n\t\t\t\tself.control.querySelectorAll(`[data-value]`).forEach((el:Element)=> {\n\t\t\t\t\tif( (<HTMLOptionElement>el).dataset.value ){\n\t\t\t\t\t\tlet value = (<HTMLOptionElement>el).dataset.value;\n\t\t\t\t\t\tif( value ){\n\t\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tself.setValue(values);\n\t\t\t}\t\n\n\n\t\t\taddEvent(item,'mousedown', mousedown);\n\t\t\taddEvent(item,'dragstart', dragStart);\n\t\t\taddEvent(item,'dragenter', dragOver)\n\t\t\taddEvent(item,'dragover', dragOver);\n\t\t\taddEvent(item,'dragleave', dragLeave);\n\t\t\taddEvent(item,'dragend', dragend);\n\t\t\t\t\n\t\t\treturn item;\n\t\t}\t\n\t});\n\n\n\n\tself.hook('instead','lock',()=>{\n\t\tsortable = false;\n\t\treturn orig_lock.call(self);\n\t});\n\n\tself.hook('instead','unlock',()=>{\n\t\tsortable = true;\n\t\treturn orig_unlock.call(self);\n\t});\n\n};\n", "/**\n * Plugin: \"dropdown_header\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport { getDom } from '../../vanilla';\nimport { preventDefault } from '../../utils';\nimport { DHOptions } from './types';\n\nexport default function(this:TomSelect, userOptions:DHOptions) {\n\tconst self = this;\n\n\tconst options = Object.assign({\n\t\ttitle         : 'Untitled',\n\t\theaderClass   : 'dropdown-header',\n\t\ttitleRowClass : 'dropdown-header-title',\n\t\tlabelClass    : 'dropdown-header-label',\n\t\tcloseClass    : 'dropdown-header-close',\n\n\t\thtml: (data:DHOptions) => {\n\t\t\treturn (\n\t\t\t\t'<div class=\"' + data.headerClass + '\">' +\n\t\t\t\t\t'<div class=\"' + data.titleRowClass + '\">' +\n\t\t\t\t\t\t'<span class=\"' + data.labelClass + '\">' + data.title + '</span>' +\n\t\t\t\t\t\t'<a class=\"' + data.closeClass + '\">&times;</a>' +\n\t\t\t\t\t'</div>' +\n\t\t\t\t'</div>'\n\t\t\t);\n\t\t}\n\t}, userOptions);\n\n\tself.on('initialize',()=>{\n\t\tvar header = getDom(options.html(options));\n\n\t\tvar close_link = header.querySelector('.'+options.closeClass);\n\t\tif( close_link ){\n\t\t\tclose_link.addEventListener('click',(evt)=>{\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t\tself.close();\n\t\t\t});\n\t\t}\n\n\t\tself.dropdown.insertBefore(header, self.dropdown.firstChild);\n\t});\n\n};\n", "/**\n * Plugin: \"dropdown_input\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport { nodeIndex, removeClasses } from '../../vanilla';\n\n\nexport default function(this:TomSelect) {\n\tvar self = this;\n\n\t/**\n\t * Moves the caret to the specified index.\n\t *\n\t * The input must be moved by leaving it in place and moving the\n\t * siblings, due to the fact that focus cannot be restored once lost\n\t * on mobile webkit devices\n\t *\n\t */\n\tself.hook('instead','setCaret',(new_pos:number) => {\n\n\t\tif( self.settings.mode === 'single' || !self.control.contains(self.control_input) ) {\n\t\t\tnew_pos = self.items.length;\n\t\t} else {\n\t\t\tnew_pos = Math.max(0, Math.min(self.items.length, new_pos));\n\n\t\t\tif( new_pos != self.caretPos && !self.isPending ){\n\n\t\t\t\tself.controlChildren().forEach((child,j) => {\n\t\t\t\t\tif( j < new_pos ){\n\t\t\t\t\t\tself.control_input.insertAdjacentElement('beforebegin', child );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.control.appendChild( child );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tself.caretPos = new_pos;\n\t});\n\n\tself.hook('instead','moveCaret',(direction:number) => {\n\n\t\tif( !self.isFocused ) return;\n\n\t\t// move caret before or after selected items\n\t\tconst last_active\t\t= self.getLastActive(direction);\n\t\tif( last_active ){\n\t\t\tconst idx = nodeIndex(last_active);\n\t\t\tself.setCaret(direction > 0 ? idx + 1: idx);\n\t\t\tself.setActiveItem();\n\t\t\tremoveClasses(last_active as HTMLElement,'last-active');\n\n\t\t// move caret left or right of current position\n\t\t}else{\n\t\t\tself.setCaret(self.caretPos + direction);\n\n\t\t}\n\n\t});\n\n};\n", "/**\n * Plugin: \"dropdown_input\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport * as constants from '../../constants';\nimport { getDom, addClasses } from '../../vanilla';\nimport { addEvent, preventDefault } from '../../utils';\n\n\nexport default function(this:TomSelect) {\n\tconst self = this;\n\n\tself.settings.shouldOpen = true; // make sure the input is shown even if there are no options to display in the dropdown\n\n\tself.hook('before','setup',()=>{\n\t\tself.focus_node\t\t= self.control;\n\n\t\taddClasses( self.control_input, 'dropdown-input');\n\n\t \tconst div = getDom('<div class=\"dropdown-input-wrap\">');\n\t\tdiv.append(self.control_input);\n\t\tself.dropdown.insertBefore(div, self.dropdown.firstChild);\n\n\t\t// set a placeholder in the select control\n\t\tconst placeholder = getDom('<input class=\"items-placeholder\" tabindex=\"-1\" />') as HTMLInputElement;\n\t\tplaceholder.placeholder = self.settings.placeholder ||'';\n\t\tself.control.append(placeholder);\n\n\t});\n\n\n\tself.on('initialize',()=>{\n\n\t\t// set tabIndex on control to -1, otherwise [shift+tab] will put focus right back on control_input\n\t\tself.control_input.addEventListener('keydown',(evt:KeyboardEvent) =>{\n\t\t//addEvent(self.control_input,'keydown' as const,(evt:KeyboardEvent) =>{\n\t\t\tswitch( evt.keyCode ){\n\t\t\t\tcase constants.KEY_ESC:\n\t\t\t\t\tif (self.isOpen) {\n\t\t\t\t\t\tpreventDefault(evt,true);\n\t\t\t\t\t\tself.close();\n\t\t\t\t\t}\n\t\t\t\t\tself.clearActiveItems();\n\t\t\t\treturn;\n\t\t\t\tcase constants.KEY_TAB:\n\t\t\t\t\tself.focus_node.tabIndex = -1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn self.onKeyDown.call(self,evt);\n\t\t});\n\n\t\tself.on('blur',()=>{\n\t\t\tself.focus_node.tabIndex = self.isDisabled ? -1 : self.tabIndex;\n\t\t});\n\n\n\t\t// give the control_input focus when the dropdown is open\n\t\tself.on('dropdown_open',() =>{\n\t\t\tself.control_input.focus();\n\t\t});\n\n\t\t// prevent onBlur from closing when focus is on the control_input\n\t\tconst orig_onBlur = self.onBlur;\n\t\tself.hook('instead','onBlur',(evt?:FocusEvent)=>{\n\t\t\tif( evt && evt.relatedTarget == self.control_input ) return;\n\t\t\treturn orig_onBlur.call(self);\n\t\t});\n\n\t\taddEvent(self.control_input,'blur', () => self.onBlur() );\n\n\t\t// return focus to control to allow further keyboard input\n\t\tself.hook('before','close',() =>{\n\n\t\t\tif( !self.isOpen ) return;\n\t\t\tself.focus_node.focus({preventScroll: true});\n\t\t});\n\n\t});\n\n};\n", "/**\n * Plugin: \"input_autogrow\" (Tom Select)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport { addEvent } from '../../utils';\n\nexport default function(this:TomSelect) {\n\tvar self\t\t\t\t\t= this;\n\n\tself.on('initialize',()=>{\n\n\n\t\tvar test_input\t\t\t\t= document.createElement('span');\n\t\tvar control\t\t\t\t\t= self.control_input;\n\t\ttest_input.style.cssText\t= 'position:absolute; top:-99999px; left:-99999px; width:auto; padding:0; white-space:pre; ';\n\n\t\tself.wrapper.appendChild(test_input);\n\n\n\t\tvar transfer_styles\t\t\t= [ 'letterSpacing', 'fontSize', 'fontFamily', 'fontWeight', 'textTransform' ];\n\n\t\tfor( const style_name of transfer_styles ){\n\t\t\t// @ts-ignore TS7015 https://stackoverflow.com/a/50506154/697576\n\t\t\ttest_input.style[style_name] = control.style[style_name];\n\t\t}\n\n\n\t\t/**\n\t\t * Set the control width\n\t\t *\n\t\t */\n\t\tvar resize = ()=>{\n\t\t\ttest_input.textContent\t= control.value;\n\t\t\tcontrol.style.width\t\t= test_input.clientWidth+'px';\n\t\t};\n\n\t\tresize();\n\t\tself.on('update item_add item_remove',resize);\n\t\taddEvent(control,'input', resize );\n\t\taddEvent(control,'keyup', resize );\n\t\taddEvent(control,'blur', resize );\n\t\taddEvent(control,'update', resize );\n\t});\n\n};\n", "/**\n * Plugin: \"input_autogrow\" (Tom Select)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\n\nexport default function(this:TomSelect) {\n\tvar self = this;\n\tvar orig_deleteSelection = self.deleteSelection;\n\n\tthis.hook('instead','deleteSelection',(evt:KeyboardEvent) => {\n\n\t\tif( self.activeItems.length ){\n\t\t\treturn orig_deleteSelection.call(self, evt);\n\t\t}\n\n\t\treturn false;\n\t});\n\n};\n", "/**\n * Plugin: \"no_active_items\" (Tom Select)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\n\nexport default function(this:TomSelect) {\n\tthis.hook('instead','setActiveItem',() => {});\n\tthis.hook('instead','selectAll',() => {});\n};\n", "/**\n * Plugin: \"optgroup_columns\" (Tom Select.js)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport * as constants from '../../constants';\nimport { parentMatch, nodeIndex } from '../../vanilla';\n\nexport default function(this:TomSelect) {\n\tvar self = this;\n\n\tvar orig_keydown = self.onKeyDown;\n\n\tself.hook('instead','onKeyDown',(evt:KeyboardEvent)=>{\n\t\tvar index, option, options, optgroup;\n\n\t\tif( !self.isOpen || !(evt.keyCode === constants.KEY_LEFT || evt.keyCode === constants.KEY_RIGHT)) {\n\t\t\treturn orig_keydown.call(self,evt);\n\t\t}\n\n\t\tself.ignoreHover\t= true;\n\t\toptgroup\t\t\t= parentMatch(self.activeOption,'[data-group]');\n\t\tindex\t\t\t\t= nodeIndex(self.activeOption,'[data-selectable]');\n\n\t\tif( !optgroup ){\n\t\t\treturn;\n\t\t}\n\n\t\tif( evt.keyCode === constants.KEY_LEFT ){\n\t\t\toptgroup = optgroup.previousSibling;\n\t\t} else {\n\t\t\toptgroup = optgroup.nextSibling;\n\t\t}\n\n\t\tif( !optgroup ){\n\t\t\treturn;\n\t\t}\n\n\t\toptions\t\t\t\t= (<HTMLOptGroupElement>optgroup).querySelectorAll('[data-selectable]');\n\t\toption\t\t\t\t= options[ Math.min(options.length - 1, index) ] as HTMLElement;\n\n\t\tif( option ){\n\t\t\tself.setActiveOption(option);\n\t\t}\n\n\t});\n\n};\n", "/**\n * Plugin: \"remove_button\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport { getDom } from '../../vanilla';\nimport { escape_html, preventDefault, addEvent } from '../../utils';\nimport { TomOption, TomItem } from '../../types/index';\nimport { RBOptions } from './types';\n\nexport default function(this:TomSelect, userOptions:RBOptions) {\n\n\tconst options = Object.assign({\n\t\t\tlabel     : '&times;',\n\t\t\ttitle     : 'Remove',\n\t\t\tclassName : 'remove',\n\t\t\tappend    : true\n\t\t}, userOptions);\n\n\n\t//options.className = 'remove-single';\n\tvar self\t\t\t= this;\n\n\t// override the render method to add remove button to each item\n\tif( !options.append ){\n\t\treturn;\n\t}\n\n\tvar html = '<a href=\"javascript:void(0)\" class=\"' + options.className + '\" tabindex=\"-1\" title=\"' + escape_html(options.title) + '\">' + options.label + '</a>';\n\n\tself.hook('after','setupTemplates',() => {\n\n\t\tvar orig_render_item = self.settings.render.item;\n\n\t\tself.settings.render.item = (data:TomOption, escape:typeof escape_html) => {\n\n\t\t\tvar item = getDom(orig_render_item.call(self, data, escape)) as TomItem;\n\n\t\t\tvar close_button = getDom(html);\n\t\t\titem.appendChild(close_button);\n\n\t\t\taddEvent(close_button,'mousedown',(evt) => {\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t});\n\n\t\t\taddEvent(close_button,'click',(evt) => {\n\n\t\t\t\tif( self.isLocked ) return;\n\n\t\t\t\t// propagating will trigger the dropdown to show for single mode\n\t\t\t\tpreventDefault(evt,true);\n\n\t\t\t\tif( self.isLocked ) return;\n\t\t\t\tif( !self.shouldDelete([item],evt as MouseEvent) ) return;\n\n\t\t\t\tself.removeItem(item);\n\t\t\t\tself.refreshOptions(false);\n\t\t\t\tself.inputState();\n\t\t\t});\n\n\t\t\treturn item;\n\t\t};\n\n\t});\n\n\n};\n", "/**\n * Plugin: \"restore_on_backspace\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\nimport TomSelect from '../../tom-select';\nimport { TomOption } from '../../types/index';\n\ntype TPluginOptions = {\n\ttext?:(option:TomOption)=>string,\n};\n\nexport default function(this:TomSelect, userOptions:TPluginOptions) {\n\tconst self = this;\n\n\tconst options = Object.assign({\n\t\ttext: (option:TomOption) => {\n\t\t\treturn option[self.settings.labelField];\n\t\t}\n\t},userOptions);\n\n\tself.on('item_remove',function(value:string){\n\t\tif( !self.isFocused ){\n\t\t\treturn;\n\t\t}\n\n\t\tif( self.control_input.value.trim() === '' ){\n\t\t\tvar option = self.options[value];\n\t\t\tif( option ){\n\t\t\t\tself.setTextboxValue(options.text.call(self, option));\n\t\t\t}\n\t\t}\n\t});\n\n};\n", "/**\n * Plugin: \"restore_on_backspace\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport { TomOption } from '../../types/index';\nimport { addClasses } from '../../vanilla';\n\nexport default function(this:TomSelect) {\n\tconst self\t\t\t\t\t\t\t= this;\n\tconst orig_canLoad\t\t\t\t\t= self.canLoad;\n\tconst orig_clearActiveOption\t\t= self.clearActiveOption;\n\tconst orig_loadCallback\t\t\t\t= self.loadCallback;\n\n\tvar pagination:{[key:string]:any}\t= {};\n\tvar dropdown_content:HTMLElement;\n\tvar loading_more\t\t\t\t\t= false;\n\tvar load_more_opt:HTMLElement;\n\tvar default_values: string[]\t\t= [];\n\n\tif( !self.settings.shouldLoadMore ){\n\n\t\t// return true if additional results should be loaded\n\t\tself.settings.shouldLoadMore = ():boolean=>{\n\n\t\t\tconst scroll_percent = dropdown_content.clientHeight / (dropdown_content.scrollHeight - dropdown_content.scrollTop);\n\t\t\tif( scroll_percent > 0.9 ){\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif( self.activeOption ){\n\t\t\t\tvar selectable\t= self.selectable();\n\t\t\t\tvar index\t\t= Array.from(selectable).indexOf(self.activeOption);\n\t\t\t\tif( index >= (selectable.length-2) ){\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t}\n\n\n\tif( !self.settings.firstUrl ){\n\t\tthrow 'virtual_scroll plugin requires a firstUrl() method';\n\t}\n\n\n\t// in order for virtual scrolling to work,\n\t// options need to be ordered the same way they're returned from the remote data source\n\tself.settings.sortField\t\t\t= [{field:'$order'},{field:'$score'}];\n\n\n\t// can we load more results for given query?\n\tconst canLoadMore = (query:string):boolean => {\n\n\t\tif( typeof self.settings.maxOptions === 'number' && dropdown_content.children.length >= self.settings.maxOptions ){\n\t\t\treturn false;\n\t\t}\n\n\t\tif( (query in pagination) && pagination[query] ){\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tconst clearFilter = (option:TomOption, value:string):boolean => {\n\t\tif( self.items.indexOf(value) >= 0 || default_values.indexOf(value) >= 0 ){\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\n\t// set the next url that will be\n\tself.setNextUrl = (value:string,next_url:any):void => {\n\t\tpagination[value] = next_url;\n\t};\n\n\t// getUrl() to be used in settings.load()\n\tself.getUrl = (query:string):any =>{\n\n\t\tif( query in pagination ){\n\t\t\tconst next_url = pagination[query];\n\t\t\tpagination[query] = false;\n\t\t\treturn next_url;\n\t\t}\n\n\t\t// if the user goes back to a previous query\n\t\t// we need to load the first page again\n\t\tself.clearPagination();\n\n\t\treturn self.settings.firstUrl.call(self,query);\n\t};\n\n\t// clear pagination\n\tself.clearPagination = ():void =>{\n\t\tpagination = {};\n\t};\n\n\t// don't clear the active option (and cause unwanted dropdown scroll)\n\t// while loading more results\n\tself.hook('instead','clearActiveOption',()=>{\n\n\t\tif( loading_more ){\n\t\t\treturn;\n\t\t}\n\n\t\treturn orig_clearActiveOption.call(self);\n\t});\n\n\t// override the canLoad method\n\tself.hook('instead','canLoad',(query:string)=>{\n\n\t\t// first time the query has been seen\n\t\tif( !(query in pagination) ){\n\t\t\treturn orig_canLoad.call(self,query);\n\t\t}\n\n\t\treturn canLoadMore(query);\n\t});\n\n\n\t// wrap the load\n\tself.hook('instead','loadCallback',( options:TomOption[], optgroups:TomOption[])=>{\n\n\t\tif( !loading_more ){\n\t\t\tself.clearOptions(clearFilter);\n\t\t}else if( load_more_opt ){\n\t\t\tconst first_option = options[0];\n\t\t\tif( first_option !== undefined ){\n\t\t\t\tload_more_opt.dataset.value\t\t= first_option[self.settings.valueField];\n\t\t\t}\n\t\t}\n\n\t\torig_loadCallback.call( self, options, optgroups);\n\n\t\tloading_more = false;\n\t});\n\n\n\t// add templates to dropdown\n\t//\tloading_more if we have another url in the queue\n\t//\tno_more_results if we don't have another url in the queue\n\tself.hook('after','refreshOptions',()=>{\n\n\t\tconst query\t\t= self.lastValue;\n\t\tvar option;\n\n\t\tif( canLoadMore(query) ){\n\n\t\t\toption = self.render('loading_more',{query:query});\n\t\t\tif( option ){\n\t\t\t\toption.setAttribute('data-selectable',''); // so that navigating dropdown with [down] keypresses can navigate to this node\n\t\t\t\tload_more_opt = option;\n\t\t\t}\n\n\t\t}else if( (query in pagination) && !dropdown_content.querySelector('.no-results') ){\n\t\t\toption = self.render('no_more_results',{query:query});\n\t\t}\n\n\t\tif( option ){\n\t\t\taddClasses(option,self.settings.optionClass);\n\t\t\tdropdown_content.append( option );\n\t\t}\n\n\t});\n\n\n\t// add scroll listener and default templates\n\tself.on('initialize',()=>{\n\t\tdefault_values = Object.keys(self.options);\n\t\tdropdown_content = self.dropdown_content;\n\n\t\t// default templates\n\t\tself.settings.render = Object.assign({}, {\n\t\t\tloading_more:() => {\n\t\t\t\treturn `<div class=\"loading-more-results\">Loading more results ... </div>`;\n\t\t\t},\n\t\t\tno_more_results:() =>{\n\t\t\t\treturn `<div class=\"no-more-results\">No more results</div>`;\n\t\t\t}\n\t\t},self.settings.render);\n\n\n\t\t// watch dropdown content scroll position\n\t\tdropdown_content.addEventListener('scroll',()=>{\n\n\t\t\tif( !self.settings.shouldLoadMore.call(self) ){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// !important: this will get checked again in load() but we still need to check here otherwise loading_more will be set to true\n\t\t\tif( !canLoadMore(self.lastValue) ){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// don't call load() too much\n\t\t\tif( loading_more ) return;\n\n\n\t\t\tloading_more = true;\n\t\t\tself.load.call(self,self.lastValue);\n\t\t});\n\t});\n\n};\n", "import TomSelect from './tom-select';\n\nimport change_listener from './plugins/change_listener/plugin';\nimport checkbox_options from './plugins/checkbox_options/plugin';\nimport clear_button from './plugins/clear_button/plugin';\nimport drag_drop from './plugins/drag_drop/plugin';\nimport dropdown_header from './plugins/dropdown_header/plugin';\nimport caret_position from './plugins/caret_position/plugin';\nimport dropdown_input from './plugins/dropdown_input/plugin';\nimport input_autogrow from './plugins/input_autogrow/plugin';\nimport no_backspace_delete from './plugins/no_backspace_delete/plugin';\nimport no_active_items from './plugins/no_active_items/plugin';\nimport optgroup_columns from './plugins/optgroup_columns/plugin';\nimport remove_button from './plugins/remove_button/plugin';\nimport restore_on_backspace from './plugins/restore_on_backspace/plugin';\nimport virtual_scroll from './plugins/virtual_scroll/plugin';\n\nTomSelect.define('change_listener', change_listener);\nTomSelect.define('checkbox_options', checkbox_options);\nTomSelect.define('clear_button', clear_button);\nTomSelect.define('drag_drop', drag_drop);\nTomSelect.define('dropdown_header', dropdown_header);\nTomSelect.define('caret_position', caret_position);\nTomSelect.define('dropdown_input', dropdown_input);\nTomSelect.define('input_autogrow', input_autogrow);\nTomSelect.define('no_backspace_delete', no_backspace_delete);\nTomSelect.define('no_active_items', no_active_items);\nTomSelect.define('optgroup_columns', optgroup_columns);\nTomSelect.define('remove_button', remove_button);\nTomSelect.define('restore_on_backspace', restore_on_backspace);\nTomSelect.define('virtual_scroll', virtual_scroll);\n\nexport default TomSelect;\n", "if (!Array.prototype.find) {\n    Array.prototype.find = function(predicate) {\n        if (this === null) {\n            throw new TypeError('Array.prototype.find called on null or undefined')\n        }\n        if (typeof predicate !== 'function') {\n            throw new TypeError('predicate must be a function')\n        }\n        var list = Object(this)\n        var length = list.length >>> 0\n        var thisArg = arguments[1]\n        var value\n\n        for (var i = 0; i < length; i++) {\n            value = list[i]\n            if (predicate.call(thisArg, value, i, list)) {\n                return value\n            }\n        }\n        return undefined\n    }\n}\n\nif (window && typeof window.CustomEvent !== \"function\") {\n  function CustomEvent(event, params) {\n    params = params || {\n      bubbles: false,\n      cancelable: false,\n      detail: undefined\n    }\n    var evt = document.createEvent('CustomEvent')\n    evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail)\n    return evt\n  }\n\n if (typeof window.Event !== 'undefined') {\n   CustomEvent.prototype = window.Event.prototype\n }\n\n  window.CustomEvent = CustomEvent\n}", "class TributeEvents {\n  constructor(tribute) {\n    this.tribute = tribute;\n    this.tribute.events = this;\n  }\n\n  static keys() {\n    return [\n      {\n        key: 9,\n        value: \"TAB\"\n      },\n      {\n        key: 8,\n        value: \"DELETE\"\n      },\n      {\n        key: 13,\n        value: \"ENTER\"\n      },\n      {\n        key: 27,\n        value: \"ESCAPE\"\n      },\n      {\n        key: 32,\n        value: \"SPACE\"\n      },\n      {\n        key: 38,\n        value: \"UP\"\n      },\n      {\n        key: 40,\n        value: \"DOWN\"\n      }\n    ];\n  }\n\n  bind(element) {\n    element.boundKeydown = this.keydown.bind(element, this);\n    element.boundKeyup = this.keyup.bind(element, this);\n    element.boundInput = this.input.bind(element, this);\n\n    element.addEventListener(\"keydown\", element.boundKeydown, false);\n    element.addEventListener(\"keyup\", element.boundKeyup, false);\n    element.addEventListener(\"input\", element.boundInput, false);\n  }\n\n  unbind(element) {\n    element.removeEventListener(\"keydown\", element.boundKeydown, false);\n    element.removeEventListener(\"keyup\", element.boundKeyup, false);\n    element.removeEventListener(\"input\", element.boundInput, false);\n\n    delete element.boundKeydown;\n    delete element.boundKeyup;\n    delete element.boundInput;\n  }\n\n  keydown(instance, event) {\n    if (instance.shouldDeactivate(event)) {\n      instance.tribute.isActive = false;\n      instance.tribute.hideMenu();\n    }\n\n    let element = this;\n    instance.commandEvent = false;\n\n    TributeEvents.keys().forEach(o => {\n      if (o.key === event.keyCode) {\n        instance.commandEvent = true;\n        instance.callbacks()[o.value.toLowerCase()](event, element);\n      }\n    });\n  }\n\n  input(instance, event) {\n    instance.inputEvent = true;\n    instance.keyup.call(this, instance, event);\n  }\n\n  click(instance, event) {\n    let tribute = instance.tribute;\n    if (tribute.menu && tribute.menu.contains(event.target)) {\n      let li = event.target;\n      event.preventDefault();\n      event.stopPropagation();\n      while (li.nodeName.toLowerCase() !== \"li\") {\n        li = li.parentNode;\n        if (!li || li === tribute.menu) {\n          throw new Error(\"cannot find the <li> container for the click\");\n        }\n      }\n      tribute.selectItemAtIndex(li.getAttribute(\"data-index\"), event);\n      tribute.hideMenu();\n\n      // TODO: should fire with externalTrigger and target is outside of menu\n    } else if (tribute.current.element && !tribute.current.externalTrigger) {\n      tribute.current.externalTrigger = false;\n      setTimeout(() => tribute.hideMenu());\n    }\n  }\n\n  keyup(instance, event) {\n    if (instance.inputEvent) {\n      instance.inputEvent = false;\n    }\n    instance.updateSelection(this);\n\n    if (event.keyCode === 27) return;\n\n    if (!instance.tribute.allowSpaces && instance.tribute.hasTrailingSpace) {\n      instance.tribute.hasTrailingSpace = false;\n      instance.commandEvent = true;\n      instance.callbacks()[\"space\"](event, this);\n      return;\n    }\n\n    if (!instance.tribute.isActive) {\n      if (instance.tribute.autocompleteMode) {\n        instance.callbacks().triggerChar(event, this, \"\");\n      } else {\n        let keyCode = instance.getKeyCode(instance, this, event);\n\n        if (isNaN(keyCode) || !keyCode) return;\n\n        let trigger = instance.tribute.triggers().find(trigger => {\n          return trigger.charCodeAt(0) === keyCode;\n        });\n\n        if (typeof trigger !== \"undefined\") {\n          instance.callbacks().triggerChar(event, this, trigger);\n        }\n      }\n    }\n\n    if (\n      instance.tribute.current.mentionText.length <\n      instance.tribute.current.collection.menuShowMinLength\n    ) {\n      return;\n    }\n\n    if (\n      ((instance.tribute.current.trigger ||\n        instance.tribute.autocompleteMode) &&\n        instance.commandEvent === false) ||\n      (instance.tribute.isActive && event.keyCode === 8)\n    ) {\n      instance.tribute.showMenuFor(this, true);\n    }\n  }\n\n  shouldDeactivate(event) {\n    if (!this.tribute.isActive) return false;\n\n    if (this.tribute.current.mentionText.length === 0) {\n      let eventKeyPressed = false;\n      TributeEvents.keys().forEach(o => {\n        if (event.keyCode === o.key) eventKeyPressed = true;\n      });\n\n      return !eventKeyPressed;\n    }\n\n    return false;\n  }\n\n  getKeyCode(instance, el, event) {\n    let char;\n    let tribute = instance.tribute;\n    let info = tribute.range.getTriggerInfo(\n      false,\n      tribute.hasTrailingSpace,\n      true,\n      tribute.allowSpaces,\n      tribute.autocompleteMode\n    );\n\n    if (info) {\n      return info.mentionTriggerChar.charCodeAt(0);\n    } else {\n      return false;\n    }\n  }\n\n  updateSelection(el) {\n    this.tribute.current.element = el;\n    let info = this.tribute.range.getTriggerInfo(\n      false,\n      this.tribute.hasTrailingSpace,\n      true,\n      this.tribute.allowSpaces,\n      this.tribute.autocompleteMode\n    );\n\n    if (info) {\n      this.tribute.current.selectedPath = info.mentionSelectedPath;\n      this.tribute.current.mentionText = info.mentionText;\n      this.tribute.current.selectedOffset = info.mentionSelectedOffset;\n    }\n  }\n\n  callbacks() {\n    return {\n      triggerChar: (e, el, trigger) => {\n        let tribute = this.tribute;\n        tribute.current.trigger = trigger;\n\n        let collectionItem = tribute.collection.find(item => {\n          return item.trigger === trigger;\n        });\n\n        tribute.current.collection = collectionItem;\n\n        if (\n          tribute.current.mentionText.length >=\n            tribute.current.collection.menuShowMinLength &&\n          tribute.inputEvent\n        ) {\n          tribute.showMenuFor(el, true);\n        }\n      },\n      enter: (e, el) => {\n        // choose selection\n        if (this.tribute.isActive && this.tribute.current.filteredItems) {\n          e.preventDefault();\n          e.stopPropagation();\n          setTimeout(() => {\n            this.tribute.selectItemAtIndex(this.tribute.menuSelected, e);\n            this.tribute.hideMenu();\n          }, 0);\n        }\n      },\n      escape: (e, el) => {\n        if (this.tribute.isActive) {\n          e.preventDefault();\n          e.stopPropagation();\n          this.tribute.isActive = false;\n          this.tribute.hideMenu();\n        }\n      },\n      tab: (e, el) => {\n        // choose first match\n        this.callbacks().enter(e, el);\n      },\n      space: (e, el) => {\n        if (this.tribute.isActive) {\n          if (this.tribute.spaceSelectsMatch) {\n            this.callbacks().enter(e, el);\n          } else if (!this.tribute.allowSpaces) {\n            e.stopPropagation();\n            setTimeout(() => {\n              this.tribute.hideMenu();\n              this.tribute.isActive = false;\n            }, 0);\n          }\n        }\n      },\n      up: (e, el) => {\n        // navigate up ul\n        if (this.tribute.isActive && this.tribute.current.filteredItems) {\n          e.preventDefault();\n          e.stopPropagation();\n          let count = this.tribute.current.filteredItems.length,\n            selected = this.tribute.menuSelected;\n\n          if (count > selected && selected > 0) {\n            this.tribute.menuSelected--;\n            this.setActiveLi();\n          } else if (selected === 0) {\n            this.tribute.menuSelected = count - 1;\n            this.setActiveLi();\n            this.tribute.menu.scrollTop = this.tribute.menu.scrollHeight;\n          }\n        }\n      },\n      down: (e, el) => {\n        // navigate down ul\n        if (this.tribute.isActive && this.tribute.current.filteredItems) {\n          e.preventDefault();\n          e.stopPropagation();\n          let count = this.tribute.current.filteredItems.length - 1,\n            selected = this.tribute.menuSelected;\n\n          if (count > selected) {\n            this.tribute.menuSelected++;\n            this.setActiveLi();\n          } else if (count === selected) {\n            this.tribute.menuSelected = 0;\n            this.setActiveLi();\n            this.tribute.menu.scrollTop = 0;\n          }\n        }\n      },\n      delete: (e, el) => {\n        if (\n          this.tribute.isActive &&\n          this.tribute.current.mentionText.length < 1\n        ) {\n          this.tribute.hideMenu();\n        } else if (this.tribute.isActive) {\n          this.tribute.showMenuFor(el);\n        }\n      }\n    };\n  }\n\n  setActiveLi(index) {\n    let lis = this.tribute.menu.querySelectorAll(\"li\"),\n      length = lis.length >>> 0;\n\n    if (index) this.tribute.menuSelected = parseInt(index);\n\n    for (let i = 0; i < length; i++) {\n      let li = lis[i];\n      if (i === this.tribute.menuSelected) {\n        li.classList.add(this.tribute.current.collection.selectClass);\n\n        let liClientRect = li.getBoundingClientRect();\n        let menuClientRect = this.tribute.menu.getBoundingClientRect();\n\n        if (liClientRect.bottom > menuClientRect.bottom) {\n          let scrollDistance = liClientRect.bottom - menuClientRect.bottom;\n          this.tribute.menu.scrollTop += scrollDistance;\n        } else if (liClientRect.top < menuClientRect.top) {\n          let scrollDistance = menuClientRect.top - liClientRect.top;\n          this.tribute.menu.scrollTop -= scrollDistance;\n        }\n      } else {\n        li.classList.remove(this.tribute.current.collection.selectClass);\n      }\n    }\n  }\n\n  getFullHeight(elem, includeMargin) {\n    let height = elem.getBoundingClientRect().height;\n\n    if (includeMargin) {\n      let style = elem.currentStyle || window.getComputedStyle(elem);\n      return (\n        height + parseFloat(style.marginTop) + parseFloat(style.marginBottom)\n      );\n    }\n\n    return height;\n  }\n}\n\nexport default TributeEvents;\n", "class TributeMenuEvents {\n  constructor(tribute) {\n    this.tribute = tribute;\n    this.tribute.menuEvents = this;\n    this.menu = this.tribute.menu;\n  }\n\n  bind(menu) {\n    this.menuClickEvent = this.tribute.events.click.bind(null, this);\n    this.menuContainerScrollEvent = this.debounce(\n      () => {\n        if (this.tribute.isActive) {\n          this.tribute.showMenuFor(this.tribute.current.element, false);\n        }\n      },\n      300,\n      false\n    );\n    this.windowResizeEvent = this.debounce(\n      () => {\n        if (this.tribute.isActive) {\n          this.tribute.range.positionMenuAtCaret(true);\n        }\n      },\n      300,\n      false\n    );\n\n    // fixes IE11 issues with mousedown\n    this.tribute.range\n      .getDocument()\n      .addEventListener(\"MSPointerDown\", this.menuClickEvent, false);\n    this.tribute.range\n      .getDocument()\n      .addEventListener(\"mousedown\", this.menuClickEvent, false);\n    window.addEventListener(\"resize\", this.windowResizeEvent);\n\n    if (this.menuContainer) {\n      this.menuContainer.addEventListener(\n        \"scroll\",\n        this.menuContainerScrollEvent,\n        false\n      );\n    } else {\n      window.addEventListener(\"scroll\", this.menuContainerScrollEvent);\n    }\n  }\n\n  unbind(menu) {\n    this.tribute.range\n      .getDocument()\n      .removeEventListener(\"mousedown\", this.menuClickEvent, false);\n    this.tribute.range\n      .getDocument()\n      .removeEventListener(\"MSPointerDown\", this.menuClickEvent, false);\n    window.removeEventListener(\"resize\", this.windowResizeEvent);\n\n    if (this.menuContainer) {\n      this.menuContainer.removeEventListener(\n        \"scroll\",\n        this.menuContainerScrollEvent,\n        false\n      );\n    } else {\n      window.removeEventListener(\"scroll\", this.menuContainerScrollEvent);\n    }\n  }\n\n  debounce(func, wait, immediate) {\n    var timeout;\n    return () => {\n      var context = this,\n        args = arguments;\n      var later = () => {\n        timeout = null;\n        if (!immediate) func.apply(context, args);\n      };\n      var callNow = immediate && !timeout;\n      clearTimeout(timeout);\n      timeout = setTimeout(later, wait);\n      if (callNow) func.apply(context, args);\n    };\n  }\n}\n\nexport default TributeMenuEvents;\n", "// Thanks to https://github.com/jeff-collins/ment.io\nimport \"./utils\";\n\nclass TributeRange {\n    constructor(tribute) {\n        this.tribute = tribute\n        this.tribute.range = this\n    }\n\n    getDocument() {\n        let iframe\n        if (this.tribute.current.collection) {\n            iframe = this.tribute.current.collection.iframe\n        }\n\n        if (!iframe) {\n            return document\n        }\n\n        return iframe.contentWindow.document\n    }\n\n    positionMenuAtCaret(scrollTo) {\n        let context = this.tribute.current,\n            coordinates\n\n        let info = this.getTriggerInfo(false, this.tribute.hasTrailingSpace, true, this.tribute.allowSpaces, this.tribute.autocompleteMode)\n\n        if (typeof info !== 'undefined') {\n\n            if(!this.tribute.positionMenu){\n                this.tribute.menu.style.cssText = `display: block;`\n                return\n            }\n\n            if (!this.isContentEditable(context.element)) {\n                coordinates = this.getTextAreaOrInputUnderlinePosition(this.tribute.current.element,\n                    info.mentionPosition)\n            }\n            else {\n                coordinates = this.getContentEditableCaretPosition(info.mentionPosition)\n            }\n\n            this.tribute.menu.style.cssText = `top: ${coordinates.top}px;\n                                     left: ${coordinates.left}px;\n                                     right: ${coordinates.right}px;\n                                     bottom: ${coordinates.bottom}px;\n                                     position: absolute;\n                                     display: block;`\n\n            if (coordinates.left === 'auto') {\n                this.tribute.menu.style.left = 'auto'\n            }\n\n            if (coordinates.top === 'auto') {\n                this.tribute.menu.style.top = 'auto'\n            }\n\n            if (scrollTo) this.scrollIntoView()\n\n            window.setTimeout(() => {\n                let menuDimensions = {\n                   width: this.tribute.menu.offsetWidth,\n                   height: this.tribute.menu.offsetHeight\n                }\n                let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions)\n\n                let menuIsOffScreenHorizontally = window.innerWidth > menuDimensions.width && (menuIsOffScreen.left || menuIsOffScreen.right)\n                let menuIsOffScreenVertically = window.innerHeight > menuDimensions.height && (menuIsOffScreen.top || menuIsOffScreen.bottom)\n                if (menuIsOffScreenHorizontally || menuIsOffScreenVertically) {\n                    this.tribute.menu.style.cssText = 'display: none'\n                    this.positionMenuAtCaret(scrollTo)\n                }\n            }, 0)\n\n        } else {\n            this.tribute.menu.style.cssText = 'display: none'\n        }\n    }\n\n    get menuContainerIsBody() {\n        return this.tribute.menuContainer === document.body || !this.tribute.menuContainer;\n    }\n\n\n    selectElement(targetElement, path, offset) {\n        let range\n        let elem = targetElement\n\n        if (path) {\n            for (var i = 0; i < path.length; i++) {\n                elem = elem.childNodes[path[i]]\n                if (elem === undefined) {\n                    return\n                }\n                while (elem.length < offset) {\n                    offset -= elem.length\n                    elem = elem.nextSibling\n                }\n                if (elem.childNodes.length === 0 && !elem.length) {\n                    elem = elem.previousSibling\n                }\n            }\n        }\n        let sel = this.getWindowSelection()\n\n        range = this.getDocument().createRange()\n        range.setStart(elem, offset)\n        range.setEnd(elem, offset)\n        range.collapse(true)\n\n        try {\n            sel.removeAllRanges()\n        } catch (error) {}\n\n        sel.addRange(range)\n        targetElement.focus()\n    }\n\n    replaceTriggerText(text, requireLeadingSpace, hasTrailingSpace, originalEvent, item) {\n        let info = this.getTriggerInfo(true, hasTrailingSpace, requireLeadingSpace, this.tribute.allowSpaces, this.tribute.autocompleteMode)\n\n        if (info !== undefined) {\n            let context = this.tribute.current\n            let replaceEvent = new CustomEvent('tribute-replaced', {\n                detail: {\n                    item: item,\n                    instance: context,\n                    context: info,\n                    event: originalEvent,\n                }\n            })\n\n            if (!this.isContentEditable(context.element)) {\n                let myField = this.tribute.current.element\n                let textSuffix = typeof this.tribute.replaceTextSuffix == 'string'\n                    ? this.tribute.replaceTextSuffix\n                    : ' '\n                text += textSuffix\n                let startPos = info.mentionPosition\n                let endPos = info.mentionPosition + info.mentionText.length + textSuffix.length\n                if (!this.tribute.autocompleteMode) {\n                    endPos += info.mentionTriggerChar.length - 1\n                }\n                myField.value = myField.value.substring(0, startPos) + text +\n                    myField.value.substring(endPos, myField.value.length)\n                myField.selectionStart = startPos + text.length\n                myField.selectionEnd = startPos + text.length\n            } else {\n                // add a space to the end of the pasted text\n                let textSuffix = typeof this.tribute.replaceTextSuffix == 'string'\n                    ? this.tribute.replaceTextSuffix\n                    : '\\xA0'\n                text += textSuffix\n                let endPos = info.mentionPosition + info.mentionText.length\n                if (!this.tribute.autocompleteMode) {\n                    endPos += info.mentionTriggerChar.length\n                }\n                this.pasteHtml(text, info.mentionPosition, endPos)\n            }\n\n            context.element.dispatchEvent(new CustomEvent('input', { bubbles: true }))\n            context.element.dispatchEvent(replaceEvent)\n        }\n    }\n\n    pasteHtml(html, startPos, endPos) {\n        let range, sel\n        sel = this.getWindowSelection()\n        range = this.getDocument().createRange()\n        range.setStart(sel.anchorNode, startPos)\n        range.setEnd(sel.anchorNode, endPos)\n        range.deleteContents()\n\n        let el = this.getDocument().createElement('div')\n        el.innerHTML = html\n        let frag = this.getDocument().createDocumentFragment(),\n            node, lastNode\n        while ((node = el.firstChild)) {\n            lastNode = frag.appendChild(node)\n        }\n        range.insertNode(frag)\n\n        // Preserve the selection\n        if (lastNode) {\n            range = range.cloneRange()\n            range.setStartAfter(lastNode)\n            range.collapse(true)\n            sel.removeAllRanges()\n            sel.addRange(range)\n        }\n    }\n\n    getWindowSelection() {\n        if (this.tribute.collection.iframe) {\n            return this.tribute.collection.iframe.contentWindow.getSelection()\n        }\n\n        return window.getSelection()\n    }\n\n    getNodePositionInParent(element) {\n        if (element.parentNode === null) {\n            return 0\n        }\n\n        for (var i = 0; i < element.parentNode.childNodes.length; i++) {\n            let node = element.parentNode.childNodes[i]\n\n            if (node === element) {\n                return i\n            }\n        }\n    }\n\n    getContentEditableSelectedPath(ctx) {\n        let sel = this.getWindowSelection()\n        let selected = sel.anchorNode\n        let path = []\n        let offset\n\n        if (selected != null) {\n            let i\n            let ce = selected.contentEditable\n            while (selected !== null && ce !== 'true') {\n                i = this.getNodePositionInParent(selected)\n                path.push(i)\n                selected = selected.parentNode\n                if (selected !== null) {\n                    ce = selected.contentEditable\n                }\n            }\n            path.reverse()\n\n            // getRangeAt may not exist, need alternative\n            offset = sel.getRangeAt(0).startOffset\n\n            return {\n                selected: selected,\n                path: path,\n                offset: offset\n            }\n        }\n    }\n\n    getTextPrecedingCurrentSelection() {\n        let context = this.tribute.current,\n            text = ''\n\n        if (!this.isContentEditable(context.element)) {\n            let textComponent = this.tribute.current.element;\n            if (textComponent) {\n                let startPos = textComponent.selectionStart\n                if (textComponent.value && startPos >= 0) {\n                    text = textComponent.value.substring(0, startPos)\n                }\n            }\n\n        } else {\n            let selectedElem = this.getWindowSelection().anchorNode\n\n            if (selectedElem != null) {\n                let workingNodeContent = selectedElem.textContent\n                let selectStartOffset = this.getWindowSelection().getRangeAt(0).startOffset\n\n                if (workingNodeContent && selectStartOffset >= 0) {\n                    text = workingNodeContent.substring(0, selectStartOffset)\n                }\n            }\n        }\n\n        return text\n    }\n\n    getLastWordInText(text) {\n        text = text.replace(/\\u00A0/g, ' '); // https://stackoverflow.com/questions/29850407/how-do-i-replace-unicode-character-u00a0-with-a-space-in-javascript\n        let wordsArray = text.split(/\\s+/);\n        let worldsCount = wordsArray.length - 1\n        return wordsArray[worldsCount].trim()\n    }\n\n    getTriggerInfo(menuAlreadyActive, hasTrailingSpace, requireLeadingSpace, allowSpaces, isAutocomplete) {\n        let ctx = this.tribute.current\n        let selected, path, offset\n\n        if (!this.isContentEditable(ctx.element)) {\n            selected = this.tribute.current.element\n        } else {\n            let selectionInfo = this.getContentEditableSelectedPath(ctx)\n\n            if (selectionInfo) {\n                selected = selectionInfo.selected\n                path = selectionInfo.path\n                offset = selectionInfo.offset\n            }\n        }\n\n        let effectiveRange = this.getTextPrecedingCurrentSelection()\n        let lastWordOfEffectiveRange = this.getLastWordInText(effectiveRange)\n\n        if (isAutocomplete) {\n            return {\n                mentionPosition: effectiveRange.length - lastWordOfEffectiveRange.length,\n                mentionText: lastWordOfEffectiveRange,\n                mentionSelectedElement: selected,\n                mentionSelectedPath: path,\n                mentionSelectedOffset: offset\n            }\n        }\n\n        if (effectiveRange !== undefined && effectiveRange !== null) {\n            let mostRecentTriggerCharPos = -1\n            let triggerChar\n\n            this.tribute.collection.forEach(config => {\n                let c = config.trigger\n                let idx = config.requireLeadingSpace ?\n                    this.lastIndexWithLeadingSpace(effectiveRange, c) :\n                    effectiveRange.lastIndexOf(c)\n\n                if (idx > mostRecentTriggerCharPos) {\n                    mostRecentTriggerCharPos = idx\n                    triggerChar = c\n                    requireLeadingSpace = config.requireLeadingSpace\n                }\n            })\n\n            if (mostRecentTriggerCharPos >= 0 &&\n                (\n                    mostRecentTriggerCharPos === 0 ||\n                    !requireLeadingSpace ||\n                    /[\\xA0\\s]/g.test(\n                        effectiveRange.substring(\n                            mostRecentTriggerCharPos - 1,\n                            mostRecentTriggerCharPos)\n                    )\n                )\n            ) {\n                let currentTriggerSnippet = effectiveRange.substring(mostRecentTriggerCharPos + triggerChar.length,\n                    effectiveRange.length)\n\n                triggerChar = effectiveRange.substring(mostRecentTriggerCharPos, mostRecentTriggerCharPos + triggerChar.length)\n                let firstSnippetChar = currentTriggerSnippet.substring(0, 1)\n                let leadingSpace = currentTriggerSnippet.length > 0 &&\n                    (\n                        firstSnippetChar === ' ' ||\n                        firstSnippetChar === '\\xA0'\n                    )\n                if (hasTrailingSpace) {\n                    currentTriggerSnippet = currentTriggerSnippet.trim()\n                }\n\n                let regex = allowSpaces ? /[^\\S ]/g : /[\\xA0\\s]/g;\n\n                this.tribute.hasTrailingSpace = regex.test(currentTriggerSnippet);\n\n                if (!leadingSpace && (menuAlreadyActive || !(regex.test(currentTriggerSnippet)))) {\n                    return {\n                        mentionPosition: mostRecentTriggerCharPos,\n                        mentionText: currentTriggerSnippet,\n                        mentionSelectedElement: selected,\n                        mentionSelectedPath: path,\n                        mentionSelectedOffset: offset,\n                        mentionTriggerChar: triggerChar\n                    }\n                }\n            }\n        }\n    }\n\n    lastIndexWithLeadingSpace (str, trigger) {\n        let reversedStr = str.split('').reverse().join('')\n        let index = -1\n\n        for (let cidx = 0, len = str.length; cidx < len; cidx++) {\n            let firstChar = cidx === str.length - 1\n            let leadingSpace = /\\s/.test(reversedStr[cidx + 1])\n\n            let match = true\n            for (let triggerIdx = trigger.length - 1; triggerIdx >= 0; triggerIdx--) {\n              if (trigger[triggerIdx] !== reversedStr[cidx-triggerIdx]) {\n                match = false\n                break\n              }\n            }\n\n            if (match && (firstChar || leadingSpace)) {\n                index = str.length - 1 - cidx\n                break\n            }\n        }\n\n        return index\n    }\n\n    isContentEditable(element) {\n        return element.nodeName !== 'INPUT' && element.nodeName !== 'TEXTAREA'\n    }\n\n    isMenuOffScreen(coordinates, menuDimensions) {\n        let windowWidth = window.innerWidth\n        let windowHeight = window.innerHeight\n        let doc = document.documentElement\n        let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0)\n        let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0)\n\n        let menuTop = typeof coordinates.top === 'number' ? coordinates.top : windowTop + windowHeight - coordinates.bottom - menuDimensions.height\n        let menuRight = typeof coordinates.right === 'number' ? coordinates.right : coordinates.left + menuDimensions.width\n        let menuBottom = typeof coordinates.bottom === 'number' ? coordinates.bottom : coordinates.top + menuDimensions.height\n        let menuLeft = typeof coordinates.left === 'number' ? coordinates.left : windowLeft + windowWidth - coordinates.right - menuDimensions.width\n\n        return {\n            top: menuTop < Math.floor(windowTop),\n            right: menuRight > Math.ceil(windowLeft + windowWidth),\n            bottom: menuBottom > Math.ceil(windowTop + windowHeight),\n            left: menuLeft < Math.floor(windowLeft)\n        }\n    }\n\n    getMenuDimensions() {\n        // Width of the menu depends of its contents and position\n        // We must check what its width would be without any obstruction\n        // This way, we can achieve good positioning for flipping the menu\n        let dimensions = {\n            width: null,\n            height: null\n        }\n\n        this.tribute.menu.style.cssText = `top: 0px;\n                                 left: 0px;\n                                 position: fixed;\n                                 display: block;\n                                 visibility; hidden;`\n       dimensions.width = this.tribute.menu.offsetWidth\n       dimensions.height = this.tribute.menu.offsetHeight\n\n       this.tribute.menu.style.cssText = `display: none;`\n\n       return dimensions\n    }\n\n    getTextAreaOrInputUnderlinePosition(element, position, flipped) {\n        let properties = ['direction', 'boxSizing', 'width', 'height', 'overflowX',\n            'overflowY', 'borderTopWidth', 'borderRightWidth',\n            'borderBottomWidth', 'borderLeftWidth', 'paddingTop',\n            'paddingRight', 'paddingBottom', 'paddingLeft',\n            'fontStyle', 'fontVariant', 'fontWeight', 'fontStretch',\n            'fontSize', 'fontSizeAdjust', 'lineHeight', 'fontFamily',\n            'textAlign', 'textTransform', 'textIndent',\n            'textDecoration', 'letterSpacing', 'wordSpacing'\n        ]\n\n        let isFirefox = (window.mozInnerScreenX !== null)\n\n        let div = this.getDocument().createElement('div')\n        div.id = 'input-textarea-caret-position-mirror-div'\n        this.getDocument().body.appendChild(div)\n\n        let style = div.style\n        let computed = window.getComputedStyle ? getComputedStyle(element) : element.currentStyle\n\n        style.whiteSpace = 'pre-wrap'\n        if (element.nodeName !== 'INPUT') {\n            style.wordWrap = 'break-word'\n        }\n\n        // position off-screen\n        style.position = 'absolute'\n        style.visibility = 'hidden'\n\n        // transfer the element's properties to the div\n        properties.forEach(prop => {\n            style[prop] = computed[prop]\n        })\n\n        if (isFirefox) {\n            style.width = `${(parseInt(computed.width) - 2)}px`\n            if (element.scrollHeight > parseInt(computed.height))\n                style.overflowY = 'scroll'\n        } else {\n            style.overflow = 'hidden'\n        }\n\n        div.textContent = element.value.substring(0, position)\n\n        if (element.nodeName === 'INPUT') {\n            div.textContent = div.textContent.replace(/\\s/g, ' ')\n        }\n\n        let span = this.getDocument().createElement('span')\n        span.textContent = element.value.substring(position) || '.'\n        div.appendChild(span)\n\n        let rect = element.getBoundingClientRect()\n        let doc = document.documentElement\n        let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0)\n        let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0)\n\n        let top = 0;\n        let left = 0;\n        if (this.menuContainerIsBody) {\n          top = rect.top;\n          left = rect.left;\n        }\n\n        let coordinates = {\n            top: top + windowTop + span.offsetTop + parseInt(computed.borderTopWidth) + parseInt(computed.fontSize) - element.scrollTop,\n            left: left + windowLeft + span.offsetLeft + parseInt(computed.borderLeftWidth)\n        }\n\n        let windowWidth = window.innerWidth\n        let windowHeight = window.innerHeight\n\n        let menuDimensions = this.getMenuDimensions()\n        let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions)\n\n        if (menuIsOffScreen.right) {\n            coordinates.right = windowWidth - coordinates.left\n            coordinates.left = 'auto'\n        }\n\n        let parentHeight = this.tribute.menuContainer\n            ? this.tribute.menuContainer.offsetHeight\n            : this.getDocument().body.offsetHeight\n\n        if (menuIsOffScreen.bottom) {\n            let parentRect = this.tribute.menuContainer\n                ? this.tribute.menuContainer.getBoundingClientRect()\n                : this.getDocument().body.getBoundingClientRect()\n            let scrollStillAvailable = parentHeight - (windowHeight - parentRect.top)\n\n            coordinates.bottom = scrollStillAvailable + (windowHeight - rect.top - span.offsetTop)\n            coordinates.top = 'auto'\n        }\n\n        menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions)\n        if (menuIsOffScreen.left) {\n            coordinates.left = windowWidth > menuDimensions.width\n                ? windowLeft + windowWidth - menuDimensions.width\n                : windowLeft\n            delete coordinates.right\n        }\n        if (menuIsOffScreen.top) {\n            coordinates.top = windowHeight > menuDimensions.height\n                ? windowTop + windowHeight - menuDimensions.height\n                : windowTop\n            delete coordinates.bottom\n        }\n\n        this.getDocument().body.removeChild(div)\n        return coordinates\n    }\n\n    getContentEditableCaretPosition(selectedNodePosition) {\n        let range\n        let sel = this.getWindowSelection()\n\n        range = this.getDocument().createRange()\n        range.setStart(sel.anchorNode, selectedNodePosition)\n        range.setEnd(sel.anchorNode, selectedNodePosition)\n\n        range.collapse(false)\n\n        let rect = range.getBoundingClientRect()\n        let doc = document.documentElement\n        let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0)\n        let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0)\n\n        let left = rect.left\n        let top = rect.top\n\n        let coordinates = {\n            left: left + windowLeft,\n            top: top + rect.height + windowTop\n        }\n        let windowWidth = window.innerWidth\n        let windowHeight = window.innerHeight\n\n        let menuDimensions = this.getMenuDimensions()\n        let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions)\n\n        if (menuIsOffScreen.right) {\n            coordinates.left = 'auto'\n            coordinates.right = windowWidth - rect.left - windowLeft\n        }\n\n        let parentHeight = this.tribute.menuContainer\n            ? this.tribute.menuContainer.offsetHeight\n            : this.getDocument().body.offsetHeight\n\n        if (menuIsOffScreen.bottom) {\n            let parentRect = this.tribute.menuContainer\n                ? this.tribute.menuContainer.getBoundingClientRect()\n                : this.getDocument().body.getBoundingClientRect()\n            let scrollStillAvailable = parentHeight - (windowHeight - parentRect.top)\n\n            coordinates.top = 'auto'\n            coordinates.bottom = scrollStillAvailable + (windowHeight - rect.top)\n        }\n\n        menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions)\n        if (menuIsOffScreen.left) {\n            coordinates.left = windowWidth > menuDimensions.width\n                ? windowLeft + windowWidth - menuDimensions.width\n                : windowLeft\n            delete coordinates.right\n        }\n        if (menuIsOffScreen.top) {\n            coordinates.top = windowHeight > menuDimensions.height\n                ? windowTop + windowHeight - menuDimensions.height\n                : windowTop\n            delete coordinates.bottom\n        }\n\n        if (!this.menuContainerIsBody) {\n            coordinates.left = coordinates.left ? coordinates.left - this.tribute.menuContainer.offsetLeft : coordinates.left\n            coordinates.top = coordinates.top ? coordinates.top - this.tribute.menuContainer.offsetTop : coordinates.top\n        }\n\n        return coordinates\n    }\n\n    scrollIntoView(elem) {\n        let reasonableBuffer = 20,\n            clientRect\n        let maxScrollDisplacement = 100\n        let e = this.menu\n\n        if (typeof e === 'undefined') return;\n\n        while (clientRect === undefined || clientRect.height === 0) {\n            clientRect = e.getBoundingClientRect()\n\n            if (clientRect.height === 0) {\n                e = e.childNodes[0]\n                if (e === undefined || !e.getBoundingClientRect) {\n                    return\n                }\n            }\n        }\n\n        let elemTop = clientRect.top\n        let elemBottom = elemTop + clientRect.height\n\n        if (elemTop < 0) {\n            window.scrollTo(0, window.pageYOffset + clientRect.top - reasonableBuffer)\n        } else if (elemBottom > window.innerHeight) {\n            let maxY = window.pageYOffset + clientRect.top - reasonableBuffer\n\n            if (maxY - window.pageYOffset > maxScrollDisplacement) {\n                maxY = window.pageYOffset + maxScrollDisplacement\n            }\n\n            let targetY = window.pageYOffset - (window.innerHeight - elemBottom)\n\n            if (targetY > maxY) {\n                targetY = maxY\n            }\n\n            window.scrollTo(0, targetY)\n        }\n    }\n}\n\n\nexport default TributeRange;\n", "// Thanks to https://github.com/mattyork/fuzzy\nclass TributeSearch {\n    constructor(tribute) {\n        this.tribute = tribute\n        this.tribute.search = this\n    }\n\n    simpleFilter(pattern, array) {\n        return array.filter(string => {\n            return this.test(pattern, string)\n        })\n    }\n\n    test(pattern, string) {\n        return this.match(pattern, string) !== null\n    }\n\n    match(pattern, string, opts) {\n        opts = opts || {}\n        let patternIdx = 0,\n            result = [],\n            len = string.length,\n            totalScore = 0,\n            currScore = 0,\n            pre = opts.pre || '',\n            post = opts.post || '',\n            compareString = opts.caseSensitive && string || string.toLowerCase(),\n            ch, compareChar\n\n        if (opts.skip) {\n            return {rendered: string, score: 0}\n        }\n\n        pattern = opts.caseSensitive && pattern || pattern.toLowerCase()\n\n        let patternCache = this.traverse(compareString, pattern, 0, 0, [])\n        if (!patternCache) {\n            return null\n        }\n        return {\n            rendered: this.render(string, patternCache.cache, pre, post),\n            score: patternCache.score\n        }\n    }\n\n    traverse(string, pattern, stringIndex, patternIndex, patternCache) {\n        // if the pattern search at end\n        if (pattern.length === patternIndex) {\n\n            // calculate score and copy the cache containing the indices where it's found\n            return {\n                score: this.calculateScore(patternCache),\n                cache: patternCache.slice()\n            }\n        }\n\n        // if string at end or remaining pattern > remaining string\n        if (string.length === stringIndex || pattern.length - patternIndex > string.length - stringIndex) {\n            return undefined\n        }\n\n        let c = pattern[patternIndex]\n        let index = string.indexOf(c, stringIndex)\n        let best, temp\n\n        while (index > -1) {\n            patternCache.push(index)\n            temp = this.traverse(string, pattern, index + 1, patternIndex + 1, patternCache)\n            patternCache.pop()\n\n            // if downstream traversal failed, return best answer so far\n            if (!temp) {\n                return best\n            }\n\n            if (!best || best.score < temp.score) {\n                best = temp\n            }\n\n            index = string.indexOf(c, index + 1)\n        }\n\n        return best\n    }\n\n    calculateScore(patternCache) {\n        let score = 0\n        let temp = 1\n\n        patternCache.forEach((index, i) => {\n            if (i > 0) {\n                if (patternCache[i - 1] + 1 === index) {\n                    temp += temp + 1\n                }\n                else {\n                    temp = 1\n                }\n            }\n\n            score += temp\n        })\n\n        return score\n    }\n\n    render(string, indices, pre, post) {\n        var rendered = string.substring(0, indices[0])\n\n        indices.forEach((index, i) => {\n            rendered += pre + string[index] + post +\n                string.substring(index + 1, (indices[i + 1]) ? indices[i + 1] : string.length)\n        })\n\n        return rendered\n    }\n\n    filter(pattern, arr, opts) {\n        opts = opts || {}\n        return arr\n            .reduce((prev, element, idx, arr) => {\n                let str = element\n\n                if (opts.extract) {\n                    str = opts.extract(element)\n\n                    if (!str) { // take care of undefineds / nulls / etc.\n                        str = ''\n                    }\n                }\n\n                let rendered = this.match(pattern, str, opts)\n\n                if (rendered != null) {\n                    prev[prev.length] = {\n                        string: rendered.rendered,\n                        score: rendered.score,\n                        index: idx,\n                        original: element\n                    }\n                }\n\n                return prev\n            }, [])\n\n        .sort((a, b) => {\n            let compare = b.score - a.score\n            if (compare) return compare\n            return a.index - b.index\n        })\n    }\n}\n\nexport default TributeSearch;\n", "import \"./utils\";\nimport TributeEvents from \"./TributeEvents\";\nimport TributeMenuEvents from \"./TributeMenuEvents\";\nimport TributeRange from \"./TributeRange\";\nimport TributeSearch from \"./TributeSearch\";\n\nclass Tribute {\n  constructor({\n    values = null,\n    iframe = null,\n    selectClass = \"highlight\",\n    containerClass = \"tribute-container\",\n    itemClass = \"\",\n    trigger = \"@\",\n    autocompleteMode = false,\n    selectTemplate = null,\n    menuItemTemplate = null,\n    lookup = \"key\",\n    fillAttr = \"value\",\n    collection = null,\n    menuContainer = null,\n    noMatchTemplate = null,\n    requireLeadingSpace = true,\n    allowSpaces = false,\n    replaceTextSuffix = null,\n    positionMenu = true,\n    spaceSelectsMatch = false,\n    searchOpts = {},\n    menuItemLimit = null,\n    menuShowMinLength = 0\n  }) {\n    this.autocompleteMode = autocompleteMode;\n    this.menuSelected = 0;\n    this.current = {};\n    this.inputEvent = false;\n    this.isActive = false;\n    this.menuContainer = menuContainer;\n    this.allowSpaces = allowSpaces;\n    this.replaceTextSuffix = replaceTextSuffix;\n    this.positionMenu = positionMenu;\n    this.hasTrailingSpace = false;\n    this.spaceSelectsMatch = spaceSelectsMatch;\n\n    if (this.autocompleteMode) {\n      trigger = \"\";\n      allowSpaces = false;\n    }\n\n    if (values) {\n      this.collection = [\n        {\n          // symbol that starts the lookup\n          trigger: trigger,\n\n          // is it wrapped in an iframe\n          iframe: iframe,\n\n          // class applied to selected item\n          selectClass: selectClass,\n\n          // class applied to the Container\n          containerClass: containerClass,\n\n          // class applied to each item\n          itemClass: itemClass,\n\n          // function called on select that retuns the content to insert\n          selectTemplate: (\n            selectTemplate || Tribute.defaultSelectTemplate\n          ).bind(this),\n\n          // function called that returns content for an item\n          menuItemTemplate: (\n            menuItemTemplate || Tribute.defaultMenuItemTemplate\n          ).bind(this),\n\n          // function called when menu is empty, disables hiding of menu.\n          noMatchTemplate: (t => {\n            if (typeof t === \"string\") {\n              if (t.trim() === \"\") return null;\n              return t;\n            }\n            if (typeof t === \"function\") {\n              return t.bind(this);\n            }\n\n            return (\n              noMatchTemplate ||\n              function() {\n                return \"<li>No Match Found!</li>\";\n              }.bind(this)\n            );\n          })(noMatchTemplate),\n\n          // column to search against in the object\n          lookup: lookup,\n\n          // column that contains the content to insert by default\n          fillAttr: fillAttr,\n\n          // array of objects or a function returning an array of objects\n          values: values,\n\n          requireLeadingSpace: requireLeadingSpace,\n\n          searchOpts: searchOpts,\n\n          menuItemLimit: menuItemLimit,\n\n          menuShowMinLength: menuShowMinLength\n        }\n      ];\n    } else if (collection) {\n      if (this.autocompleteMode)\n        console.warn(\n          \"Tribute in autocomplete mode does not work for collections\"\n        );\n      this.collection = collection.map(item => {\n        return {\n          trigger: item.trigger || trigger,\n          iframe: item.iframe || iframe,\n          selectClass: item.selectClass || selectClass,\n          containerClass: item.containerClass || containerClass,\n          itemClass: item.itemClass || itemClass,\n          selectTemplate: (\n            item.selectTemplate || Tribute.defaultSelectTemplate\n          ).bind(this),\n          menuItemTemplate: (\n            item.menuItemTemplate || Tribute.defaultMenuItemTemplate\n          ).bind(this),\n          // function called when menu is empty, disables hiding of menu.\n          noMatchTemplate: (t => {\n            if (typeof t === \"string\") {\n              if (t.trim() === \"\") return null;\n              return t;\n            }\n            if (typeof t === \"function\") {\n              return t.bind(this);\n            }\n\n            return (\n              noMatchTemplate ||\n              function() {\n                return \"<li>No Match Found!</li>\";\n              }.bind(this)\n            );\n          })(noMatchTemplate),\n          lookup: item.lookup || lookup,\n          fillAttr: item.fillAttr || fillAttr,\n          values: item.values,\n          requireLeadingSpace: item.requireLeadingSpace,\n          searchOpts: item.searchOpts || searchOpts,\n          menuItemLimit: item.menuItemLimit || menuItemLimit,\n          menuShowMinLength: item.menuShowMinLength || menuShowMinLength\n        };\n      });\n    } else {\n      throw new Error(\"[Tribute] No collection specified.\");\n    }\n\n    new TributeRange(this);\n    new TributeEvents(this);\n    new TributeMenuEvents(this);\n    new TributeSearch(this);\n  }\n\n  get isActive() {\n    return this._isActive;\n  }\n\n  set isActive(val) {\n    if (this._isActive != val) {\n      this._isActive = val;\n      if (this.current.element) {\n        let noMatchEvent = new CustomEvent(`tribute-active-${val}`);\n        this.current.element.dispatchEvent(noMatchEvent);\n      }\n    }\n  }\n\n  static defaultSelectTemplate(item) {\n    if (typeof item === \"undefined\")\n      return `${this.current.collection.trigger}${this.current.mentionText}`;\n    if (this.range.isContentEditable(this.current.element)) {\n      return (\n        '<span class=\"tribute-mention\">' +\n        (this.current.collection.trigger +\n          item.original[this.current.collection.fillAttr]) +\n        \"</span>\"\n      );\n    }\n\n    return (\n      this.current.collection.trigger +\n      item.original[this.current.collection.fillAttr]\n    );\n  }\n\n  static defaultMenuItemTemplate(matchItem) {\n    return matchItem.string;\n  }\n\n  static inputTypes() {\n    return [\"TEXTAREA\", \"INPUT\"];\n  }\n\n  triggers() {\n    return this.collection.map(config => {\n      return config.trigger;\n    });\n  }\n\n  attach(el) {\n    if (!el) {\n      throw new Error(\"[Tribute] Must pass in a DOM node or NodeList.\");\n    }\n\n    // Check if it is a jQuery collection\n    if (typeof jQuery !== \"undefined\" && el instanceof jQuery) {\n      el = el.get();\n    }\n\n    // Is el an Array/Array-like object?\n    if (\n      el.constructor === NodeList ||\n      el.constructor === HTMLCollection ||\n      el.constructor === Array\n    ) {\n      let length = el.length;\n      for (var i = 0; i < length; ++i) {\n        this._attach(el[i]);\n      }\n    } else {\n      this._attach(el);\n    }\n  }\n\n  _attach(el) {\n    if (el.hasAttribute(\"data-tribute\")) {\n      console.warn(\"Tribute was already bound to \" + el.nodeName);\n    }\n\n    this.ensureEditable(el);\n    this.events.bind(el);\n    el.setAttribute(\"data-tribute\", true);\n  }\n\n  ensureEditable(element) {\n    if (Tribute.inputTypes().indexOf(element.nodeName) === -1) {\n      if (element.contentEditable) {\n        element.contentEditable = true;\n      } else {\n        throw new Error(\"[Tribute] Cannot bind to \" + element.nodeName);\n      }\n    }\n  }\n\n  createMenu(containerClass) {\n    let wrapper = this.range.getDocument().createElement(\"div\"),\n      ul = this.range.getDocument().createElement(\"ul\");\n    wrapper.className = containerClass;\n    wrapper.appendChild(ul);\n\n    if (this.menuContainer) {\n      return this.menuContainer.appendChild(wrapper);\n    }\n\n    return this.range.getDocument().body.appendChild(wrapper);\n  }\n\n  showMenuFor(element, scrollTo) {\n    // Only proceed if menu isn't already shown for the current element & mentionText\n    if (\n      this.isActive &&\n      this.current.element === element &&\n      this.current.mentionText === this.currentMentionTextSnapshot\n    ) {\n      return;\n    }\n    this.currentMentionTextSnapshot = this.current.mentionText;\n\n    // create the menu if it doesn't exist.\n    if (!this.menu) {\n      this.menu = this.createMenu(this.current.collection.containerClass);\n      element.tributeMenu = this.menu;\n      this.menuEvents.bind(this.menu);\n    }\n\n    this.isActive = true;\n    this.menuSelected = 0;\n\n    if (!this.current.mentionText) {\n      this.current.mentionText = \"\";\n    }\n\n    const processValues = values => {\n      // Tribute may not be active any more by the time the value callback returns\n      if (!this.isActive) {\n        return;\n      }\n\n      let items = this.search.filter(this.current.mentionText, values, {\n        pre: this.current.collection.searchOpts.pre || \"<span>\",\n        post: this.current.collection.searchOpts.post || \"</span>\",\n        skip: this.current.collection.searchOpts.skip,\n        extract: el => {\n          if (typeof this.current.collection.lookup === \"string\") {\n            return el[this.current.collection.lookup];\n          } else if (typeof this.current.collection.lookup === \"function\") {\n            return this.current.collection.lookup(el, this.current.mentionText);\n          } else {\n            throw new Error(\n              \"Invalid lookup attribute, lookup must be string or function.\"\n            );\n          }\n        }\n      });\n\n      if (this.current.collection.menuItemLimit) {\n        items = items.slice(0, this.current.collection.menuItemLimit);\n      }\n\n      this.current.filteredItems = items;\n\n      let ul = this.menu.querySelector(\"ul\");\n\n      this.range.positionMenuAtCaret(scrollTo);\n\n      if (!items.length) {\n        let noMatchEvent = new CustomEvent(\"tribute-no-match\", {\n          detail: this.menu\n        });\n        this.current.element.dispatchEvent(noMatchEvent);\n        if (\n          (typeof this.current.collection.noMatchTemplate === \"function\" &&\n            !this.current.collection.noMatchTemplate()) ||\n          !this.current.collection.noMatchTemplate\n        ) {\n          this.hideMenu();\n        } else {\n          typeof this.current.collection.noMatchTemplate === \"function\"\n            ? (ul.innerHTML = this.current.collection.noMatchTemplate())\n            : (ul.innerHTML = this.current.collection.noMatchTemplate);\n        }\n\n        return;\n      }\n\n      ul.innerHTML = \"\";\n      let fragment = this.range.getDocument().createDocumentFragment();\n\n      items.forEach((item, index) => {\n        let li = this.range.getDocument().createElement(\"li\");\n        li.setAttribute(\"data-index\", index);\n        li.className = this.current.collection.itemClass;\n        li.addEventListener(\"mousemove\", e => {\n          let [li, index] = this._findLiTarget(e.target);\n          if (e.movementY !== 0) {\n            this.events.setActiveLi(index);\n          }\n        });\n        if (this.menuSelected === index) {\n          li.classList.add(this.current.collection.selectClass);\n        }\n        li.innerHTML = this.current.collection.menuItemTemplate(item);\n        fragment.appendChild(li);\n      });\n      ul.appendChild(fragment);\n    };\n\n    if (typeof this.current.collection.values === \"function\") {\n      this.current.collection.values(this.current.mentionText, processValues);\n    } else {\n      processValues(this.current.collection.values);\n    }\n  }\n\n  _findLiTarget(el) {\n    if (!el) return [];\n    const index = el.getAttribute(\"data-index\");\n    return !index ? this._findLiTarget(el.parentNode) : [el, index];\n  }\n\n  showMenuForCollection(element, collectionIndex) {\n    if (element !== document.activeElement) {\n      this.placeCaretAtEnd(element);\n    }\n\n    this.current.collection = this.collection[collectionIndex || 0];\n    this.current.externalTrigger = true;\n    this.current.element = element;\n\n    if (element.isContentEditable)\n      this.insertTextAtCursor(this.current.collection.trigger);\n    else this.insertAtCaret(element, this.current.collection.trigger);\n\n    this.showMenuFor(element);\n  }\n\n  // TODO: make sure this works for inputs/textareas\n  placeCaretAtEnd(el) {\n    el.focus();\n    if (\n      typeof window.getSelection != \"undefined\" &&\n      typeof document.createRange != \"undefined\"\n    ) {\n      var range = document.createRange();\n      range.selectNodeContents(el);\n      range.collapse(false);\n      var sel = window.getSelection();\n      sel.removeAllRanges();\n      sel.addRange(range);\n    } else if (typeof document.body.createTextRange != \"undefined\") {\n      var textRange = document.body.createTextRange();\n      textRange.moveToElementText(el);\n      textRange.collapse(false);\n      textRange.select();\n    }\n  }\n\n  // for contenteditable\n  insertTextAtCursor(text) {\n    var sel, range, html;\n    sel = window.getSelection();\n    range = sel.getRangeAt(0);\n    range.deleteContents();\n    var textNode = document.createTextNode(text);\n    range.insertNode(textNode);\n    range.selectNodeContents(textNode);\n    range.collapse(false);\n    sel.removeAllRanges();\n    sel.addRange(range);\n  }\n\n  // for regular inputs\n  insertAtCaret(textarea, text) {\n    var scrollPos = textarea.scrollTop;\n    var caretPos = textarea.selectionStart;\n\n    var front = textarea.value.substring(0, caretPos);\n    var back = textarea.value.substring(\n      textarea.selectionEnd,\n      textarea.value.length\n    );\n    textarea.value = front + text + back;\n    caretPos = caretPos + text.length;\n    textarea.selectionStart = caretPos;\n    textarea.selectionEnd = caretPos;\n    textarea.focus();\n    textarea.scrollTop = scrollPos;\n  }\n\n  hideMenu() {\n    if (this.menu) {\n      this.menu.style.cssText = \"display: none;\";\n      this.isActive = false;\n      this.menuSelected = 0;\n      this.current = {};\n    }\n  }\n\n  selectItemAtIndex(index, originalEvent) {\n    index = parseInt(index);\n    if (typeof index !== \"number\" || isNaN(index)) return;\n    let item = this.current.filteredItems[index];\n    let content = this.current.collection.selectTemplate(item);\n    if (content !== null) this.replaceText(content, originalEvent, item);\n  }\n\n  replaceText(content, originalEvent, item) {\n    this.range.replaceTriggerText(content, true, true, originalEvent, item);\n  }\n\n  _append(collection, newValues, replace) {\n    if (typeof collection.values === \"function\") {\n      throw new Error(\"Unable to append to values, as it is a function.\");\n    } else if (!replace) {\n      collection.values = collection.values.concat(newValues);\n    } else {\n      collection.values = newValues;\n    }\n  }\n\n  append(collectionIndex, newValues, replace) {\n    let index = parseInt(collectionIndex);\n    if (typeof index !== \"number\")\n      throw new Error(\"please provide an index for the collection to update.\");\n\n    let collection = this.collection[index];\n\n    this._append(collection, newValues, replace);\n  }\n\n  appendCurrent(newValues, replace) {\n    if (this.isActive) {\n      this._append(this.current.collection, newValues, replace);\n    } else {\n      throw new Error(\n        \"No active state. Please use append instead and pass an index.\"\n      );\n    }\n  }\n\n  detach(el) {\n    if (!el) {\n      throw new Error(\"[Tribute] Must pass in a DOM node or NodeList.\");\n    }\n\n    // Check if it is a jQuery collection\n    if (typeof jQuery !== \"undefined\" && el instanceof jQuery) {\n      el = el.get();\n    }\n\n    // Is el an Array/Array-like object?\n    if (\n      el.constructor === NodeList ||\n      el.constructor === HTMLCollection ||\n      el.constructor === Array\n    ) {\n      let length = el.length;\n      for (var i = 0; i < length; ++i) {\n        this._detach(el[i]);\n      }\n    } else {\n      this._detach(el);\n    }\n  }\n\n  _detach(el) {\n    this.events.unbind(el);\n    if (el.tributeMenu) {\n      this.menuEvents.unbind(el.tributeMenu);\n    }\n\n    setTimeout(() => {\n      el.removeAttribute(\"data-tribute\");\n      this.isActive = false;\n      if (el.tributeMenu) {\n        el.tributeMenu.remove();\n      }\n    });\n  }\n}\n\nexport default Tribute;\n", "/**\n * Lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n    HOT_SPAN = 16;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    asyncTag = '[object AsyncFunction]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    nullTag = '[object Null]',\n    objectTag = '[object Object]',\n    proxyTag = '[object Proxy]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    undefinedTag = '[object Undefined]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n    funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    Symbol = root.Symbol,\n    Uint8Array = root.Uint8Array,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n    getPrototype = overArg(Object.getPrototypeOf, Object),\n    objectCreate = Object.create,\n    propertyIsEnumerable = objectProto.propertyIsEnumerable,\n    splice = arrayProto.splice,\n    symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n    nativeMax = Math.max,\n    nativeNow = Date.now;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n    nativeCreate = getNative(Object, 'create');\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n  if ((value !== undefined && !eq(object[key], value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n  if (object === source) {\n    return;\n  }\n  baseFor(source, function(srcValue, key) {\n    stack || (stack = new Stack);\n    if (isObject(srcValue)) {\n      baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n    }\n    else {\n      var newValue = customizer\n        ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      if (newValue === undefined) {\n        newValue = srcValue;\n      }\n      assignMergeValue(object, key, newValue);\n    }\n  }, keysIn);\n}\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n  var objValue = safeGet(object, key),\n      srcValue = safeGet(source, key),\n      stacked = stack.get(srcValue);\n\n  if (stacked) {\n    assignMergeValue(object, key, stacked);\n    return;\n  }\n  var newValue = customizer\n    ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n    : undefined;\n\n  var isCommon = newValue === undefined;\n\n  if (isCommon) {\n    var isArr = isArray(srcValue),\n        isBuff = !isArr && isBuffer(srcValue),\n        isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n    newValue = srcValue;\n    if (isArr || isBuff || isTyped) {\n      if (isArray(objValue)) {\n        newValue = objValue;\n      }\n      else if (isArrayLikeObject(objValue)) {\n        newValue = copyArray(objValue);\n      }\n      else if (isBuff) {\n        isCommon = false;\n        newValue = cloneBuffer(srcValue, true);\n      }\n      else if (isTyped) {\n        isCommon = false;\n        newValue = cloneTypedArray(srcValue, true);\n      }\n      else {\n        newValue = [];\n      }\n    }\n    else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n      newValue = objValue;\n      if (isArguments(objValue)) {\n        newValue = toPlainObject(objValue);\n      }\n      else if (!isObject(objValue) || isFunction(objValue)) {\n        newValue = initCloneObject(srcValue);\n      }\n    }\n    else {\n      isCommon = false;\n    }\n  }\n  if (isCommon) {\n    // Recursively merge objects and arrays (susceptible to call stack limits).\n    stack.set(srcValue, newValue);\n    mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n    stack['delete'](srcValue);\n  }\n  assignMergeValue(object, key, newValue);\n}\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n  return setToString(overRest(func, start, identity), func + '');\n}\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n  return defineProperty(func, 'toString', {\n    'configurable': true,\n    'enumerable': false,\n    'value': constant(string),\n    'writable': true\n  });\n};\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return baseRest(function(object, sources) {\n    var index = -1,\n        length = sources.length,\n        customizer = length > 1 ? sources[length - 1] : undefined,\n        guard = length > 2 ? sources[2] : undefined;\n\n    customizer = (assigner.length > 3 && typeof customizer == 'function')\n      ? (length--, customizer)\n      : undefined;\n\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    object = Object(object);\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, index, customizer);\n      }\n    }\n    return object;\n  });\n}\n\n/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\n/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\n\n/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n  if (key === 'constructor' && typeof object[key] === 'function') {\n    return;\n  }\n\n  if (key == '__proto__') {\n    return;\n  }\n\n  return object[key];\n}\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n  var count = 0,\n      lastCalled = 0;\n\n  return function() {\n    var stamp = nativeNow(),\n        remaining = HOT_SPAN - (stamp - lastCalled);\n\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(undefined, arguments);\n  };\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n  return copyObject(value, keysIn(value));\n}\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n *   'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n *   'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n  baseMerge(object, source, srcIndex);\n});\n\n/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\n\n/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = merge;\n", "/*!\n * Cropper.js v1.6.2\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2024-04-21T07:43:05.335Z\n */\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Cropper = factory());\n})(this, (function () { 'use strict';\n\n  function ownKeys(e, r) {\n    var t = Object.keys(e);\n    if (Object.getOwnPropertySymbols) {\n      var o = Object.getOwnPropertySymbols(e);\n      r && (o = o.filter(function (r) {\n        return Object.getOwnPropertyDescriptor(e, r).enumerable;\n      })), t.push.apply(t, o);\n    }\n    return t;\n  }\n  function _objectSpread2(e) {\n    for (var r = 1; r < arguments.length; r++) {\n      var t = null != arguments[r] ? arguments[r] : {};\n      r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n        _defineProperty(e, r, t[r]);\n      }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n        Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n      });\n    }\n    return e;\n  }\n  function _toPrimitive(t, r) {\n    if (\"object\" != typeof t || !t) return t;\n    var e = t[Symbol.toPrimitive];\n    if (void 0 !== e) {\n      var i = e.call(t, r || \"default\");\n      if (\"object\" != typeof i) return i;\n      throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n    }\n    return (\"string\" === r ? String : Number)(t);\n  }\n  function _toPropertyKey(t) {\n    var i = _toPrimitive(t, \"string\");\n    return \"symbol\" == typeof i ? i : i + \"\";\n  }\n  function _typeof(o) {\n    \"@babel/helpers - typeof\";\n\n    return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n      return typeof o;\n    } : function (o) {\n      return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n    }, _typeof(o);\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\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, _toPropertyKey(descriptor.key), descriptor);\n    }\n  }\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    Object.defineProperty(Constructor, \"prototype\", {\n      writable: false\n    });\n    return Constructor;\n  }\n  function _defineProperty(obj, key, value) {\n    key = _toPropertyKey(key);\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n    return obj;\n  }\n  function _toConsumableArray(arr) {\n    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n  }\n  function _arrayWithoutHoles(arr) {\n    if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n  }\n  function _iterableToArray(iter) {\n    if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n  }\n  function _unsupportedIterableToArray(o, minLen) {\n    if (!o) return;\n    if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n    var n = Object.prototype.toString.call(o).slice(8, -1);\n    if (n === \"Object\" && o.constructor) n = o.constructor.name;\n    if (n === \"Map\" || n === \"Set\") return Array.from(o);\n    if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n  }\n  function _arrayLikeToArray(arr, len) {\n    if (len == null || len > arr.length) len = arr.length;\n    for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n    return arr2;\n  }\n  function _nonIterableSpread() {\n    throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n\n  var IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n  var WINDOW = IS_BROWSER ? window : {};\n  var IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false;\n  var HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\n  var NAMESPACE = 'cropper';\n\n  // Actions\n  var ACTION_ALL = 'all';\n  var ACTION_CROP = 'crop';\n  var ACTION_MOVE = 'move';\n  var ACTION_ZOOM = 'zoom';\n  var ACTION_EAST = 'e';\n  var ACTION_WEST = 'w';\n  var ACTION_SOUTH = 's';\n  var ACTION_NORTH = 'n';\n  var ACTION_NORTH_EAST = 'ne';\n  var ACTION_NORTH_WEST = 'nw';\n  var ACTION_SOUTH_EAST = 'se';\n  var ACTION_SOUTH_WEST = 'sw';\n\n  // Classes\n  var CLASS_CROP = \"\".concat(NAMESPACE, \"-crop\");\n  var CLASS_DISABLED = \"\".concat(NAMESPACE, \"-disabled\");\n  var CLASS_HIDDEN = \"\".concat(NAMESPACE, \"-hidden\");\n  var CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\n  var CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\n  var CLASS_MODAL = \"\".concat(NAMESPACE, \"-modal\");\n  var CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\");\n\n  // Data keys\n  var DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\n  var DATA_PREVIEW = \"\".concat(NAMESPACE, \"Preview\");\n\n  // Drag modes\n  var DRAG_MODE_CROP = 'crop';\n  var DRAG_MODE_MOVE = 'move';\n  var DRAG_MODE_NONE = 'none';\n\n  // Events\n  var EVENT_CROP = 'crop';\n  var EVENT_CROP_END = 'cropend';\n  var EVENT_CROP_MOVE = 'cropmove';\n  var EVENT_CROP_START = 'cropstart';\n  var EVENT_DBLCLICK = 'dblclick';\n  var EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\n  var EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\n  var EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\n  var EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\n  var EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\n  var EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\n  var EVENT_READY = 'ready';\n  var EVENT_RESIZE = 'resize';\n  var EVENT_WHEEL = 'wheel';\n  var EVENT_ZOOM = 'zoom';\n\n  // Mime types\n  var MIME_TYPE_JPEG = 'image/jpeg';\n\n  // RegExps\n  var REGEXP_ACTIONS = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/;\n  var REGEXP_DATA_URL = /^data:/;\n  var REGEXP_DATA_URL_JPEG = /^data:image\\/jpeg;base64,/;\n  var REGEXP_TAG_NAME = /^img|canvas$/i;\n\n  // Misc\n  // Inspired by the default width and height of a canvas element.\n  var MIN_CONTAINER_WIDTH = 200;\n  var MIN_CONTAINER_HEIGHT = 100;\n\n  var DEFAULTS = {\n    // Define the view mode of the cropper\n    viewMode: 0,\n    // 0, 1, 2, 3\n\n    // Define the dragging mode of the cropper\n    dragMode: DRAG_MODE_CROP,\n    // 'crop', 'move' or 'none'\n\n    // Define the initial aspect ratio of the crop box\n    initialAspectRatio: NaN,\n    // Define the aspect ratio of the crop box\n    aspectRatio: NaN,\n    // An object with the previous cropping result data\n    data: null,\n    // A selector for adding extra containers to preview\n    preview: '',\n    // Re-render the cropper when resize the window\n    responsive: true,\n    // Restore the cropped area after resize the window\n    restore: true,\n    // Check if the current image is a cross-origin image\n    checkCrossOrigin: true,\n    // Check the current image's Exif Orientation information\n    checkOrientation: true,\n    // Show the black modal\n    modal: true,\n    // Show the dashed lines for guiding\n    guides: true,\n    // Show the center indicator for guiding\n    center: true,\n    // Show the white modal to highlight the crop box\n    highlight: true,\n    // Show the grid background\n    background: true,\n    // Enable to crop the image automatically when initialize\n    autoCrop: true,\n    // Define the percentage of automatic cropping area when initializes\n    autoCropArea: 0.8,\n    // Enable to move the image\n    movable: true,\n    // Enable to rotate the image\n    rotatable: true,\n    // Enable to scale the image\n    scalable: true,\n    // Enable to zoom the image\n    zoomable: true,\n    // Enable to zoom the image by dragging touch\n    zoomOnTouch: true,\n    // Enable to zoom the image by wheeling mouse\n    zoomOnWheel: true,\n    // Define zoom ratio when zoom the image by wheeling mouse\n    wheelZoomRatio: 0.1,\n    // Enable to move the crop box\n    cropBoxMovable: true,\n    // Enable to resize the crop box\n    cropBoxResizable: true,\n    // Toggle drag mode between \"crop\" and \"move\" when click twice on the cropper\n    toggleDragModeOnDblclick: true,\n    // Size limitation\n    minCanvasWidth: 0,\n    minCanvasHeight: 0,\n    minCropBoxWidth: 0,\n    minCropBoxHeight: 0,\n    minContainerWidth: MIN_CONTAINER_WIDTH,\n    minContainerHeight: MIN_CONTAINER_HEIGHT,\n    // Shortcuts of events\n    ready: null,\n    cropstart: null,\n    cropmove: null,\n    cropend: null,\n    crop: null,\n    zoom: null\n  };\n\n  var TEMPLATE = '<div class=\"cropper-container\" touch-action=\"none\">' + '<div class=\"cropper-wrap-box\">' + '<div class=\"cropper-canvas\"></div>' + '</div>' + '<div class=\"cropper-drag-box\"></div>' + '<div class=\"cropper-crop-box\">' + '<span class=\"cropper-view-box\"></span>' + '<span class=\"cropper-dashed dashed-h\"></span>' + '<span class=\"cropper-dashed dashed-v\"></span>' + '<span class=\"cropper-center\"></span>' + '<span class=\"cropper-face\"></span>' + '<span class=\"cropper-line line-e\" data-cropper-action=\"e\"></span>' + '<span class=\"cropper-line line-n\" data-cropper-action=\"n\"></span>' + '<span class=\"cropper-line line-w\" data-cropper-action=\"w\"></span>' + '<span class=\"cropper-line line-s\" data-cropper-action=\"s\"></span>' + '<span class=\"cropper-point point-e\" data-cropper-action=\"e\"></span>' + '<span class=\"cropper-point point-n\" data-cropper-action=\"n\"></span>' + '<span class=\"cropper-point point-w\" data-cropper-action=\"w\"></span>' + '<span class=\"cropper-point point-s\" data-cropper-action=\"s\"></span>' + '<span class=\"cropper-point point-ne\" data-cropper-action=\"ne\"></span>' + '<span class=\"cropper-point point-nw\" data-cropper-action=\"nw\"></span>' + '<span class=\"cropper-point point-sw\" data-cropper-action=\"sw\"></span>' + '<span class=\"cropper-point point-se\" data-cropper-action=\"se\"></span>' + '</div>' + '</div>';\n\n  /**\n   * Check if the given value is not a number.\n   */\n  var isNaN = Number.isNaN || WINDOW.isNaN;\n\n  /**\n   * Check if the given value is a number.\n   * @param {*} value - The value to check.\n   * @returns {boolean} Returns `true` if the given value is a number, else `false`.\n   */\n  function isNumber(value) {\n    return typeof value === 'number' && !isNaN(value);\n  }\n\n  /**\n   * Check if the given value is a positive number.\n   * @param {*} value - The value to check.\n   * @returns {boolean} Returns `true` if the given value is a positive number, else `false`.\n   */\n  var isPositiveNumber = function isPositiveNumber(value) {\n    return value > 0 && value < Infinity;\n  };\n\n  /**\n   * Check if the given value is undefined.\n   * @param {*} value - The value to check.\n   * @returns {boolean} Returns `true` if the given value is undefined, else `false`.\n   */\n  function isUndefined(value) {\n    return typeof value === 'undefined';\n  }\n\n  /**\n   * Check if the given value is an object.\n   * @param {*} value - The value to check.\n   * @returns {boolean} Returns `true` if the given value is an object, else `false`.\n   */\n  function isObject(value) {\n    return _typeof(value) === 'object' && value !== null;\n  }\n  var hasOwnProperty = Object.prototype.hasOwnProperty;\n\n  /**\n   * Check if the given value is a plain object.\n   * @param {*} value - The value to check.\n   * @returns {boolean} Returns `true` if the given value is a plain object, else `false`.\n   */\n  function isPlainObject(value) {\n    if (!isObject(value)) {\n      return false;\n    }\n    try {\n      var _constructor = value.constructor;\n      var prototype = _constructor.prototype;\n      return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');\n    } catch (error) {\n      return false;\n    }\n  }\n\n  /**\n   * Check if the given value is a function.\n   * @param {*} value - The value to check.\n   * @returns {boolean} Returns `true` if the given value is a function, else `false`.\n   */\n  function isFunction(value) {\n    return typeof value === 'function';\n  }\n  var slice = Array.prototype.slice;\n\n  /**\n   * Convert array-like or iterable object to an array.\n   * @param {*} value - The value to convert.\n   * @returns {Array} Returns a new array.\n   */\n  function toArray(value) {\n    return Array.from ? Array.from(value) : slice.call(value);\n  }\n\n  /**\n   * Iterate the given data.\n   * @param {*} data - The data to iterate.\n   * @param {Function} callback - The process function for each element.\n   * @returns {*} The original data.\n   */\n  function forEach(data, callback) {\n    if (data && isFunction(callback)) {\n      if (Array.isArray(data) || isNumber(data.length) /* array-like */) {\n        toArray(data).forEach(function (value, key) {\n          callback.call(data, value, key, data);\n        });\n      } else if (isObject(data)) {\n        Object.keys(data).forEach(function (key) {\n          callback.call(data, data[key], key, data);\n        });\n      }\n    }\n    return data;\n  }\n\n  /**\n   * Extend the given object.\n   * @param {*} target - The target object to extend.\n   * @param {*} args - The rest objects for merging to the target object.\n   * @returns {Object} The extended object.\n   */\n  var assign = Object.assign || function assign(target) {\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    if (isObject(target) && args.length > 0) {\n      args.forEach(function (arg) {\n        if (isObject(arg)) {\n          Object.keys(arg).forEach(function (key) {\n            target[key] = arg[key];\n          });\n        }\n      });\n    }\n    return target;\n  };\n  var REGEXP_DECIMALS = /\\.\\d*(?:0|9){12}\\d*$/;\n\n  /**\n   * Normalize decimal number.\n   * Check out {@link https://0.30000000000000004.com/}\n   * @param {number} value - The value to normalize.\n   * @param {number} [times=100000000000] - The times for normalizing.\n   * @returns {number} Returns the normalized number.\n   */\n  function normalizeDecimalNumber(value) {\n    var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;\n    return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;\n  }\n  var REGEXP_SUFFIX = /^width|height|left|top|marginLeft|marginTop$/;\n\n  /**\n   * Apply styles to the given element.\n   * @param {Element} element - The target element.\n   * @param {Object} styles - The styles for applying.\n   */\n  function setStyle(element, styles) {\n    var style = element.style;\n    forEach(styles, function (value, property) {\n      if (REGEXP_SUFFIX.test(property) && isNumber(value)) {\n        value = \"\".concat(value, \"px\");\n      }\n      style[property] = value;\n    });\n  }\n\n  /**\n   * Check if the given element has a special class.\n   * @param {Element} element - The element to check.\n   * @param {string} value - The class to search.\n   * @returns {boolean} Returns `true` if the special class was found.\n   */\n  function hasClass(element, value) {\n    return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;\n  }\n\n  /**\n   * Add classes to the given element.\n   * @param {Element} element - The target element.\n   * @param {string} value - The classes to be added.\n   */\n  function addClass(element, value) {\n    if (!value) {\n      return;\n    }\n    if (isNumber(element.length)) {\n      forEach(element, function (elem) {\n        addClass(elem, value);\n      });\n      return;\n    }\n    if (element.classList) {\n      element.classList.add(value);\n      return;\n    }\n    var className = element.className.trim();\n    if (!className) {\n      element.className = value;\n    } else if (className.indexOf(value) < 0) {\n      element.className = \"\".concat(className, \" \").concat(value);\n    }\n  }\n\n  /**\n   * Remove classes from the given element.\n   * @param {Element} element - The target element.\n   * @param {string} value - The classes to be removed.\n   */\n  function removeClass(element, value) {\n    if (!value) {\n      return;\n    }\n    if (isNumber(element.length)) {\n      forEach(element, function (elem) {\n        removeClass(elem, value);\n      });\n      return;\n    }\n    if (element.classList) {\n      element.classList.remove(value);\n      return;\n    }\n    if (element.className.indexOf(value) >= 0) {\n      element.className = element.className.replace(value, '');\n    }\n  }\n\n  /**\n   * Add or remove classes from the given element.\n   * @param {Element} element - The target element.\n   * @param {string} value - The classes to be toggled.\n   * @param {boolean} added - Add only.\n   */\n  function toggleClass(element, value, added) {\n    if (!value) {\n      return;\n    }\n    if (isNumber(element.length)) {\n      forEach(element, function (elem) {\n        toggleClass(elem, value, added);\n      });\n      return;\n    }\n\n    // IE10-11 doesn't support the second parameter of `classList.toggle`\n    if (added) {\n      addClass(element, value);\n    } else {\n      removeClass(element, value);\n    }\n  }\n  var REGEXP_CAMEL_CASE = /([a-z\\d])([A-Z])/g;\n\n  /**\n   * Transform the given string from camelCase to kebab-case\n   * @param {string} value - The value to transform.\n   * @returns {string} The transformed value.\n   */\n  function toParamCase(value) {\n    return value.replace(REGEXP_CAMEL_CASE, '$1-$2').toLowerCase();\n  }\n\n  /**\n   * Get data from the given element.\n   * @param {Element} element - The target element.\n   * @param {string} name - The data key to get.\n   * @returns {string} The data value.\n   */\n  function getData(element, name) {\n    if (isObject(element[name])) {\n      return element[name];\n    }\n    if (element.dataset) {\n      return element.dataset[name];\n    }\n    return element.getAttribute(\"data-\".concat(toParamCase(name)));\n  }\n\n  /**\n   * Set data to the given element.\n   * @param {Element} element - The target element.\n   * @param {string} name - The data key to set.\n   * @param {string} data - The data value.\n   */\n  function setData(element, name, data) {\n    if (isObject(data)) {\n      element[name] = data;\n    } else if (element.dataset) {\n      element.dataset[name] = data;\n    } else {\n      element.setAttribute(\"data-\".concat(toParamCase(name)), data);\n    }\n  }\n\n  /**\n   * Remove data from the given element.\n   * @param {Element} element - The target element.\n   * @param {string} name - The data key to remove.\n   */\n  function removeData(element, name) {\n    if (isObject(element[name])) {\n      try {\n        delete element[name];\n      } catch (error) {\n        element[name] = undefined;\n      }\n    } else if (element.dataset) {\n      // #128 Safari not allows to delete dataset property\n      try {\n        delete element.dataset[name];\n      } catch (error) {\n        element.dataset[name] = undefined;\n      }\n    } else {\n      element.removeAttribute(\"data-\".concat(toParamCase(name)));\n    }\n  }\n  var REGEXP_SPACES = /\\s\\s*/;\n  var onceSupported = function () {\n    var supported = false;\n    if (IS_BROWSER) {\n      var once = false;\n      var listener = function listener() {};\n      var options = Object.defineProperty({}, 'once', {\n        get: function get() {\n          supported = true;\n          return once;\n        },\n        /**\n         * This setter can fix a `TypeError` in strict mode\n         * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only}\n         * @param {boolean} value - The value to set\n         */\n        set: function set(value) {\n          once = value;\n        }\n      });\n      WINDOW.addEventListener('test', listener, options);\n      WINDOW.removeEventListener('test', listener, options);\n    }\n    return supported;\n  }();\n\n  /**\n   * Remove event listener from the target element.\n   * @param {Element} element - The event target.\n   * @param {string} type - The event type(s).\n   * @param {Function} listener - The event listener.\n   * @param {Object} options - The event options.\n   */\n  function removeListener(element, type, listener) {\n    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    var handler = listener;\n    type.trim().split(REGEXP_SPACES).forEach(function (event) {\n      if (!onceSupported) {\n        var listeners = element.listeners;\n        if (listeners && listeners[event] && listeners[event][listener]) {\n          handler = listeners[event][listener];\n          delete listeners[event][listener];\n          if (Object.keys(listeners[event]).length === 0) {\n            delete listeners[event];\n          }\n          if (Object.keys(listeners).length === 0) {\n            delete element.listeners;\n          }\n        }\n      }\n      element.removeEventListener(event, handler, options);\n    });\n  }\n\n  /**\n   * Add event listener to the target element.\n   * @param {Element} element - The event target.\n   * @param {string} type - The event type(s).\n   * @param {Function} listener - The event listener.\n   * @param {Object} options - The event options.\n   */\n  function addListener(element, type, listener) {\n    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    var _handler = listener;\n    type.trim().split(REGEXP_SPACES).forEach(function (event) {\n      if (options.once && !onceSupported) {\n        var _element$listeners = element.listeners,\n          listeners = _element$listeners === void 0 ? {} : _element$listeners;\n        _handler = function handler() {\n          delete listeners[event][listener];\n          element.removeEventListener(event, _handler, options);\n          for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n            args[_key2] = arguments[_key2];\n          }\n          listener.apply(element, args);\n        };\n        if (!listeners[event]) {\n          listeners[event] = {};\n        }\n        if (listeners[event][listener]) {\n          element.removeEventListener(event, listeners[event][listener], options);\n        }\n        listeners[event][listener] = _handler;\n        element.listeners = listeners;\n      }\n      element.addEventListener(event, _handler, options);\n    });\n  }\n\n  /**\n   * Dispatch event on the target element.\n   * @param {Element} element - The event target.\n   * @param {string} type - The event type(s).\n   * @param {Object} data - The additional event data.\n   * @returns {boolean} Indicate if the event is default prevented or not.\n   */\n  function dispatchEvent(element, type, data) {\n    var event;\n\n    // Event and CustomEvent on IE9-11 are global objects, not constructors\n    if (isFunction(Event) && isFunction(CustomEvent)) {\n      event = new CustomEvent(type, {\n        detail: data,\n        bubbles: true,\n        cancelable: true\n      });\n    } else {\n      event = document.createEvent('CustomEvent');\n      event.initCustomEvent(type, true, true, data);\n    }\n    return element.dispatchEvent(event);\n  }\n\n  /**\n   * Get the offset base on the document.\n   * @param {Element} element - The target element.\n   * @returns {Object} The offset data.\n   */\n  function getOffset(element) {\n    var box = element.getBoundingClientRect();\n    return {\n      left: box.left + (window.pageXOffset - document.documentElement.clientLeft),\n      top: box.top + (window.pageYOffset - document.documentElement.clientTop)\n    };\n  }\n  var location = WINDOW.location;\n  var REGEXP_ORIGINS = /^(\\w+:)\\/\\/([^:/?#]*):?(\\d*)/i;\n\n  /**\n   * Check if the given URL is a cross origin URL.\n   * @param {string} url - The target URL.\n   * @returns {boolean} Returns `true` if the given URL is a cross origin URL, else `false`.\n   */\n  function isCrossOriginURL(url) {\n    var parts = url.match(REGEXP_ORIGINS);\n    return parts !== null && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port);\n  }\n\n  /**\n   * Add timestamp to the given URL.\n   * @param {string} url - The target URL.\n   * @returns {string} The result URL.\n   */\n  function addTimestamp(url) {\n    var timestamp = \"timestamp=\".concat(new Date().getTime());\n    return url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp;\n  }\n\n  /**\n   * Get transforms base on the given object.\n   * @param {Object} obj - The target object.\n   * @returns {string} A string contains transform values.\n   */\n  function getTransforms(_ref) {\n    var rotate = _ref.rotate,\n      scaleX = _ref.scaleX,\n      scaleY = _ref.scaleY,\n      translateX = _ref.translateX,\n      translateY = _ref.translateY;\n    var values = [];\n    if (isNumber(translateX) && translateX !== 0) {\n      values.push(\"translateX(\".concat(translateX, \"px)\"));\n    }\n    if (isNumber(translateY) && translateY !== 0) {\n      values.push(\"translateY(\".concat(translateY, \"px)\"));\n    }\n\n    // Rotate should come first before scale to match orientation transform\n    if (isNumber(rotate) && rotate !== 0) {\n      values.push(\"rotate(\".concat(rotate, \"deg)\"));\n    }\n    if (isNumber(scaleX) && scaleX !== 1) {\n      values.push(\"scaleX(\".concat(scaleX, \")\"));\n    }\n    if (isNumber(scaleY) && scaleY !== 1) {\n      values.push(\"scaleY(\".concat(scaleY, \")\"));\n    }\n    var transform = values.length ? values.join(' ') : 'none';\n    return {\n      WebkitTransform: transform,\n      msTransform: transform,\n      transform: transform\n    };\n  }\n\n  /**\n   * Get the max ratio of a group of pointers.\n   * @param {string} pointers - The target pointers.\n   * @returns {number} The result ratio.\n   */\n  function getMaxZoomRatio(pointers) {\n    var pointers2 = _objectSpread2({}, pointers);\n    var maxRatio = 0;\n    forEach(pointers, function (pointer, pointerId) {\n      delete pointers2[pointerId];\n      forEach(pointers2, function (pointer2) {\n        var x1 = Math.abs(pointer.startX - pointer2.startX);\n        var y1 = Math.abs(pointer.startY - pointer2.startY);\n        var x2 = Math.abs(pointer.endX - pointer2.endX);\n        var y2 = Math.abs(pointer.endY - pointer2.endY);\n        var z1 = Math.sqrt(x1 * x1 + y1 * y1);\n        var z2 = Math.sqrt(x2 * x2 + y2 * y2);\n        var ratio = (z2 - z1) / z1;\n        if (Math.abs(ratio) > Math.abs(maxRatio)) {\n          maxRatio = ratio;\n        }\n      });\n    });\n    return maxRatio;\n  }\n\n  /**\n   * Get a pointer from an event object.\n   * @param {Object} event - The target event object.\n   * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not.\n   * @returns {Object} The result pointer contains start and/or end point coordinates.\n   */\n  function getPointer(_ref2, endOnly) {\n    var pageX = _ref2.pageX,\n      pageY = _ref2.pageY;\n    var end = {\n      endX: pageX,\n      endY: pageY\n    };\n    return endOnly ? end : _objectSpread2({\n      startX: pageX,\n      startY: pageY\n    }, end);\n  }\n\n  /**\n   * Get the center point coordinate of a group of pointers.\n   * @param {Object} pointers - The target pointers.\n   * @returns {Object} The center point coordinate.\n   */\n  function getPointersCenter(pointers) {\n    var pageX = 0;\n    var pageY = 0;\n    var count = 0;\n    forEach(pointers, function (_ref3) {\n      var startX = _ref3.startX,\n        startY = _ref3.startY;\n      pageX += startX;\n      pageY += startY;\n      count += 1;\n    });\n    pageX /= count;\n    pageY /= count;\n    return {\n      pageX: pageX,\n      pageY: pageY\n    };\n  }\n\n  /**\n   * Get the max sizes in a rectangle under the given aspect ratio.\n   * @param {Object} data - The original sizes.\n   * @param {string} [type='contain'] - The adjust type.\n   * @returns {Object} The result sizes.\n   */\n  function getAdjustedSizes(_ref4) {\n    var aspectRatio = _ref4.aspectRatio,\n      height = _ref4.height,\n      width = _ref4.width;\n    var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'contain';\n    var isValidWidth = isPositiveNumber(width);\n    var isValidHeight = isPositiveNumber(height);\n    if (isValidWidth && isValidHeight) {\n      var adjustedWidth = height * aspectRatio;\n      if (type === 'contain' && adjustedWidth > width || type === 'cover' && adjustedWidth < width) {\n        height = width / aspectRatio;\n      } else {\n        width = height * aspectRatio;\n      }\n    } else if (isValidWidth) {\n      height = width / aspectRatio;\n    } else if (isValidHeight) {\n      width = height * aspectRatio;\n    }\n    return {\n      width: width,\n      height: height\n    };\n  }\n\n  /**\n   * Get the new sizes of a rectangle after rotated.\n   * @param {Object} data - The original sizes.\n   * @returns {Object} The result sizes.\n   */\n  function getRotatedSizes(_ref5) {\n    var width = _ref5.width,\n      height = _ref5.height,\n      degree = _ref5.degree;\n    degree = Math.abs(degree) % 180;\n    if (degree === 90) {\n      return {\n        width: height,\n        height: width\n      };\n    }\n    var arc = degree % 90 * Math.PI / 180;\n    var sinArc = Math.sin(arc);\n    var cosArc = Math.cos(arc);\n    var newWidth = width * cosArc + height * sinArc;\n    var newHeight = width * sinArc + height * cosArc;\n    return degree > 90 ? {\n      width: newHeight,\n      height: newWidth\n    } : {\n      width: newWidth,\n      height: newHeight\n    };\n  }\n\n  /**\n   * Get a canvas which drew the given image.\n   * @param {HTMLImageElement} image - The image for drawing.\n   * @param {Object} imageData - The image data.\n   * @param {Object} canvasData - The canvas data.\n   * @param {Object} options - The options.\n   * @returns {HTMLCanvasElement} The result canvas.\n   */\n  function getSourceCanvas(image, _ref6, _ref7, _ref8) {\n    var imageAspectRatio = _ref6.aspectRatio,\n      imageNaturalWidth = _ref6.naturalWidth,\n      imageNaturalHeight = _ref6.naturalHeight,\n      _ref6$rotate = _ref6.rotate,\n      rotate = _ref6$rotate === void 0 ? 0 : _ref6$rotate,\n      _ref6$scaleX = _ref6.scaleX,\n      scaleX = _ref6$scaleX === void 0 ? 1 : _ref6$scaleX,\n      _ref6$scaleY = _ref6.scaleY,\n      scaleY = _ref6$scaleY === void 0 ? 1 : _ref6$scaleY;\n    var aspectRatio = _ref7.aspectRatio,\n      naturalWidth = _ref7.naturalWidth,\n      naturalHeight = _ref7.naturalHeight;\n    var _ref8$fillColor = _ref8.fillColor,\n      fillColor = _ref8$fillColor === void 0 ? 'transparent' : _ref8$fillColor,\n      _ref8$imageSmoothingE = _ref8.imageSmoothingEnabled,\n      imageSmoothingEnabled = _ref8$imageSmoothingE === void 0 ? true : _ref8$imageSmoothingE,\n      _ref8$imageSmoothingQ = _ref8.imageSmoothingQuality,\n      imageSmoothingQuality = _ref8$imageSmoothingQ === void 0 ? 'low' : _ref8$imageSmoothingQ,\n      _ref8$maxWidth = _ref8.maxWidth,\n      maxWidth = _ref8$maxWidth === void 0 ? Infinity : _ref8$maxWidth,\n      _ref8$maxHeight = _ref8.maxHeight,\n      maxHeight = _ref8$maxHeight === void 0 ? Infinity : _ref8$maxHeight,\n      _ref8$minWidth = _ref8.minWidth,\n      minWidth = _ref8$minWidth === void 0 ? 0 : _ref8$minWidth,\n      _ref8$minHeight = _ref8.minHeight,\n      minHeight = _ref8$minHeight === void 0 ? 0 : _ref8$minHeight;\n    var canvas = document.createElement('canvas');\n    var context = canvas.getContext('2d');\n    var maxSizes = getAdjustedSizes({\n      aspectRatio: aspectRatio,\n      width: maxWidth,\n      height: maxHeight\n    });\n    var minSizes = getAdjustedSizes({\n      aspectRatio: aspectRatio,\n      width: minWidth,\n      height: minHeight\n    }, 'cover');\n    var width = Math.min(maxSizes.width, Math.max(minSizes.width, naturalWidth));\n    var height = Math.min(maxSizes.height, Math.max(minSizes.height, naturalHeight));\n\n    // Note: should always use image's natural sizes for drawing as\n    // imageData.naturalWidth === canvasData.naturalHeight when rotate % 180 === 90\n    var destMaxSizes = getAdjustedSizes({\n      aspectRatio: imageAspectRatio,\n      width: maxWidth,\n      height: maxHeight\n    });\n    var destMinSizes = getAdjustedSizes({\n      aspectRatio: imageAspectRatio,\n      width: minWidth,\n      height: minHeight\n    }, 'cover');\n    var destWidth = Math.min(destMaxSizes.width, Math.max(destMinSizes.width, imageNaturalWidth));\n    var destHeight = Math.min(destMaxSizes.height, Math.max(destMinSizes.height, imageNaturalHeight));\n    var params = [-destWidth / 2, -destHeight / 2, destWidth, destHeight];\n    canvas.width = normalizeDecimalNumber(width);\n    canvas.height = normalizeDecimalNumber(height);\n    context.fillStyle = fillColor;\n    context.fillRect(0, 0, width, height);\n    context.save();\n    context.translate(width / 2, height / 2);\n    context.rotate(rotate * Math.PI / 180);\n    context.scale(scaleX, scaleY);\n    context.imageSmoothingEnabled = imageSmoothingEnabled;\n    context.imageSmoothingQuality = imageSmoothingQuality;\n    context.drawImage.apply(context, [image].concat(_toConsumableArray(params.map(function (param) {\n      return Math.floor(normalizeDecimalNumber(param));\n    }))));\n    context.restore();\n    return canvas;\n  }\n  var fromCharCode = String.fromCharCode;\n\n  /**\n   * Get string from char code in data view.\n   * @param {DataView} dataView - The data view for read.\n   * @param {number} start - The start index.\n   * @param {number} length - The read length.\n   * @returns {string} The read result.\n   */\n  function getStringFromCharCode(dataView, start, length) {\n    var str = '';\n    length += start;\n    for (var i = start; i < length; i += 1) {\n      str += fromCharCode(dataView.getUint8(i));\n    }\n    return str;\n  }\n  var REGEXP_DATA_URL_HEAD = /^data:.*,/;\n\n  /**\n   * Transform Data URL to array buffer.\n   * @param {string} dataURL - The Data URL to transform.\n   * @returns {ArrayBuffer} The result array buffer.\n   */\n  function dataURLToArrayBuffer(dataURL) {\n    var base64 = dataURL.replace(REGEXP_DATA_URL_HEAD, '');\n    var binary = atob(base64);\n    var arrayBuffer = new ArrayBuffer(binary.length);\n    var uint8 = new Uint8Array(arrayBuffer);\n    forEach(uint8, function (value, i) {\n      uint8[i] = binary.charCodeAt(i);\n    });\n    return arrayBuffer;\n  }\n\n  /**\n   * Transform array buffer to Data URL.\n   * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n   * @param {string} mimeType - The mime type of the Data URL.\n   * @returns {string} The result Data URL.\n   */\n  function arrayBufferToDataURL(arrayBuffer, mimeType) {\n    var chunks = [];\n\n    // Chunk Typed Array for better performance (#435)\n    var chunkSize = 8192;\n    var uint8 = new Uint8Array(arrayBuffer);\n    while (uint8.length > 0) {\n      // XXX: Babel's `toConsumableArray` helper will throw error in IE or Safari 9\n      // eslint-disable-next-line prefer-spread\n      chunks.push(fromCharCode.apply(null, toArray(uint8.subarray(0, chunkSize))));\n      uint8 = uint8.subarray(chunkSize);\n    }\n    return \"data:\".concat(mimeType, \";base64,\").concat(btoa(chunks.join('')));\n  }\n\n  /**\n   * Get orientation value from given array buffer.\n   * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n   * @returns {number} The read orientation value.\n   */\n  function resetAndGetOrientation(arrayBuffer) {\n    var dataView = new DataView(arrayBuffer);\n    var orientation;\n\n    // Ignores range error when the image does not have correct Exif information\n    try {\n      var littleEndian;\n      var app1Start;\n      var ifdStart;\n\n      // Only handle JPEG image (start by 0xFFD8)\n      if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {\n        var length = dataView.byteLength;\n        var offset = 2;\n        while (offset + 1 < length) {\n          if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {\n            app1Start = offset;\n            break;\n          }\n          offset += 1;\n        }\n      }\n      if (app1Start) {\n        var exifIDCode = app1Start + 4;\n        var tiffOffset = app1Start + 10;\n        if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {\n          var endianness = dataView.getUint16(tiffOffset);\n          littleEndian = endianness === 0x4949;\n          if (littleEndian || endianness === 0x4D4D /* bigEndian */) {\n            if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {\n              var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);\n              if (firstIFDOffset >= 0x00000008) {\n                ifdStart = tiffOffset + firstIFDOffset;\n              }\n            }\n          }\n        }\n      }\n      if (ifdStart) {\n        var _length = dataView.getUint16(ifdStart, littleEndian);\n        var _offset;\n        var i;\n        for (i = 0; i < _length; i += 1) {\n          _offset = ifdStart + i * 12 + 2;\n          if (dataView.getUint16(_offset, littleEndian) === 0x0112 /* Orientation */) {\n            // 8 is the offset of the current tag's value\n            _offset += 8;\n\n            // Get the original orientation value\n            orientation = dataView.getUint16(_offset, littleEndian);\n\n            // Override the orientation with its default value\n            dataView.setUint16(_offset, 1, littleEndian);\n            break;\n          }\n        }\n      }\n    } catch (error) {\n      orientation = 1;\n    }\n    return orientation;\n  }\n\n  /**\n   * Parse Exif Orientation value.\n   * @param {number} orientation - The orientation to parse.\n   * @returns {Object} The parsed result.\n   */\n  function parseOrientation(orientation) {\n    var rotate = 0;\n    var scaleX = 1;\n    var scaleY = 1;\n    switch (orientation) {\n      // Flip horizontal\n      case 2:\n        scaleX = -1;\n        break;\n\n      // Rotate left 180\u00B0\n      case 3:\n        rotate = -180;\n        break;\n\n      // Flip vertical\n      case 4:\n        scaleY = -1;\n        break;\n\n      // Flip vertical and rotate right 90\u00B0\n      case 5:\n        rotate = 90;\n        scaleY = -1;\n        break;\n\n      // Rotate right 90\u00B0\n      case 6:\n        rotate = 90;\n        break;\n\n      // Flip horizontal and rotate right 90\u00B0\n      case 7:\n        rotate = 90;\n        scaleX = -1;\n        break;\n\n      // Rotate left 90\u00B0\n      case 8:\n        rotate = -90;\n        break;\n    }\n    return {\n      rotate: rotate,\n      scaleX: scaleX,\n      scaleY: scaleY\n    };\n  }\n\n  var render = {\n    render: function render() {\n      this.initContainer();\n      this.initCanvas();\n      this.initCropBox();\n      this.renderCanvas();\n      if (this.cropped) {\n        this.renderCropBox();\n      }\n    },\n    initContainer: function initContainer() {\n      var element = this.element,\n        options = this.options,\n        container = this.container,\n        cropper = this.cropper;\n      var minWidth = Number(options.minContainerWidth);\n      var minHeight = Number(options.minContainerHeight);\n      addClass(cropper, CLASS_HIDDEN);\n      removeClass(element, CLASS_HIDDEN);\n      var containerData = {\n        width: Math.max(container.offsetWidth, minWidth >= 0 ? minWidth : MIN_CONTAINER_WIDTH),\n        height: Math.max(container.offsetHeight, minHeight >= 0 ? minHeight : MIN_CONTAINER_HEIGHT)\n      };\n      this.containerData = containerData;\n      setStyle(cropper, {\n        width: containerData.width,\n        height: containerData.height\n      });\n      addClass(element, CLASS_HIDDEN);\n      removeClass(cropper, CLASS_HIDDEN);\n    },\n    // Canvas (image wrapper)\n    initCanvas: function initCanvas() {\n      var containerData = this.containerData,\n        imageData = this.imageData;\n      var viewMode = this.options.viewMode;\n      var rotated = Math.abs(imageData.rotate) % 180 === 90;\n      var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth;\n      var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight;\n      var aspectRatio = naturalWidth / naturalHeight;\n      var canvasWidth = containerData.width;\n      var canvasHeight = containerData.height;\n      if (containerData.height * aspectRatio > containerData.width) {\n        if (viewMode === 3) {\n          canvasWidth = containerData.height * aspectRatio;\n        } else {\n          canvasHeight = containerData.width / aspectRatio;\n        }\n      } else if (viewMode === 3) {\n        canvasHeight = containerData.width / aspectRatio;\n      } else {\n        canvasWidth = containerData.height * aspectRatio;\n      }\n      var canvasData = {\n        aspectRatio: aspectRatio,\n        naturalWidth: naturalWidth,\n        naturalHeight: naturalHeight,\n        width: canvasWidth,\n        height: canvasHeight\n      };\n      this.canvasData = canvasData;\n      this.limited = viewMode === 1 || viewMode === 2;\n      this.limitCanvas(true, true);\n      canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n      canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n      canvasData.left = (containerData.width - canvasData.width) / 2;\n      canvasData.top = (containerData.height - canvasData.height) / 2;\n      canvasData.oldLeft = canvasData.left;\n      canvasData.oldTop = canvasData.top;\n      this.initialCanvasData = assign({}, canvasData);\n    },\n    limitCanvas: function limitCanvas(sizeLimited, positionLimited) {\n      var options = this.options,\n        containerData = this.containerData,\n        canvasData = this.canvasData,\n        cropBoxData = this.cropBoxData;\n      var viewMode = options.viewMode;\n      var aspectRatio = canvasData.aspectRatio;\n      var cropped = this.cropped && cropBoxData;\n      if (sizeLimited) {\n        var minCanvasWidth = Number(options.minCanvasWidth) || 0;\n        var minCanvasHeight = Number(options.minCanvasHeight) || 0;\n        if (viewMode > 1) {\n          minCanvasWidth = Math.max(minCanvasWidth, containerData.width);\n          minCanvasHeight = Math.max(minCanvasHeight, containerData.height);\n          if (viewMode === 3) {\n            if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n              minCanvasWidth = minCanvasHeight * aspectRatio;\n            } else {\n              minCanvasHeight = minCanvasWidth / aspectRatio;\n            }\n          }\n        } else if (viewMode > 0) {\n          if (minCanvasWidth) {\n            minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0);\n          } else if (minCanvasHeight) {\n            minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0);\n          } else if (cropped) {\n            minCanvasWidth = cropBoxData.width;\n            minCanvasHeight = cropBoxData.height;\n            if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n              minCanvasWidth = minCanvasHeight * aspectRatio;\n            } else {\n              minCanvasHeight = minCanvasWidth / aspectRatio;\n            }\n          }\n        }\n        var _getAdjustedSizes = getAdjustedSizes({\n          aspectRatio: aspectRatio,\n          width: minCanvasWidth,\n          height: minCanvasHeight\n        });\n        minCanvasWidth = _getAdjustedSizes.width;\n        minCanvasHeight = _getAdjustedSizes.height;\n        canvasData.minWidth = minCanvasWidth;\n        canvasData.minHeight = minCanvasHeight;\n        canvasData.maxWidth = Infinity;\n        canvasData.maxHeight = Infinity;\n      }\n      if (positionLimited) {\n        if (viewMode > (cropped ? 0 : 1)) {\n          var newCanvasLeft = containerData.width - canvasData.width;\n          var newCanvasTop = containerData.height - canvasData.height;\n          canvasData.minLeft = Math.min(0, newCanvasLeft);\n          canvasData.minTop = Math.min(0, newCanvasTop);\n          canvasData.maxLeft = Math.max(0, newCanvasLeft);\n          canvasData.maxTop = Math.max(0, newCanvasTop);\n          if (cropped && this.limited) {\n            canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width));\n            canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height));\n            canvasData.maxLeft = cropBoxData.left;\n            canvasData.maxTop = cropBoxData.top;\n            if (viewMode === 2) {\n              if (canvasData.width >= containerData.width) {\n                canvasData.minLeft = Math.min(0, newCanvasLeft);\n                canvasData.maxLeft = Math.max(0, newCanvasLeft);\n              }\n              if (canvasData.height >= containerData.height) {\n                canvasData.minTop = Math.min(0, newCanvasTop);\n                canvasData.maxTop = Math.max(0, newCanvasTop);\n              }\n            }\n          }\n        } else {\n          canvasData.minLeft = -canvasData.width;\n          canvasData.minTop = -canvasData.height;\n          canvasData.maxLeft = containerData.width;\n          canvasData.maxTop = containerData.height;\n        }\n      }\n    },\n    renderCanvas: function renderCanvas(changed, transformed) {\n      var canvasData = this.canvasData,\n        imageData = this.imageData;\n      if (transformed) {\n        var _getRotatedSizes = getRotatedSizes({\n            width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1),\n            height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1),\n            degree: imageData.rotate || 0\n          }),\n          naturalWidth = _getRotatedSizes.width,\n          naturalHeight = _getRotatedSizes.height;\n        var width = canvasData.width * (naturalWidth / canvasData.naturalWidth);\n        var height = canvasData.height * (naturalHeight / canvasData.naturalHeight);\n        canvasData.left -= (width - canvasData.width) / 2;\n        canvasData.top -= (height - canvasData.height) / 2;\n        canvasData.width = width;\n        canvasData.height = height;\n        canvasData.aspectRatio = naturalWidth / naturalHeight;\n        canvasData.naturalWidth = naturalWidth;\n        canvasData.naturalHeight = naturalHeight;\n        this.limitCanvas(true, false);\n      }\n      if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) {\n        canvasData.left = canvasData.oldLeft;\n      }\n      if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) {\n        canvasData.top = canvasData.oldTop;\n      }\n      canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n      canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n      this.limitCanvas(false, true);\n      canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft);\n      canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop);\n      canvasData.oldLeft = canvasData.left;\n      canvasData.oldTop = canvasData.top;\n      setStyle(this.canvas, assign({\n        width: canvasData.width,\n        height: canvasData.height\n      }, getTransforms({\n        translateX: canvasData.left,\n        translateY: canvasData.top\n      })));\n      this.renderImage(changed);\n      if (this.cropped && this.limited) {\n        this.limitCropBox(true, true);\n      }\n    },\n    renderImage: function renderImage(changed) {\n      var canvasData = this.canvasData,\n        imageData = this.imageData;\n      var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth);\n      var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight);\n      assign(imageData, {\n        width: width,\n        height: height,\n        left: (canvasData.width - width) / 2,\n        top: (canvasData.height - height) / 2\n      });\n      setStyle(this.image, assign({\n        width: imageData.width,\n        height: imageData.height\n      }, getTransforms(assign({\n        translateX: imageData.left,\n        translateY: imageData.top\n      }, imageData))));\n      if (changed) {\n        this.output();\n      }\n    },\n    initCropBox: function initCropBox() {\n      var options = this.options,\n        canvasData = this.canvasData;\n      var aspectRatio = options.aspectRatio || options.initialAspectRatio;\n      var autoCropArea = Number(options.autoCropArea) || 0.8;\n      var cropBoxData = {\n        width: canvasData.width,\n        height: canvasData.height\n      };\n      if (aspectRatio) {\n        if (canvasData.height * aspectRatio > canvasData.width) {\n          cropBoxData.height = cropBoxData.width / aspectRatio;\n        } else {\n          cropBoxData.width = cropBoxData.height * aspectRatio;\n        }\n      }\n      this.cropBoxData = cropBoxData;\n      this.limitCropBox(true, true);\n\n      // Initialize auto crop area\n      cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n      cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n\n      // The width/height of auto crop area must large than \"minWidth/Height\"\n      cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea);\n      cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea);\n      cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2;\n      cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2;\n      cropBoxData.oldLeft = cropBoxData.left;\n      cropBoxData.oldTop = cropBoxData.top;\n      this.initialCropBoxData = assign({}, cropBoxData);\n    },\n    limitCropBox: function limitCropBox(sizeLimited, positionLimited) {\n      var options = this.options,\n        containerData = this.containerData,\n        canvasData = this.canvasData,\n        cropBoxData = this.cropBoxData,\n        limited = this.limited;\n      var aspectRatio = options.aspectRatio;\n      if (sizeLimited) {\n        var minCropBoxWidth = Number(options.minCropBoxWidth) || 0;\n        var minCropBoxHeight = Number(options.minCropBoxHeight) || 0;\n        var maxCropBoxWidth = limited ? Math.min(containerData.width, canvasData.width, canvasData.width + canvasData.left, containerData.width - canvasData.left) : containerData.width;\n        var maxCropBoxHeight = limited ? Math.min(containerData.height, canvasData.height, canvasData.height + canvasData.top, containerData.height - canvasData.top) : containerData.height;\n\n        // The min/maxCropBoxWidth/Height must be less than container's width/height\n        minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width);\n        minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height);\n        if (aspectRatio) {\n          if (minCropBoxWidth && minCropBoxHeight) {\n            if (minCropBoxHeight * aspectRatio > minCropBoxWidth) {\n              minCropBoxHeight = minCropBoxWidth / aspectRatio;\n            } else {\n              minCropBoxWidth = minCropBoxHeight * aspectRatio;\n            }\n          } else if (minCropBoxWidth) {\n            minCropBoxHeight = minCropBoxWidth / aspectRatio;\n          } else if (minCropBoxHeight) {\n            minCropBoxWidth = minCropBoxHeight * aspectRatio;\n          }\n          if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) {\n            maxCropBoxHeight = maxCropBoxWidth / aspectRatio;\n          } else {\n            maxCropBoxWidth = maxCropBoxHeight * aspectRatio;\n          }\n        }\n\n        // The minWidth/Height must be less than maxWidth/Height\n        cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth);\n        cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight);\n        cropBoxData.maxWidth = maxCropBoxWidth;\n        cropBoxData.maxHeight = maxCropBoxHeight;\n      }\n      if (positionLimited) {\n        if (limited) {\n          cropBoxData.minLeft = Math.max(0, canvasData.left);\n          cropBoxData.minTop = Math.max(0, canvasData.top);\n          cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width;\n          cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height;\n        } else {\n          cropBoxData.minLeft = 0;\n          cropBoxData.minTop = 0;\n          cropBoxData.maxLeft = containerData.width - cropBoxData.width;\n          cropBoxData.maxTop = containerData.height - cropBoxData.height;\n        }\n      }\n    },\n    renderCropBox: function renderCropBox() {\n      var options = this.options,\n        containerData = this.containerData,\n        cropBoxData = this.cropBoxData;\n      if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) {\n        cropBoxData.left = cropBoxData.oldLeft;\n      }\n      if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) {\n        cropBoxData.top = cropBoxData.oldTop;\n      }\n      cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n      cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n      this.limitCropBox(false, true);\n      cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft);\n      cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop);\n      cropBoxData.oldLeft = cropBoxData.left;\n      cropBoxData.oldTop = cropBoxData.top;\n      if (options.movable && options.cropBoxMovable) {\n        // Turn to move the canvas when the crop box is equal to the container\n        setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL);\n      }\n      setStyle(this.cropBox, assign({\n        width: cropBoxData.width,\n        height: cropBoxData.height\n      }, getTransforms({\n        translateX: cropBoxData.left,\n        translateY: cropBoxData.top\n      })));\n      if (this.cropped && this.limited) {\n        this.limitCanvas(true, true);\n      }\n      if (!this.disabled) {\n        this.output();\n      }\n    },\n    output: function output() {\n      this.preview();\n      dispatchEvent(this.element, EVENT_CROP, this.getData());\n    }\n  };\n\n  var preview = {\n    initPreview: function initPreview() {\n      var element = this.element,\n        crossOrigin = this.crossOrigin;\n      var preview = this.options.preview;\n      var url = crossOrigin ? this.crossOriginUrl : this.url;\n      var alt = element.alt || 'The image to preview';\n      var image = document.createElement('img');\n      if (crossOrigin) {\n        image.crossOrigin = crossOrigin;\n      }\n      image.src = url;\n      image.alt = alt;\n      this.viewBox.appendChild(image);\n      this.viewBoxImage = image;\n      if (!preview) {\n        return;\n      }\n      var previews = preview;\n      if (typeof preview === 'string') {\n        previews = element.ownerDocument.querySelectorAll(preview);\n      } else if (preview.querySelector) {\n        previews = [preview];\n      }\n      this.previews = previews;\n      forEach(previews, function (el) {\n        var img = document.createElement('img');\n\n        // Save the original size for recover\n        setData(el, DATA_PREVIEW, {\n          width: el.offsetWidth,\n          height: el.offsetHeight,\n          html: el.innerHTML\n        });\n        if (crossOrigin) {\n          img.crossOrigin = crossOrigin;\n        }\n        img.src = url;\n        img.alt = alt;\n\n        /**\n         * Override img element styles\n         * Add `display:block` to avoid margin top issue\n         * Add `height:auto` to override `height` attribute on IE8\n         * (Occur only when margin-top <= -height)\n         */\n        img.style.cssText = 'display:block;' + 'width:100%;' + 'height:auto;' + 'min-width:0!important;' + 'min-height:0!important;' + 'max-width:none!important;' + 'max-height:none!important;' + 'image-orientation:0deg!important;\"';\n        el.innerHTML = '';\n        el.appendChild(img);\n      });\n    },\n    resetPreview: function resetPreview() {\n      forEach(this.previews, function (element) {\n        var data = getData(element, DATA_PREVIEW);\n        setStyle(element, {\n          width: data.width,\n          height: data.height\n        });\n        element.innerHTML = data.html;\n        removeData(element, DATA_PREVIEW);\n      });\n    },\n    preview: function preview() {\n      var imageData = this.imageData,\n        canvasData = this.canvasData,\n        cropBoxData = this.cropBoxData;\n      var cropBoxWidth = cropBoxData.width,\n        cropBoxHeight = cropBoxData.height;\n      var width = imageData.width,\n        height = imageData.height;\n      var left = cropBoxData.left - canvasData.left - imageData.left;\n      var top = cropBoxData.top - canvasData.top - imageData.top;\n      if (!this.cropped || this.disabled) {\n        return;\n      }\n      setStyle(this.viewBoxImage, assign({\n        width: width,\n        height: height\n      }, getTransforms(assign({\n        translateX: -left,\n        translateY: -top\n      }, imageData))));\n      forEach(this.previews, function (element) {\n        var data = getData(element, DATA_PREVIEW);\n        var originalWidth = data.width;\n        var originalHeight = data.height;\n        var newWidth = originalWidth;\n        var newHeight = originalHeight;\n        var ratio = 1;\n        if (cropBoxWidth) {\n          ratio = originalWidth / cropBoxWidth;\n          newHeight = cropBoxHeight * ratio;\n        }\n        if (cropBoxHeight && newHeight > originalHeight) {\n          ratio = originalHeight / cropBoxHeight;\n          newWidth = cropBoxWidth * ratio;\n          newHeight = originalHeight;\n        }\n        setStyle(element, {\n          width: newWidth,\n          height: newHeight\n        });\n        setStyle(element.getElementsByTagName('img')[0], assign({\n          width: width * ratio,\n          height: height * ratio\n        }, getTransforms(assign({\n          translateX: -left * ratio,\n          translateY: -top * ratio\n        }, imageData))));\n      });\n    }\n  };\n\n  var events = {\n    bind: function bind() {\n      var element = this.element,\n        options = this.options,\n        cropper = this.cropper;\n      if (isFunction(options.cropstart)) {\n        addListener(element, EVENT_CROP_START, options.cropstart);\n      }\n      if (isFunction(options.cropmove)) {\n        addListener(element, EVENT_CROP_MOVE, options.cropmove);\n      }\n      if (isFunction(options.cropend)) {\n        addListener(element, EVENT_CROP_END, options.cropend);\n      }\n      if (isFunction(options.crop)) {\n        addListener(element, EVENT_CROP, options.crop);\n      }\n      if (isFunction(options.zoom)) {\n        addListener(element, EVENT_ZOOM, options.zoom);\n      }\n      addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this));\n      if (options.zoomable && options.zoomOnWheel) {\n        addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), {\n          passive: false,\n          capture: true\n        });\n      }\n      if (options.toggleDragModeOnDblclick) {\n        addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this));\n      }\n      addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this));\n      addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this));\n      if (options.responsive) {\n        addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this));\n      }\n    },\n    unbind: function unbind() {\n      var element = this.element,\n        options = this.options,\n        cropper = this.cropper;\n      if (isFunction(options.cropstart)) {\n        removeListener(element, EVENT_CROP_START, options.cropstart);\n      }\n      if (isFunction(options.cropmove)) {\n        removeListener(element, EVENT_CROP_MOVE, options.cropmove);\n      }\n      if (isFunction(options.cropend)) {\n        removeListener(element, EVENT_CROP_END, options.cropend);\n      }\n      if (isFunction(options.crop)) {\n        removeListener(element, EVENT_CROP, options.crop);\n      }\n      if (isFunction(options.zoom)) {\n        removeListener(element, EVENT_ZOOM, options.zoom);\n      }\n      removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart);\n      if (options.zoomable && options.zoomOnWheel) {\n        removeListener(cropper, EVENT_WHEEL, this.onWheel, {\n          passive: false,\n          capture: true\n        });\n      }\n      if (options.toggleDragModeOnDblclick) {\n        removeListener(cropper, EVENT_DBLCLICK, this.onDblclick);\n      }\n      removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove);\n      removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd);\n      if (options.responsive) {\n        removeListener(window, EVENT_RESIZE, this.onResize);\n      }\n    }\n  };\n\n  var handlers = {\n    resize: function resize() {\n      if (this.disabled) {\n        return;\n      }\n      var options = this.options,\n        container = this.container,\n        containerData = this.containerData;\n      var ratioX = container.offsetWidth / containerData.width;\n      var ratioY = container.offsetHeight / containerData.height;\n      var ratio = Math.abs(ratioX - 1) > Math.abs(ratioY - 1) ? ratioX : ratioY;\n\n      // Resize when width changed or height changed\n      if (ratio !== 1) {\n        var canvasData;\n        var cropBoxData;\n        if (options.restore) {\n          canvasData = this.getCanvasData();\n          cropBoxData = this.getCropBoxData();\n        }\n        this.render();\n        if (options.restore) {\n          this.setCanvasData(forEach(canvasData, function (n, i) {\n            canvasData[i] = n * ratio;\n          }));\n          this.setCropBoxData(forEach(cropBoxData, function (n, i) {\n            cropBoxData[i] = n * ratio;\n          }));\n        }\n      }\n    },\n    dblclick: function dblclick() {\n      if (this.disabled || this.options.dragMode === DRAG_MODE_NONE) {\n        return;\n      }\n      this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP);\n    },\n    wheel: function wheel(event) {\n      var _this = this;\n      var ratio = Number(this.options.wheelZoomRatio) || 0.1;\n      var delta = 1;\n      if (this.disabled) {\n        return;\n      }\n      event.preventDefault();\n\n      // Limit wheel speed to prevent zoom too fast (#21)\n      if (this.wheeling) {\n        return;\n      }\n      this.wheeling = true;\n      setTimeout(function () {\n        _this.wheeling = false;\n      }, 50);\n      if (event.deltaY) {\n        delta = event.deltaY > 0 ? 1 : -1;\n      } else if (event.wheelDelta) {\n        delta = -event.wheelDelta / 120;\n      } else if (event.detail) {\n        delta = event.detail > 0 ? 1 : -1;\n      }\n      this.zoom(-delta * ratio, event);\n    },\n    cropStart: function cropStart(event) {\n      var buttons = event.buttons,\n        button = event.button;\n      if (this.disabled\n\n      // Handle mouse event and pointer event and ignore touch event\n      || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && (\n      // No primary button (Usually the left button)\n      isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0\n\n      // Open context menu\n      || event.ctrlKey)) {\n        return;\n      }\n      var options = this.options,\n        pointers = this.pointers;\n      var action;\n      if (event.changedTouches) {\n        // Handle touch event\n        forEach(event.changedTouches, function (touch) {\n          pointers[touch.identifier] = getPointer(touch);\n        });\n      } else {\n        // Handle mouse event and pointer event\n        pointers[event.pointerId || 0] = getPointer(event);\n      }\n      if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) {\n        action = ACTION_ZOOM;\n      } else {\n        action = getData(event.target, DATA_ACTION);\n      }\n      if (!REGEXP_ACTIONS.test(action)) {\n        return;\n      }\n      if (dispatchEvent(this.element, EVENT_CROP_START, {\n        originalEvent: event,\n        action: action\n      }) === false) {\n        return;\n      }\n\n      // This line is required for preventing page zooming in iOS browsers\n      event.preventDefault();\n      this.action = action;\n      this.cropping = false;\n      if (action === ACTION_CROP) {\n        this.cropping = true;\n        addClass(this.dragBox, CLASS_MODAL);\n      }\n    },\n    cropMove: function cropMove(event) {\n      var action = this.action;\n      if (this.disabled || !action) {\n        return;\n      }\n      var pointers = this.pointers;\n      event.preventDefault();\n      if (dispatchEvent(this.element, EVENT_CROP_MOVE, {\n        originalEvent: event,\n        action: action\n      }) === false) {\n        return;\n      }\n      if (event.changedTouches) {\n        forEach(event.changedTouches, function (touch) {\n          // The first parameter should not be undefined (#432)\n          assign(pointers[touch.identifier] || {}, getPointer(touch, true));\n        });\n      } else {\n        assign(pointers[event.pointerId || 0] || {}, getPointer(event, true));\n      }\n      this.change(event);\n    },\n    cropEnd: function cropEnd(event) {\n      if (this.disabled) {\n        return;\n      }\n      var action = this.action,\n        pointers = this.pointers;\n      if (event.changedTouches) {\n        forEach(event.changedTouches, function (touch) {\n          delete pointers[touch.identifier];\n        });\n      } else {\n        delete pointers[event.pointerId || 0];\n      }\n      if (!action) {\n        return;\n      }\n      event.preventDefault();\n      if (!Object.keys(pointers).length) {\n        this.action = '';\n      }\n      if (this.cropping) {\n        this.cropping = false;\n        toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal);\n      }\n      dispatchEvent(this.element, EVENT_CROP_END, {\n        originalEvent: event,\n        action: action\n      });\n    }\n  };\n\n  var change = {\n    change: function change(event) {\n      var options = this.options,\n        canvasData = this.canvasData,\n        containerData = this.containerData,\n        cropBoxData = this.cropBoxData,\n        pointers = this.pointers;\n      var action = this.action;\n      var aspectRatio = options.aspectRatio;\n      var left = cropBoxData.left,\n        top = cropBoxData.top,\n        width = cropBoxData.width,\n        height = cropBoxData.height;\n      var right = left + width;\n      var bottom = top + height;\n      var minLeft = 0;\n      var minTop = 0;\n      var maxWidth = containerData.width;\n      var maxHeight = containerData.height;\n      var renderable = true;\n      var offset;\n\n      // Locking aspect ratio in \"free mode\" by holding shift key\n      if (!aspectRatio && event.shiftKey) {\n        aspectRatio = width && height ? width / height : 1;\n      }\n      if (this.limited) {\n        minLeft = cropBoxData.minLeft;\n        minTop = cropBoxData.minTop;\n        maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width);\n        maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height);\n      }\n      var pointer = pointers[Object.keys(pointers)[0]];\n      var range = {\n        x: pointer.endX - pointer.startX,\n        y: pointer.endY - pointer.startY\n      };\n      var check = function check(side) {\n        switch (side) {\n          case ACTION_EAST:\n            if (right + range.x > maxWidth) {\n              range.x = maxWidth - right;\n            }\n            break;\n          case ACTION_WEST:\n            if (left + range.x < minLeft) {\n              range.x = minLeft - left;\n            }\n            break;\n          case ACTION_NORTH:\n            if (top + range.y < minTop) {\n              range.y = minTop - top;\n            }\n            break;\n          case ACTION_SOUTH:\n            if (bottom + range.y > maxHeight) {\n              range.y = maxHeight - bottom;\n            }\n            break;\n        }\n      };\n      switch (action) {\n        // Move crop box\n        case ACTION_ALL:\n          left += range.x;\n          top += range.y;\n          break;\n\n        // Resize crop box\n        case ACTION_EAST:\n          if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n            renderable = false;\n            break;\n          }\n          check(ACTION_EAST);\n          width += range.x;\n          if (width < 0) {\n            action = ACTION_WEST;\n            width = -width;\n            left -= width;\n          }\n          if (aspectRatio) {\n            height = width / aspectRatio;\n            top += (cropBoxData.height - height) / 2;\n          }\n          break;\n        case ACTION_NORTH:\n          if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n            renderable = false;\n            break;\n          }\n          check(ACTION_NORTH);\n          height -= range.y;\n          top += range.y;\n          if (height < 0) {\n            action = ACTION_SOUTH;\n            height = -height;\n            top -= height;\n          }\n          if (aspectRatio) {\n            width = height * aspectRatio;\n            left += (cropBoxData.width - width) / 2;\n          }\n          break;\n        case ACTION_WEST:\n          if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n            renderable = false;\n            break;\n          }\n          check(ACTION_WEST);\n          width -= range.x;\n          left += range.x;\n          if (width < 0) {\n            action = ACTION_EAST;\n            width = -width;\n            left -= width;\n          }\n          if (aspectRatio) {\n            height = width / aspectRatio;\n            top += (cropBoxData.height - height) / 2;\n          }\n          break;\n        case ACTION_SOUTH:\n          if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n            renderable = false;\n            break;\n          }\n          check(ACTION_SOUTH);\n          height += range.y;\n          if (height < 0) {\n            action = ACTION_NORTH;\n            height = -height;\n            top -= height;\n          }\n          if (aspectRatio) {\n            width = height * aspectRatio;\n            left += (cropBoxData.width - width) / 2;\n          }\n          break;\n        case ACTION_NORTH_EAST:\n          if (aspectRatio) {\n            if (range.y <= 0 && (top <= minTop || right >= maxWidth)) {\n              renderable = false;\n              break;\n            }\n            check(ACTION_NORTH);\n            height -= range.y;\n            top += range.y;\n            width = height * aspectRatio;\n          } else {\n            check(ACTION_NORTH);\n            check(ACTION_EAST);\n            if (range.x >= 0) {\n              if (right < maxWidth) {\n                width += range.x;\n              } else if (range.y <= 0 && top <= minTop) {\n                renderable = false;\n              }\n            } else {\n              width += range.x;\n            }\n            if (range.y <= 0) {\n              if (top > minTop) {\n                height -= range.y;\n                top += range.y;\n              }\n            } else {\n              height -= range.y;\n              top += range.y;\n            }\n          }\n          if (width < 0 && height < 0) {\n            action = ACTION_SOUTH_WEST;\n            height = -height;\n            width = -width;\n            top -= height;\n            left -= width;\n          } else if (width < 0) {\n            action = ACTION_NORTH_WEST;\n            width = -width;\n            left -= width;\n          } else if (height < 0) {\n            action = ACTION_SOUTH_EAST;\n            height = -height;\n            top -= height;\n          }\n          break;\n        case ACTION_NORTH_WEST:\n          if (aspectRatio) {\n            if (range.y <= 0 && (top <= minTop || left <= minLeft)) {\n              renderable = false;\n              break;\n            }\n            check(ACTION_NORTH);\n            height -= range.y;\n            top += range.y;\n            width = height * aspectRatio;\n            left += cropBoxData.width - width;\n          } else {\n            check(ACTION_NORTH);\n            check(ACTION_WEST);\n            if (range.x <= 0) {\n              if (left > minLeft) {\n                width -= range.x;\n                left += range.x;\n              } else if (range.y <= 0 && top <= minTop) {\n                renderable = false;\n              }\n            } else {\n              width -= range.x;\n              left += range.x;\n            }\n            if (range.y <= 0) {\n              if (top > minTop) {\n                height -= range.y;\n                top += range.y;\n              }\n            } else {\n              height -= range.y;\n              top += range.y;\n            }\n          }\n          if (width < 0 && height < 0) {\n            action = ACTION_SOUTH_EAST;\n            height = -height;\n            width = -width;\n            top -= height;\n            left -= width;\n          } else if (width < 0) {\n            action = ACTION_NORTH_EAST;\n            width = -width;\n            left -= width;\n          } else if (height < 0) {\n            action = ACTION_SOUTH_WEST;\n            height = -height;\n            top -= height;\n          }\n          break;\n        case ACTION_SOUTH_WEST:\n          if (aspectRatio) {\n            if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) {\n              renderable = false;\n              break;\n            }\n            check(ACTION_WEST);\n            width -= range.x;\n            left += range.x;\n            height = width / aspectRatio;\n          } else {\n            check(ACTION_SOUTH);\n            check(ACTION_WEST);\n            if (range.x <= 0) {\n              if (left > minLeft) {\n                width -= range.x;\n                left += range.x;\n              } else if (range.y >= 0 && bottom >= maxHeight) {\n                renderable = false;\n              }\n            } else {\n              width -= range.x;\n              left += range.x;\n            }\n            if (range.y >= 0) {\n              if (bottom < maxHeight) {\n                height += range.y;\n              }\n            } else {\n              height += range.y;\n            }\n          }\n          if (width < 0 && height < 0) {\n            action = ACTION_NORTH_EAST;\n            height = -height;\n            width = -width;\n            top -= height;\n            left -= width;\n          } else if (width < 0) {\n            action = ACTION_SOUTH_EAST;\n            width = -width;\n            left -= width;\n          } else if (height < 0) {\n            action = ACTION_NORTH_WEST;\n            height = -height;\n            top -= height;\n          }\n          break;\n        case ACTION_SOUTH_EAST:\n          if (aspectRatio) {\n            if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) {\n              renderable = false;\n              break;\n            }\n            check(ACTION_EAST);\n            width += range.x;\n            height = width / aspectRatio;\n          } else {\n            check(ACTION_SOUTH);\n            check(ACTION_EAST);\n            if (range.x >= 0) {\n              if (right < maxWidth) {\n                width += range.x;\n              } else if (range.y >= 0 && bottom >= maxHeight) {\n                renderable = false;\n              }\n            } else {\n              width += range.x;\n            }\n            if (range.y >= 0) {\n              if (bottom < maxHeight) {\n                height += range.y;\n              }\n            } else {\n              height += range.y;\n            }\n          }\n          if (width < 0 && height < 0) {\n            action = ACTION_NORTH_WEST;\n            height = -height;\n            width = -width;\n            top -= height;\n            left -= width;\n          } else if (width < 0) {\n            action = ACTION_SOUTH_WEST;\n            width = -width;\n            left -= width;\n          } else if (height < 0) {\n            action = ACTION_NORTH_EAST;\n            height = -height;\n            top -= height;\n          }\n          break;\n\n        // Move canvas\n        case ACTION_MOVE:\n          this.move(range.x, range.y);\n          renderable = false;\n          break;\n\n        // Zoom canvas\n        case ACTION_ZOOM:\n          this.zoom(getMaxZoomRatio(pointers), event);\n          renderable = false;\n          break;\n\n        // Create crop box\n        case ACTION_CROP:\n          if (!range.x || !range.y) {\n            renderable = false;\n            break;\n          }\n          offset = getOffset(this.cropper);\n          left = pointer.startX - offset.left;\n          top = pointer.startY - offset.top;\n          width = cropBoxData.minWidth;\n          height = cropBoxData.minHeight;\n          if (range.x > 0) {\n            action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST;\n          } else if (range.x < 0) {\n            left -= width;\n            action = range.y > 0 ? ACTION_SOUTH_WEST : ACTION_NORTH_WEST;\n          }\n          if (range.y < 0) {\n            top -= height;\n          }\n\n          // Show the crop box if is hidden\n          if (!this.cropped) {\n            removeClass(this.cropBox, CLASS_HIDDEN);\n            this.cropped = true;\n            if (this.limited) {\n              this.limitCropBox(true, true);\n            }\n          }\n          break;\n      }\n      if (renderable) {\n        cropBoxData.width = width;\n        cropBoxData.height = height;\n        cropBoxData.left = left;\n        cropBoxData.top = top;\n        this.action = action;\n        this.renderCropBox();\n      }\n\n      // Override\n      forEach(pointers, function (p) {\n        p.startX = p.endX;\n        p.startY = p.endY;\n      });\n    }\n  };\n\n  var methods = {\n    // Show the crop box manually\n    crop: function crop() {\n      if (this.ready && !this.cropped && !this.disabled) {\n        this.cropped = true;\n        this.limitCropBox(true, true);\n        if (this.options.modal) {\n          addClass(this.dragBox, CLASS_MODAL);\n        }\n        removeClass(this.cropBox, CLASS_HIDDEN);\n        this.setCropBoxData(this.initialCropBoxData);\n      }\n      return this;\n    },\n    // Reset the image and crop box to their initial states\n    reset: function reset() {\n      if (this.ready && !this.disabled) {\n        this.imageData = assign({}, this.initialImageData);\n        this.canvasData = assign({}, this.initialCanvasData);\n        this.cropBoxData = assign({}, this.initialCropBoxData);\n        this.renderCanvas();\n        if (this.cropped) {\n          this.renderCropBox();\n        }\n      }\n      return this;\n    },\n    // Clear the crop box\n    clear: function clear() {\n      if (this.cropped && !this.disabled) {\n        assign(this.cropBoxData, {\n          left: 0,\n          top: 0,\n          width: 0,\n          height: 0\n        });\n        this.cropped = false;\n        this.renderCropBox();\n        this.limitCanvas(true, true);\n\n        // Render canvas after crop box rendered\n        this.renderCanvas();\n        removeClass(this.dragBox, CLASS_MODAL);\n        addClass(this.cropBox, CLASS_HIDDEN);\n      }\n      return this;\n    },\n    /**\n     * Replace the image's src and rebuild the cropper\n     * @param {string} url - The new URL.\n     * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one.\n     * @returns {Cropper} this\n     */\n    replace: function replace(url) {\n      var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      if (!this.disabled && url) {\n        if (this.isImg) {\n          this.element.src = url;\n        }\n        if (hasSameSize) {\n          this.url = url;\n          this.image.src = url;\n          if (this.ready) {\n            this.viewBoxImage.src = url;\n            forEach(this.previews, function (element) {\n              element.getElementsByTagName('img')[0].src = url;\n            });\n          }\n        } else {\n          if (this.isImg) {\n            this.replaced = true;\n          }\n          this.options.data = null;\n          this.uncreate();\n          this.load(url);\n        }\n      }\n      return this;\n    },\n    // Enable (unfreeze) the cropper\n    enable: function enable() {\n      if (this.ready && this.disabled) {\n        this.disabled = false;\n        removeClass(this.cropper, CLASS_DISABLED);\n      }\n      return this;\n    },\n    // Disable (freeze) the cropper\n    disable: function disable() {\n      if (this.ready && !this.disabled) {\n        this.disabled = true;\n        addClass(this.cropper, CLASS_DISABLED);\n      }\n      return this;\n    },\n    /**\n     * Destroy the cropper and remove the instance from the image\n     * @returns {Cropper} this\n     */\n    destroy: function destroy() {\n      var element = this.element;\n      if (!element[NAMESPACE]) {\n        return this;\n      }\n      element[NAMESPACE] = undefined;\n      if (this.isImg && this.replaced) {\n        element.src = this.originalUrl;\n      }\n      this.uncreate();\n      return this;\n    },\n    /**\n     * Move the canvas with relative offsets\n     * @param {number} offsetX - The relative offset distance on the x-axis.\n     * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis.\n     * @returns {Cropper} this\n     */\n    move: function move(offsetX) {\n      var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX;\n      var _this$canvasData = this.canvasData,\n        left = _this$canvasData.left,\n        top = _this$canvasData.top;\n      return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY));\n    },\n    /**\n     * Move the canvas to an absolute point\n     * @param {number} x - The x-axis coordinate.\n     * @param {number} [y=x] - The y-axis coordinate.\n     * @returns {Cropper} this\n     */\n    moveTo: function moveTo(x) {\n      var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n      var canvasData = this.canvasData;\n      var changed = false;\n      x = Number(x);\n      y = Number(y);\n      if (this.ready && !this.disabled && this.options.movable) {\n        if (isNumber(x)) {\n          canvasData.left = x;\n          changed = true;\n        }\n        if (isNumber(y)) {\n          canvasData.top = y;\n          changed = true;\n        }\n        if (changed) {\n          this.renderCanvas(true);\n        }\n      }\n      return this;\n    },\n    /**\n     * Zoom the canvas with a relative ratio\n     * @param {number} ratio - The target ratio.\n     * @param {Event} _originalEvent - The original event if any.\n     * @returns {Cropper} this\n     */\n    zoom: function zoom(ratio, _originalEvent) {\n      var canvasData = this.canvasData;\n      ratio = Number(ratio);\n      if (ratio < 0) {\n        ratio = 1 / (1 - ratio);\n      } else {\n        ratio = 1 + ratio;\n      }\n      return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent);\n    },\n    /**\n     * Zoom the canvas to an absolute ratio\n     * @param {number} ratio - The target ratio.\n     * @param {Object} pivot - The zoom pivot point coordinate.\n     * @param {Event} _originalEvent - The original event if any.\n     * @returns {Cropper} this\n     */\n    zoomTo: function zoomTo(ratio, pivot, _originalEvent) {\n      var options = this.options,\n        canvasData = this.canvasData;\n      var width = canvasData.width,\n        height = canvasData.height,\n        naturalWidth = canvasData.naturalWidth,\n        naturalHeight = canvasData.naturalHeight;\n      ratio = Number(ratio);\n      if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) {\n        var newWidth = naturalWidth * ratio;\n        var newHeight = naturalHeight * ratio;\n        if (dispatchEvent(this.element, EVENT_ZOOM, {\n          ratio: ratio,\n          oldRatio: width / naturalWidth,\n          originalEvent: _originalEvent\n        }) === false) {\n          return this;\n        }\n        if (_originalEvent) {\n          var pointers = this.pointers;\n          var offset = getOffset(this.cropper);\n          var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : {\n            pageX: _originalEvent.pageX,\n            pageY: _originalEvent.pageY\n          };\n\n          // Zoom from the triggering point of the event\n          canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width);\n          canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height);\n        } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) {\n          canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width);\n          canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height);\n        } else {\n          // Zoom from the center of the canvas\n          canvasData.left -= (newWidth - width) / 2;\n          canvasData.top -= (newHeight - height) / 2;\n        }\n        canvasData.width = newWidth;\n        canvasData.height = newHeight;\n        this.renderCanvas(true);\n      }\n      return this;\n    },\n    /**\n     * Rotate the canvas with a relative degree\n     * @param {number} degree - The rotate degree.\n     * @returns {Cropper} this\n     */\n    rotate: function rotate(degree) {\n      return this.rotateTo((this.imageData.rotate || 0) + Number(degree));\n    },\n    /**\n     * Rotate the canvas to an absolute degree\n     * @param {number} degree - The rotate degree.\n     * @returns {Cropper} this\n     */\n    rotateTo: function rotateTo(degree) {\n      degree = Number(degree);\n      if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) {\n        this.imageData.rotate = degree % 360;\n        this.renderCanvas(true, true);\n      }\n      return this;\n    },\n    /**\n     * Scale the image on the x-axis.\n     * @param {number} scaleX - The scale ratio on the x-axis.\n     * @returns {Cropper} this\n     */\n    scaleX: function scaleX(_scaleX) {\n      var scaleY = this.imageData.scaleY;\n      return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1);\n    },\n    /**\n     * Scale the image on the y-axis.\n     * @param {number} scaleY - The scale ratio on the y-axis.\n     * @returns {Cropper} this\n     */\n    scaleY: function scaleY(_scaleY) {\n      var scaleX = this.imageData.scaleX;\n      return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY);\n    },\n    /**\n     * Scale the image\n     * @param {number} scaleX - The scale ratio on the x-axis.\n     * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.\n     * @returns {Cropper} this\n     */\n    scale: function scale(scaleX) {\n      var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n      var imageData = this.imageData;\n      var transformed = false;\n      scaleX = Number(scaleX);\n      scaleY = Number(scaleY);\n      if (this.ready && !this.disabled && this.options.scalable) {\n        if (isNumber(scaleX)) {\n          imageData.scaleX = scaleX;\n          transformed = true;\n        }\n        if (isNumber(scaleY)) {\n          imageData.scaleY = scaleY;\n          transformed = true;\n        }\n        if (transformed) {\n          this.renderCanvas(true, true);\n        }\n      }\n      return this;\n    },\n    /**\n     * Get the cropped area position and size data (base on the original image)\n     * @param {boolean} [rounded=false] - Indicate if round the data values or not.\n     * @returns {Object} The result cropped data.\n     */\n    getData: function getData() {\n      var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      var options = this.options,\n        imageData = this.imageData,\n        canvasData = this.canvasData,\n        cropBoxData = this.cropBoxData;\n      var data;\n      if (this.ready && this.cropped) {\n        data = {\n          x: cropBoxData.left - canvasData.left,\n          y: cropBoxData.top - canvasData.top,\n          width: cropBoxData.width,\n          height: cropBoxData.height\n        };\n        var ratio = imageData.width / imageData.naturalWidth;\n        forEach(data, function (n, i) {\n          data[i] = n / ratio;\n        });\n        if (rounded) {\n          // In case rounding off leads to extra 1px in right or bottom border\n          // we should round the top-left corner and the dimension (#343).\n          var bottom = Math.round(data.y + data.height);\n          var right = Math.round(data.x + data.width);\n          data.x = Math.round(data.x);\n          data.y = Math.round(data.y);\n          data.width = right - data.x;\n          data.height = bottom - data.y;\n        }\n      } else {\n        data = {\n          x: 0,\n          y: 0,\n          width: 0,\n          height: 0\n        };\n      }\n      if (options.rotatable) {\n        data.rotate = imageData.rotate || 0;\n      }\n      if (options.scalable) {\n        data.scaleX = imageData.scaleX || 1;\n        data.scaleY = imageData.scaleY || 1;\n      }\n      return data;\n    },\n    /**\n     * Set the cropped area position and size with new data\n     * @param {Object} data - The new data.\n     * @returns {Cropper} this\n     */\n    setData: function setData(data) {\n      var options = this.options,\n        imageData = this.imageData,\n        canvasData = this.canvasData;\n      var cropBoxData = {};\n      if (this.ready && !this.disabled && isPlainObject(data)) {\n        var transformed = false;\n        if (options.rotatable) {\n          if (isNumber(data.rotate) && data.rotate !== imageData.rotate) {\n            imageData.rotate = data.rotate;\n            transformed = true;\n          }\n        }\n        if (options.scalable) {\n          if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) {\n            imageData.scaleX = data.scaleX;\n            transformed = true;\n          }\n          if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) {\n            imageData.scaleY = data.scaleY;\n            transformed = true;\n          }\n        }\n        if (transformed) {\n          this.renderCanvas(true, true);\n        }\n        var ratio = imageData.width / imageData.naturalWidth;\n        if (isNumber(data.x)) {\n          cropBoxData.left = data.x * ratio + canvasData.left;\n        }\n        if (isNumber(data.y)) {\n          cropBoxData.top = data.y * ratio + canvasData.top;\n        }\n        if (isNumber(data.width)) {\n          cropBoxData.width = data.width * ratio;\n        }\n        if (isNumber(data.height)) {\n          cropBoxData.height = data.height * ratio;\n        }\n        this.setCropBoxData(cropBoxData);\n      }\n      return this;\n    },\n    /**\n     * Get the container size data.\n     * @returns {Object} The result container data.\n     */\n    getContainerData: function getContainerData() {\n      return this.ready ? assign({}, this.containerData) : {};\n    },\n    /**\n     * Get the image position and size data.\n     * @returns {Object} The result image data.\n     */\n    getImageData: function getImageData() {\n      return this.sized ? assign({}, this.imageData) : {};\n    },\n    /**\n     * Get the canvas position and size data.\n     * @returns {Object} The result canvas data.\n     */\n    getCanvasData: function getCanvasData() {\n      var canvasData = this.canvasData;\n      var data = {};\n      if (this.ready) {\n        forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (n) {\n          data[n] = canvasData[n];\n        });\n      }\n      return data;\n    },\n    /**\n     * Set the canvas position and size with new data.\n     * @param {Object} data - The new canvas data.\n     * @returns {Cropper} this\n     */\n    setCanvasData: function setCanvasData(data) {\n      var canvasData = this.canvasData;\n      var aspectRatio = canvasData.aspectRatio;\n      if (this.ready && !this.disabled && isPlainObject(data)) {\n        if (isNumber(data.left)) {\n          canvasData.left = data.left;\n        }\n        if (isNumber(data.top)) {\n          canvasData.top = data.top;\n        }\n        if (isNumber(data.width)) {\n          canvasData.width = data.width;\n          canvasData.height = data.width / aspectRatio;\n        } else if (isNumber(data.height)) {\n          canvasData.height = data.height;\n          canvasData.width = data.height * aspectRatio;\n        }\n        this.renderCanvas(true);\n      }\n      return this;\n    },\n    /**\n     * Get the crop box position and size data.\n     * @returns {Object} The result crop box data.\n     */\n    getCropBoxData: function getCropBoxData() {\n      var cropBoxData = this.cropBoxData;\n      var data;\n      if (this.ready && this.cropped) {\n        data = {\n          left: cropBoxData.left,\n          top: cropBoxData.top,\n          width: cropBoxData.width,\n          height: cropBoxData.height\n        };\n      }\n      return data || {};\n    },\n    /**\n     * Set the crop box position and size with new data.\n     * @param {Object} data - The new crop box data.\n     * @returns {Cropper} this\n     */\n    setCropBoxData: function setCropBoxData(data) {\n      var cropBoxData = this.cropBoxData;\n      var aspectRatio = this.options.aspectRatio;\n      var widthChanged;\n      var heightChanged;\n      if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) {\n        if (isNumber(data.left)) {\n          cropBoxData.left = data.left;\n        }\n        if (isNumber(data.top)) {\n          cropBoxData.top = data.top;\n        }\n        if (isNumber(data.width) && data.width !== cropBoxData.width) {\n          widthChanged = true;\n          cropBoxData.width = data.width;\n        }\n        if (isNumber(data.height) && data.height !== cropBoxData.height) {\n          heightChanged = true;\n          cropBoxData.height = data.height;\n        }\n        if (aspectRatio) {\n          if (widthChanged) {\n            cropBoxData.height = cropBoxData.width / aspectRatio;\n          } else if (heightChanged) {\n            cropBoxData.width = cropBoxData.height * aspectRatio;\n          }\n        }\n        this.renderCropBox();\n      }\n      return this;\n    },\n    /**\n     * Get a canvas drawn the cropped image.\n     * @param {Object} [options={}] - The config options.\n     * @returns {HTMLCanvasElement} - The result canvas.\n     */\n    getCroppedCanvas: function getCroppedCanvas() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      if (!this.ready || !window.HTMLCanvasElement) {\n        return null;\n      }\n      var canvasData = this.canvasData;\n      var source = getSourceCanvas(this.image, this.imageData, canvasData, options);\n\n      // Returns the source canvas if it is not cropped.\n      if (!this.cropped) {\n        return source;\n      }\n      var _this$getData = this.getData(options.rounded),\n        initialX = _this$getData.x,\n        initialY = _this$getData.y,\n        initialWidth = _this$getData.width,\n        initialHeight = _this$getData.height;\n      var ratio = source.width / Math.floor(canvasData.naturalWidth);\n      if (ratio !== 1) {\n        initialX *= ratio;\n        initialY *= ratio;\n        initialWidth *= ratio;\n        initialHeight *= ratio;\n      }\n      var aspectRatio = initialWidth / initialHeight;\n      var maxSizes = getAdjustedSizes({\n        aspectRatio: aspectRatio,\n        width: options.maxWidth || Infinity,\n        height: options.maxHeight || Infinity\n      });\n      var minSizes = getAdjustedSizes({\n        aspectRatio: aspectRatio,\n        width: options.minWidth || 0,\n        height: options.minHeight || 0\n      }, 'cover');\n      var _getAdjustedSizes = getAdjustedSizes({\n          aspectRatio: aspectRatio,\n          width: options.width || (ratio !== 1 ? source.width : initialWidth),\n          height: options.height || (ratio !== 1 ? source.height : initialHeight)\n        }),\n        width = _getAdjustedSizes.width,\n        height = _getAdjustedSizes.height;\n      width = Math.min(maxSizes.width, Math.max(minSizes.width, width));\n      height = Math.min(maxSizes.height, Math.max(minSizes.height, height));\n      var canvas = document.createElement('canvas');\n      var context = canvas.getContext('2d');\n      canvas.width = normalizeDecimalNumber(width);\n      canvas.height = normalizeDecimalNumber(height);\n      context.fillStyle = options.fillColor || 'transparent';\n      context.fillRect(0, 0, width, height);\n      var _options$imageSmoothi = options.imageSmoothingEnabled,\n        imageSmoothingEnabled = _options$imageSmoothi === void 0 ? true : _options$imageSmoothi,\n        imageSmoothingQuality = options.imageSmoothingQuality;\n      context.imageSmoothingEnabled = imageSmoothingEnabled;\n      if (imageSmoothingQuality) {\n        context.imageSmoothingQuality = imageSmoothingQuality;\n      }\n\n      // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage\n      var sourceWidth = source.width;\n      var sourceHeight = source.height;\n\n      // Source canvas parameters\n      var srcX = initialX;\n      var srcY = initialY;\n      var srcWidth;\n      var srcHeight;\n\n      // Destination canvas parameters\n      var dstX;\n      var dstY;\n      var dstWidth;\n      var dstHeight;\n      if (srcX <= -initialWidth || srcX > sourceWidth) {\n        srcX = 0;\n        srcWidth = 0;\n        dstX = 0;\n        dstWidth = 0;\n      } else if (srcX <= 0) {\n        dstX = -srcX;\n        srcX = 0;\n        srcWidth = Math.min(sourceWidth, initialWidth + srcX);\n        dstWidth = srcWidth;\n      } else if (srcX <= sourceWidth) {\n        dstX = 0;\n        srcWidth = Math.min(initialWidth, sourceWidth - srcX);\n        dstWidth = srcWidth;\n      }\n      if (srcWidth <= 0 || srcY <= -initialHeight || srcY > sourceHeight) {\n        srcY = 0;\n        srcHeight = 0;\n        dstY = 0;\n        dstHeight = 0;\n      } else if (srcY <= 0) {\n        dstY = -srcY;\n        srcY = 0;\n        srcHeight = Math.min(sourceHeight, initialHeight + srcY);\n        dstHeight = srcHeight;\n      } else if (srcY <= sourceHeight) {\n        dstY = 0;\n        srcHeight = Math.min(initialHeight, sourceHeight - srcY);\n        dstHeight = srcHeight;\n      }\n      var params = [srcX, srcY, srcWidth, srcHeight];\n\n      // Avoid \"IndexSizeError\"\n      if (dstWidth > 0 && dstHeight > 0) {\n        var scale = width / initialWidth;\n        params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale);\n      }\n\n      // All the numerical parameters should be integer for `drawImage`\n      // https://github.com/fengyuanchen/cropper/issues/476\n      context.drawImage.apply(context, [source].concat(_toConsumableArray(params.map(function (param) {\n        return Math.floor(normalizeDecimalNumber(param));\n      }))));\n      return canvas;\n    },\n    /**\n     * Change the aspect ratio of the crop box.\n     * @param {number} aspectRatio - The new aspect ratio.\n     * @returns {Cropper} this\n     */\n    setAspectRatio: function setAspectRatio(aspectRatio) {\n      var options = this.options;\n      if (!this.disabled && !isUndefined(aspectRatio)) {\n        // 0 -> NaN\n        options.aspectRatio = Math.max(0, aspectRatio) || NaN;\n        if (this.ready) {\n          this.initCropBox();\n          if (this.cropped) {\n            this.renderCropBox();\n          }\n        }\n      }\n      return this;\n    },\n    /**\n     * Change the drag mode.\n     * @param {string} mode - The new drag mode.\n     * @returns {Cropper} this\n     */\n    setDragMode: function setDragMode(mode) {\n      var options = this.options,\n        dragBox = this.dragBox,\n        face = this.face;\n      if (this.ready && !this.disabled) {\n        var croppable = mode === DRAG_MODE_CROP;\n        var movable = options.movable && mode === DRAG_MODE_MOVE;\n        mode = croppable || movable ? mode : DRAG_MODE_NONE;\n        options.dragMode = mode;\n        setData(dragBox, DATA_ACTION, mode);\n        toggleClass(dragBox, CLASS_CROP, croppable);\n        toggleClass(dragBox, CLASS_MOVE, movable);\n        if (!options.cropBoxMovable) {\n          // Sync drag mode to crop box when it is not movable\n          setData(face, DATA_ACTION, mode);\n          toggleClass(face, CLASS_CROP, croppable);\n          toggleClass(face, CLASS_MOVE, movable);\n        }\n      }\n      return this;\n    }\n  };\n\n  var AnotherCropper = WINDOW.Cropper;\n  var Cropper = /*#__PURE__*/function () {\n    /**\n     * Create a new Cropper.\n     * @param {Element} element - The target element for cropping.\n     * @param {Object} [options={}] - The configuration options.\n     */\n    function Cropper(element) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      _classCallCheck(this, Cropper);\n      if (!element || !REGEXP_TAG_NAME.test(element.tagName)) {\n        throw new Error('The first argument is required and must be an <img> or <canvas> element.');\n      }\n      this.element = element;\n      this.options = assign({}, DEFAULTS, isPlainObject(options) && options);\n      this.cropped = false;\n      this.disabled = false;\n      this.pointers = {};\n      this.ready = false;\n      this.reloading = false;\n      this.replaced = false;\n      this.sized = false;\n      this.sizing = false;\n      this.init();\n    }\n    return _createClass(Cropper, [{\n      key: \"init\",\n      value: function init() {\n        var element = this.element;\n        var tagName = element.tagName.toLowerCase();\n        var url;\n        if (element[NAMESPACE]) {\n          return;\n        }\n        element[NAMESPACE] = this;\n        if (tagName === 'img') {\n          this.isImg = true;\n\n          // e.g.: \"img/picture.jpg\"\n          url = element.getAttribute('src') || '';\n          this.originalUrl = url;\n\n          // Stop when it's a blank image\n          if (!url) {\n            return;\n          }\n\n          // e.g.: \"https://example.com/img/picture.jpg\"\n          url = element.src;\n        } else if (tagName === 'canvas' && window.HTMLCanvasElement) {\n          url = element.toDataURL();\n        }\n        this.load(url);\n      }\n    }, {\n      key: \"load\",\n      value: function load(url) {\n        var _this = this;\n        if (!url) {\n          return;\n        }\n        this.url = url;\n        this.imageData = {};\n        var element = this.element,\n          options = this.options;\n        if (!options.rotatable && !options.scalable) {\n          options.checkOrientation = false;\n        }\n\n        // Only IE10+ supports Typed Arrays\n        if (!options.checkOrientation || !window.ArrayBuffer) {\n          this.clone();\n          return;\n        }\n\n        // Detect the mime type of the image directly if it is a Data URL\n        if (REGEXP_DATA_URL.test(url)) {\n          // Read ArrayBuffer from Data URL of JPEG images directly for better performance\n          if (REGEXP_DATA_URL_JPEG.test(url)) {\n            this.read(dataURLToArrayBuffer(url));\n          } else {\n            // Only a JPEG image may contains Exif Orientation information,\n            // the rest types of Data URLs are not necessary to check orientation at all.\n            this.clone();\n          }\n          return;\n        }\n\n        // 1. Detect the mime type of the image by a XMLHttpRequest.\n        // 2. Load the image as ArrayBuffer for reading orientation if its a JPEG image.\n        var xhr = new XMLHttpRequest();\n        var clone = this.clone.bind(this);\n        this.reloading = true;\n        this.xhr = xhr;\n\n        // 1. Cross origin requests are only supported for protocol schemes:\n        // http, https, data, chrome, chrome-extension.\n        // 2. Access to XMLHttpRequest from a Data URL will be blocked by CORS policy\n        // in some browsers as IE11 and Safari.\n        xhr.onabort = clone;\n        xhr.onerror = clone;\n        xhr.ontimeout = clone;\n        xhr.onprogress = function () {\n          // Abort the request directly if it not a JPEG image for better performance\n          if (xhr.getResponseHeader('content-type') !== MIME_TYPE_JPEG) {\n            xhr.abort();\n          }\n        };\n        xhr.onload = function () {\n          _this.read(xhr.response);\n        };\n        xhr.onloadend = function () {\n          _this.reloading = false;\n          _this.xhr = null;\n        };\n\n        // Bust cache when there is a \"crossOrigin\" property to avoid browser cache error\n        if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) {\n          url = addTimestamp(url);\n        }\n\n        // The third parameter is required for avoiding side-effect (#682)\n        xhr.open('GET', url, true);\n        xhr.responseType = 'arraybuffer';\n        xhr.withCredentials = element.crossOrigin === 'use-credentials';\n        xhr.send();\n      }\n    }, {\n      key: \"read\",\n      value: function read(arrayBuffer) {\n        var options = this.options,\n          imageData = this.imageData;\n\n        // Reset the orientation value to its default value 1\n        // as some iOS browsers will render image with its orientation\n        var orientation = resetAndGetOrientation(arrayBuffer);\n        var rotate = 0;\n        var scaleX = 1;\n        var scaleY = 1;\n        if (orientation > 1) {\n          // Generate a new URL which has the default orientation value\n          this.url = arrayBufferToDataURL(arrayBuffer, MIME_TYPE_JPEG);\n          var _parseOrientation = parseOrientation(orientation);\n          rotate = _parseOrientation.rotate;\n          scaleX = _parseOrientation.scaleX;\n          scaleY = _parseOrientation.scaleY;\n        }\n        if (options.rotatable) {\n          imageData.rotate = rotate;\n        }\n        if (options.scalable) {\n          imageData.scaleX = scaleX;\n          imageData.scaleY = scaleY;\n        }\n        this.clone();\n      }\n    }, {\n      key: \"clone\",\n      value: function clone() {\n        var element = this.element,\n          url = this.url;\n        var crossOrigin = element.crossOrigin;\n        var crossOriginUrl = url;\n        if (this.options.checkCrossOrigin && isCrossOriginURL(url)) {\n          if (!crossOrigin) {\n            crossOrigin = 'anonymous';\n          }\n\n          // Bust cache when there is not a \"crossOrigin\" property (#519)\n          crossOriginUrl = addTimestamp(url);\n        }\n        this.crossOrigin = crossOrigin;\n        this.crossOriginUrl = crossOriginUrl;\n        var image = document.createElement('img');\n        if (crossOrigin) {\n          image.crossOrigin = crossOrigin;\n        }\n        image.src = crossOriginUrl || url;\n        image.alt = element.alt || 'The image to crop';\n        this.image = image;\n        image.onload = this.start.bind(this);\n        image.onerror = this.stop.bind(this);\n        addClass(image, CLASS_HIDE);\n        element.parentNode.insertBefore(image, element.nextSibling);\n      }\n    }, {\n      key: \"start\",\n      value: function start() {\n        var _this2 = this;\n        var image = this.image;\n        image.onload = null;\n        image.onerror = null;\n        this.sizing = true;\n\n        // Match all browsers that use WebKit as the layout engine in iOS devices,\n        // such as Safari for iOS, Chrome for iOS, and in-app browsers.\n        var isIOSWebKit = WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent);\n        var done = function done(naturalWidth, naturalHeight) {\n          assign(_this2.imageData, {\n            naturalWidth: naturalWidth,\n            naturalHeight: naturalHeight,\n            aspectRatio: naturalWidth / naturalHeight\n          });\n          _this2.initialImageData = assign({}, _this2.imageData);\n          _this2.sizing = false;\n          _this2.sized = true;\n          _this2.build();\n        };\n\n        // Most modern browsers (excepts iOS WebKit)\n        if (image.naturalWidth && !isIOSWebKit) {\n          done(image.naturalWidth, image.naturalHeight);\n          return;\n        }\n        var sizingImage = document.createElement('img');\n        var body = document.body || document.documentElement;\n        this.sizingImage = sizingImage;\n        sizingImage.onload = function () {\n          done(sizingImage.width, sizingImage.height);\n          if (!isIOSWebKit) {\n            body.removeChild(sizingImage);\n          }\n        };\n        sizingImage.src = image.src;\n\n        // iOS WebKit will convert the image automatically\n        // with its orientation once append it into DOM (#279)\n        if (!isIOSWebKit) {\n          sizingImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;';\n          body.appendChild(sizingImage);\n        }\n      }\n    }, {\n      key: \"stop\",\n      value: function stop() {\n        var image = this.image;\n        image.onload = null;\n        image.onerror = null;\n        image.parentNode.removeChild(image);\n        this.image = null;\n      }\n    }, {\n      key: \"build\",\n      value: function build() {\n        if (!this.sized || this.ready) {\n          return;\n        }\n        var element = this.element,\n          options = this.options,\n          image = this.image;\n\n        // Create cropper elements\n        var container = element.parentNode;\n        var template = document.createElement('div');\n        template.innerHTML = TEMPLATE;\n        var cropper = template.querySelector(\".\".concat(NAMESPACE, \"-container\"));\n        var canvas = cropper.querySelector(\".\".concat(NAMESPACE, \"-canvas\"));\n        var dragBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-drag-box\"));\n        var cropBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-crop-box\"));\n        var face = cropBox.querySelector(\".\".concat(NAMESPACE, \"-face\"));\n        this.container = container;\n        this.cropper = cropper;\n        this.canvas = canvas;\n        this.dragBox = dragBox;\n        this.cropBox = cropBox;\n        this.viewBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-view-box\"));\n        this.face = face;\n        canvas.appendChild(image);\n\n        // Hide the original image\n        addClass(element, CLASS_HIDDEN);\n\n        // Inserts the cropper after to the current image\n        container.insertBefore(cropper, element.nextSibling);\n\n        // Show the hidden image\n        removeClass(image, CLASS_HIDE);\n        this.initPreview();\n        this.bind();\n        options.initialAspectRatio = Math.max(0, options.initialAspectRatio) || NaN;\n        options.aspectRatio = Math.max(0, options.aspectRatio) || NaN;\n        options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0;\n        addClass(cropBox, CLASS_HIDDEN);\n        if (!options.guides) {\n          addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-dashed\")), CLASS_HIDDEN);\n        }\n        if (!options.center) {\n          addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-center\")), CLASS_HIDDEN);\n        }\n        if (options.background) {\n          addClass(cropper, \"\".concat(NAMESPACE, \"-bg\"));\n        }\n        if (!options.highlight) {\n          addClass(face, CLASS_INVISIBLE);\n        }\n        if (options.cropBoxMovable) {\n          addClass(face, CLASS_MOVE);\n          setData(face, DATA_ACTION, ACTION_ALL);\n        }\n        if (!options.cropBoxResizable) {\n          addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-line\")), CLASS_HIDDEN);\n          addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-point\")), CLASS_HIDDEN);\n        }\n        this.render();\n        this.ready = true;\n        this.setDragMode(options.dragMode);\n        if (options.autoCrop) {\n          this.crop();\n        }\n        this.setData(options.data);\n        if (isFunction(options.ready)) {\n          addListener(element, EVENT_READY, options.ready, {\n            once: true\n          });\n        }\n        dispatchEvent(element, EVENT_READY);\n      }\n    }, {\n      key: \"unbuild\",\n      value: function unbuild() {\n        if (!this.ready) {\n          return;\n        }\n        this.ready = false;\n        this.unbind();\n        this.resetPreview();\n        var parentNode = this.cropper.parentNode;\n        if (parentNode) {\n          parentNode.removeChild(this.cropper);\n        }\n        removeClass(this.element, CLASS_HIDDEN);\n      }\n    }, {\n      key: \"uncreate\",\n      value: function uncreate() {\n        if (this.ready) {\n          this.unbuild();\n          this.ready = false;\n          this.cropped = false;\n        } else if (this.sizing) {\n          this.sizingImage.onload = null;\n          this.sizing = false;\n          this.sized = false;\n        } else if (this.reloading) {\n          this.xhr.onabort = null;\n          this.xhr.abort();\n        } else if (this.image) {\n          this.stop();\n        }\n      }\n\n      /**\n       * Get the no conflict cropper class.\n       * @returns {Cropper} The cropper class.\n       */\n    }], [{\n      key: \"noConflict\",\n      value: function noConflict() {\n        window.Cropper = AnotherCropper;\n        return Cropper;\n      }\n\n      /**\n       * Change the default options.\n       * @param {Object} options - The new default options.\n       */\n    }, {\n      key: \"setDefaults\",\n      value: function setDefaults(options) {\n        assign(DEFAULTS, isPlainObject(options) && options);\n      }\n    }]);\n  }();\n  assign(Cropper.prototype, render, preview, events, handlers, change, methods);\n\n  return Cropper;\n\n}));\n", "/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n  var undefined;\n\n  /** Used as the semantic version number. */\n  var VERSION = '4.18.1';\n\n  /** Used as the size to enable large array optimizations. */\n  var LARGE_ARRAY_SIZE = 200;\n\n  /** Error message constants. */\n  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n      FUNC_ERROR_TEXT = 'Expected a function',\n      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`',\n      INVALID_TEMPL_IMPORTS_ERROR_TEXT = 'Invalid `imports` option passed into `_.template`';\n\n  /** Used to stand-in for `undefined` hash values. */\n  var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n  /** Used as the maximum memoize cache size. */\n  var MAX_MEMOIZE_SIZE = 500;\n\n  /** Used as the internal argument placeholder. */\n  var PLACEHOLDER = '__lodash_placeholder__';\n\n  /** Used to compose bitmasks for cloning. */\n  var CLONE_DEEP_FLAG = 1,\n      CLONE_FLAT_FLAG = 2,\n      CLONE_SYMBOLS_FLAG = 4;\n\n  /** Used to compose bitmasks for value comparisons. */\n  var COMPARE_PARTIAL_FLAG = 1,\n      COMPARE_UNORDERED_FLAG = 2;\n\n  /** Used to compose bitmasks for function metadata. */\n  var WRAP_BIND_FLAG = 1,\n      WRAP_BIND_KEY_FLAG = 2,\n      WRAP_CURRY_BOUND_FLAG = 4,\n      WRAP_CURRY_FLAG = 8,\n      WRAP_CURRY_RIGHT_FLAG = 16,\n      WRAP_PARTIAL_FLAG = 32,\n      WRAP_PARTIAL_RIGHT_FLAG = 64,\n      WRAP_ARY_FLAG = 128,\n      WRAP_REARG_FLAG = 256,\n      WRAP_FLIP_FLAG = 512;\n\n  /** Used as default options for `_.truncate`. */\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n\n  /** Used to detect hot functions by number of calls within a span of milliseconds. */\n  var HOT_COUNT = 800,\n      HOT_SPAN = 16;\n\n  /** Used to indicate the type of lazy iteratees. */\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2,\n      LAZY_WHILE_FLAG = 3;\n\n  /** Used as references for various `Number` constants. */\n  var INFINITY = 1 / 0,\n      MAX_SAFE_INTEGER = 9007199254740991,\n      MAX_INTEGER = 1.7976931348623157e+308,\n      NAN = 0 / 0;\n\n  /** Used as references for the maximum length and index of an array. */\n  var MAX_ARRAY_LENGTH = 4294967295,\n      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  /** Used to associate wrap methods with their bit flags. */\n  var wrapFlags = [\n    ['ary', WRAP_ARY_FLAG],\n    ['bind', WRAP_BIND_FLAG],\n    ['bindKey', WRAP_BIND_KEY_FLAG],\n    ['curry', WRAP_CURRY_FLAG],\n    ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n    ['flip', WRAP_FLIP_FLAG],\n    ['partial', WRAP_PARTIAL_FLAG],\n    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n    ['rearg', WRAP_REARG_FLAG]\n  ];\n\n  /** `Object#toString` result references. */\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      asyncTag = '[object AsyncFunction]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      domExcTag = '[object DOMException]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      genTag = '[object GeneratorFunction]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      nullTag = '[object Null]',\n      objectTag = '[object Object]',\n      promiseTag = '[object Promise]',\n      proxyTag = '[object Proxy]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      symbolTag = '[object Symbol]',\n      undefinedTag = '[object Undefined]',\n      weakMapTag = '[object WeakMap]',\n      weakSetTag = '[object WeakSet]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      dataViewTag = '[object DataView]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n\n  /** Used to match empty string literals in compiled template source. */\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n  /** Used to match HTML entities and HTML characters. */\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n      reUnescapedHtml = /[&<>\"']/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n  /** Used to match template delimiters. */\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to match property names within property paths. */\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n  /**\n   * Used to match `RegExp`\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n   */\n  var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n      reHasRegExpChar = RegExp(reRegExpChar.source);\n\n  /** Used to match leading whitespace. */\n  var reTrimStart = /^\\s+/;\n\n  /** Used to match a single whitespace character. */\n  var reWhitespace = /\\s/;\n\n  /** Used to match wrap detail comments. */\n  var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n      reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n      reSplitDetails = /,? & /;\n\n  /** Used to match words composed of alphanumeric characters. */\n  var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n  /**\n   * Used to validate the `validate` option in `_.template` variable.\n   *\n   * Forbids characters which could potentially change the meaning of the function argument definition:\n   * - \"(),\" (modification of function parameters)\n   * - \"=\" (default value)\n   * - \"[]{}\" (destructuring of function parameters)\n   * - \"/\" (beginning of a comment)\n   * - whitespace\n   */\n  var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n  /** Used to match backslashes in property paths. */\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  /**\n   * Used to match\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n   */\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n  /** Used to match `RegExp` flags from their coerced string values. */\n  var reFlags = /\\w*$/;\n\n  /** Used to detect bad signed hexadecimal string values. */\n  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n  /** Used to detect binary string values. */\n  var reIsBinary = /^0b[01]+$/i;\n\n  /** Used to detect host constructors (Safari). */\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  /** Used to detect octal string values. */\n  var reIsOctal = /^0o[0-7]+$/i;\n\n  /** Used to detect unsigned integer values. */\n  var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\n  var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n  /** Used to ensure capturing order of template delimiters. */\n  var reNoMatch = /($^)/;\n\n  /** Used to match unescaped characters in compiled string literals. */\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n  /** Used to compose unicode character classes. */\n  var rsAstralRange = '\\\\ud800-\\\\udfff',\n      rsComboMarksRange = '\\\\u0300-\\\\u036f',\n      reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n      rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n      rsDingbatRange = '\\\\u2700-\\\\u27bf',\n      rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n      rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n      rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n      rsPunctuationRange = '\\\\u2000-\\\\u206f',\n      rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n      rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n      rsVarRange = '\\\\ufe0e\\\\ufe0f',\n      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n  /** Used to compose unicode capture groups. */\n  var rsApos = \"['\\u2019]\",\n      rsAstral = '[' + rsAstralRange + ']',\n      rsBreak = '[' + rsBreakRange + ']',\n      rsCombo = '[' + rsComboRange + ']',\n      rsDigits = '\\\\d+',\n      rsDingbat = '[' + rsDingbatRange + ']',\n      rsLower = '[' + rsLowerRange + ']',\n      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n      rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n      rsNonAstral = '[^' + rsAstralRange + ']',\n      rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n      rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n      rsUpper = '[' + rsUpperRange + ']',\n      rsZWJ = '\\\\u200d';\n\n  /** Used to compose unicode regexes. */\n  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n      reOptMod = rsModifier + '?',\n      rsOptVar = '[' + rsVarRange + ']?',\n      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n      rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n      rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n      rsSeq = rsOptVar + reOptMod + rsOptJoin,\n      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n  /** Used to match apostrophes. */\n  var reApos = RegExp(rsApos, 'g');\n\n  /**\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n   */\n  var reComboMark = RegExp(rsCombo, 'g');\n\n  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n  /** Used to match complex or compound words. */\n  var reUnicodeWord = RegExp([\n    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n    rsUpper + '+' + rsOptContrUpper,\n    rsOrdUpper,\n    rsOrdLower,\n    rsDigits,\n    rsEmoji\n  ].join('|'), 'g');\n\n  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n  /** Used to detect strings that need a more robust regexp to match words. */\n  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n  /** Used to assign default `context` object properties. */\n  var contextProps = [\n    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n  ];\n\n  /** Used to make template sourceURLs easier to identify. */\n  var templateCounter = -1;\n\n  /** Used to identify `toStringTag` values of typed arrays. */\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n  typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n  typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n  typedArrayTags[setTag] = typedArrayTags[stringTag] =\n  typedArrayTags[weakMapTag] = false;\n\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n  cloneableTags[boolTag] = cloneableTags[dateTag] =\n  cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n  cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n  cloneableTags[int32Tag] = cloneableTags[mapTag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[setTag] =\n  cloneableTags[stringTag] = cloneableTags[symbolTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[weakMapTag] = false;\n\n  /** Used to map Latin Unicode letters to basic Latin letters. */\n  var deburredLetters = {\n    // Latin-1 Supplement block.\n    '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n    '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n    '\\xc7': 'C',  '\\xe7': 'c',\n    '\\xd0': 'D',  '\\xf0': 'd',\n    '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n    '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n    '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n    '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n    '\\xd1': 'N',  '\\xf1': 'n',\n    '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n    '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n    '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n    '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n    '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n    '\\xc6': 'Ae', '\\xe6': 'ae',\n    '\\xde': 'Th', '\\xfe': 'th',\n    '\\xdf': 'ss',\n    // Latin Extended-A block.\n    '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n    '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n    '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n    '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n    '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n    '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n    '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n    '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n    '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n    '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n    '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n    '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n    '\\u0134': 'J',  '\\u0135': 'j',\n    '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n    '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n    '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n    '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n    '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n    '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n    '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n    '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n    '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n    '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n    '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n    '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n    '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n    '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n    '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n    '\\u0174': 'W',  '\\u0175': 'w',\n    '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n    '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n    '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n    '\\u0132': 'IJ', '\\u0133': 'ij',\n    '\\u0152': 'Oe', '\\u0153': 'oe',\n    '\\u0149': \"'n\", '\\u017f': 's'\n  };\n\n  /** Used to map characters to HTML entities. */\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  /** Used to map HTML entities to characters. */\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\"\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals. */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Built-in method references without a dependency on `root`. */\n  var freeParseFloat = parseFloat,\n      freeParseInt = parseInt;\n\n  /** Detect free variable `global` from Node.js. */\n  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n  /** Detect free variable `self`. */\n  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n  /** Used as a reference to the global object. */\n  var root = freeGlobal || freeSelf || Function('return this')();\n\n  /** Detect free variable `exports`. */\n  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module`. */\n  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n  /** Detect the popular CommonJS extension `module.exports`. */\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n\n  /** Detect free variable `process` from Node.js. */\n  var freeProcess = moduleExports && freeGlobal.process;\n\n  /** Used to access faster Node.js helpers. */\n  var nodeUtil = (function() {\n    try {\n      // Use `util.types` for Node.js 10+.\n      var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n      if (types) {\n        return types;\n      }\n\n      // Legacy `process.binding('util')` for Node.js < 10.\n      return freeProcess && freeProcess.binding && freeProcess.binding('util');\n    } catch (e) {}\n  }());\n\n  /* Node.js helper references. */\n  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n      nodeIsDate = nodeUtil && nodeUtil.isDate,\n      nodeIsMap = nodeUtil && nodeUtil.isMap,\n      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n      nodeIsSet = nodeUtil && nodeUtil.isSet,\n      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * A faster alternative to `Function#apply`, this function invokes `func`\n   * with the `this` binding of `thisArg` and the arguments of `args`.\n   *\n   * @private\n   * @param {Function} func The function to invoke.\n   * @param {*} thisArg The `this` binding of `func`.\n   * @param {Array} args The arguments to invoke `func` with.\n   * @returns {*} Returns the result of `func`.\n   */\n  function apply(func, thisArg, args) {\n    switch (args.length) {\n      case 0: return func.call(thisArg);\n      case 1: return func.call(thisArg, args[0]);\n      case 2: return func.call(thisArg, args[0], args[1]);\n      case 3: return func.call(thisArg, args[0], args[1], args[2]);\n    }\n    return func.apply(thisArg, args);\n  }\n\n  /**\n   * A specialized version of `baseAggregator` for arrays.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} setter The function to set `accumulator` values.\n   * @param {Function} iteratee The iteratee to transform keys.\n   * @param {Object} accumulator The initial aggregated object.\n   * @returns {Function} Returns `accumulator`.\n   */\n  function arrayAggregator(array, setter, iteratee, accumulator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      var value = array[index];\n      setter(accumulator, value, iteratee(value), array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.forEach` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.forEachRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEachRight(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n\n    while (length--) {\n      if (iteratee(array[length], length, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.every` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if all elements pass the predicate check,\n   *  else `false`.\n   */\n  function arrayEvery(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (!predicate(array[index], index, array)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * A specialized version of `_.filter` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {Array} Returns the new filtered array.\n   */\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (predicate(value, index, array)) {\n        result[resIndex++] = value;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.includes` for arrays without support for\n   * specifying an index to search from.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludes(array, value) {\n    var length = array == null ? 0 : array.length;\n    return !!length && baseIndexOf(array, value, 0) > -1;\n  }\n\n  /**\n   * This function is like `arrayIncludes` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludesWith(array, value, comparator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (comparator(value, array[index])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * A specialized version of `_.map` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the new mapped array.\n   */\n  function arrayMap(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = iteratee(array[index], index, array);\n    }\n    return result;\n  }\n\n  /**\n   * Appends the elements of `values` to `array`.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {Array} values The values to append.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayPush(array, values) {\n    var index = -1,\n        length = values.length,\n        offset = array.length;\n\n    while (++index < length) {\n      array[offset + index] = values[index];\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.reduce` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the first element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduce(array, iteratee, accumulator, initAccum) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    if (initAccum && length) {\n      accumulator = array[++index];\n    }\n    while (++index < length) {\n      accumulator = iteratee(accumulator, array[index], index, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.reduceRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the last element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n    var length = array == null ? 0 : array.length;\n    if (initAccum && length) {\n      accumulator = array[--length];\n    }\n    while (length--) {\n      accumulator = iteratee(accumulator, array[length], length, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.some` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if any element passes the predicate check,\n   *  else `false`.\n   */\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Gets the size of an ASCII `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  var asciiSize = baseProperty('length');\n\n  /**\n   * Converts an ASCII `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function asciiToArray(string) {\n    return string.split('');\n  }\n\n  /**\n   * Splits an ASCII `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function asciiWords(string) {\n    return string.match(reAsciiWord) || [];\n  }\n\n  /**\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n   * without support for iteratee shorthands, which iterates over `collection`\n   * using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the found element or its key, else `undefined`.\n   */\n  function baseFindKey(collection, predicate, eachFunc) {\n    var result;\n    eachFunc(collection, function(value, key, collection) {\n      if (predicate(value, key, collection)) {\n        result = key;\n        return false;\n      }\n    });\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\n   * support for iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {number} fromIndex The index to search from.\n   * @param {boolean} [fromRight] Specify iterating from right to left.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseFindIndex(array, predicate, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 1 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOf(array, value, fromIndex) {\n    return value === value\n      ? strictIndexOf(array, value, fromIndex)\n      : baseFindIndex(array, baseIsNaN, fromIndex);\n  }\n\n  /**\n   * This function is like `baseIndexOf` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOfWith(array, value, fromIndex, comparator) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (comparator(array[index], value)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.isNaN` without support for number objects.\n   *\n   * @private\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n   */\n  function baseIsNaN(value) {\n    return value !== value;\n  }\n\n  /**\n   * The base implementation of `_.mean` and `_.meanBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the mean.\n   */\n  function baseMean(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n    return length ? (baseSum(array, iteratee) / length) : NAN;\n  }\n\n  /**\n   * The base implementation of `_.property` without support for deep paths.\n   *\n   * @private\n   * @param {string} key The key of the property to get.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.propertyOf` without support for deep paths.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function basePropertyOf(object) {\n    return function(key) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} accumulator The initial value.\n   * @param {boolean} initAccum Specify using the first or last element of\n   *  `collection` as the initial value.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the accumulated value.\n   */\n  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n    eachFunc(collection, function(value, index, collection) {\n      accumulator = initAccum\n        ? (initAccum = false, value)\n        : iteratee(accumulator, value, index, collection);\n    });\n    return accumulator;\n  }\n\n  /**\n   * The base implementation of `_.sortBy` which uses `comparer` to define the\n   * sort order of `array` and replaces criteria objects with their corresponding\n   * values.\n   *\n   * @private\n   * @param {Array} array The array to sort.\n   * @param {Function} comparer The function to define sort order.\n   * @returns {Array} Returns `array`.\n   */\n  function baseSortBy(array, comparer) {\n    var length = array.length;\n\n    array.sort(comparer);\n    while (length--) {\n      array[length] = array[length].value;\n    }\n    return array;\n  }\n\n  /**\n   * The base implementation of `_.sum` and `_.sumBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the sum.\n   */\n  function baseSum(array, iteratee) {\n    var result,\n        index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      var current = iteratee(array[index]);\n      if (current !== undefined) {\n        result = result === undefined ? current : (result + current);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.times` without support for iteratee shorthands\n   * or max array length checks.\n   *\n   * @private\n   * @param {number} n The number of times to invoke `iteratee`.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the array of results.\n   */\n  function baseTimes(n, iteratee) {\n    var index = -1,\n        result = Array(n);\n\n    while (++index < n) {\n      result[index] = iteratee(index);\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n   * of key-value pairs for `object` corresponding to the property names of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the key-value pairs.\n   */\n  function baseToPairs(object, props) {\n    return arrayMap(props, function(key) {\n      return [key, object[key]];\n    });\n  }\n\n  /**\n   * The base implementation of `_.trim`.\n   *\n   * @private\n   * @param {string} string The string to trim.\n   * @returns {string} Returns the trimmed string.\n   */\n  function baseTrim(string) {\n    return string\n      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n      : string;\n  }\n\n  /**\n   * The base implementation of `_.unary` without support for storing metadata.\n   *\n   * @private\n   * @param {Function} func The function to cap arguments for.\n   * @returns {Function} Returns the new capped function.\n   */\n  function baseUnary(func) {\n    return function(value) {\n      return func(value);\n    };\n  }\n\n  /**\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\n   * array of `object` property values corresponding to the property names\n   * of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the array of property values.\n   */\n  function baseValues(object, props) {\n    return arrayMap(props, function(key) {\n      return object[key];\n    });\n  }\n\n  /**\n   * Checks if a `cache` value for `key` exists.\n   *\n   * @private\n   * @param {Object} cache The cache to query.\n   * @param {string} key The key of the entry to check.\n   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n   */\n  function cacheHas(cache, key) {\n    return cache.has(key);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the first unmatched string symbol.\n   */\n  function charsStartIndex(strSymbols, chrSymbols) {\n    var index = -1,\n        length = strSymbols.length;\n\n    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the last unmatched string symbol.\n   */\n  function charsEndIndex(strSymbols, chrSymbols) {\n    var index = strSymbols.length;\n\n    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Gets the number of `placeholder` occurrences in `array`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} placeholder The placeholder to search for.\n   * @returns {number} Returns the placeholder count.\n   */\n  function countHolders(array, placeholder) {\n    var length = array.length,\n        result = 0;\n\n    while (length--) {\n      if (array[length] === placeholder) {\n        ++result;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n   * letters to basic Latin letters.\n   *\n   * @private\n   * @param {string} letter The matched letter to deburr.\n   * @returns {string} Returns the deburred letter.\n   */\n  var deburrLetter = basePropertyOf(deburredLetters);\n\n  /**\n   * Used by `_.escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n  /**\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n\n  /**\n   * Gets the value at `key` of `object`.\n   *\n   * @private\n   * @param {Object} [object] The object to query.\n   * @param {string} key The key of the property to get.\n   * @returns {*} Returns the property value.\n   */\n  function getValue(object, key) {\n    return object == null ? undefined : object[key];\n  }\n\n  /**\n   * Checks if `string` contains Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n   */\n  function hasUnicode(string) {\n    return reHasUnicode.test(string);\n  }\n\n  /**\n   * Checks if `string` contains a word composed of Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a word is found, else `false`.\n   */\n  function hasUnicodeWord(string) {\n    return reHasUnicodeWord.test(string);\n  }\n\n  /**\n   * Converts `iterator` to an array.\n   *\n   * @private\n   * @param {Object} iterator The iterator to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function iteratorToArray(iterator) {\n    var data,\n        result = [];\n\n    while (!(data = iterator.next()).done) {\n      result.push(data.value);\n    }\n    return result;\n  }\n\n  /**\n   * Converts `map` to its key-value pairs.\n   *\n   * @private\n   * @param {Object} map The map to convert.\n   * @returns {Array} Returns the key-value pairs.\n   */\n  function mapToArray(map) {\n    var index = -1,\n        result = Array(map.size);\n\n    map.forEach(function(value, key) {\n      result[++index] = [key, value];\n    });\n    return result;\n  }\n\n  /**\n   * Creates a unary function that invokes `func` with its argument transformed.\n   *\n   * @private\n   * @param {Function} func The function to wrap.\n   * @param {Function} transform The argument transform.\n   * @returns {Function} Returns the new function.\n   */\n  function overArg(func, transform) {\n    return function(arg) {\n      return func(transform(arg));\n    };\n  }\n\n  /**\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\n   * and returns an array of their indexes.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {*} placeholder The placeholder to replace.\n   * @returns {Array} Returns the new array of placeholder indexes.\n   */\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (value === placeholder || value === PLACEHOLDER) {\n        array[index] = PLACEHOLDER;\n        result[resIndex++] = index;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Converts `set` to an array of its values.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the values.\n   */\n  function setToArray(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = value;\n    });\n    return result;\n  }\n\n  /**\n   * Converts `set` to its value-value pairs.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the value-value pairs.\n   */\n  function setToPairs(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = [value, value];\n    });\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.indexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictIndexOf(array, value, fromIndex) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * A specialized version of `_.lastIndexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictLastIndexOf(array, value, fromIndex) {\n    var index = fromIndex + 1;\n    while (index--) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return index;\n  }\n\n  /**\n   * Gets the number of symbols in `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the string size.\n   */\n  function stringSize(string) {\n    return hasUnicode(string)\n      ? unicodeSize(string)\n      : asciiSize(string);\n  }\n\n  /**\n   * Converts `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function stringToArray(string) {\n    return hasUnicode(string)\n      ? unicodeToArray(string)\n      : asciiToArray(string);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n   * character of `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the index of the last non-whitespace character.\n   */\n  function trimmedEndIndex(string) {\n    var index = string.length;\n\n    while (index-- && reWhitespace.test(string.charAt(index))) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} chr The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */\n  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n  /**\n   * Gets the size of a Unicode `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  function unicodeSize(string) {\n    var result = reUnicode.lastIndex = 0;\n    while (reUnicode.test(string)) {\n      ++result;\n    }\n    return result;\n  }\n\n  /**\n   * Converts a Unicode `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function unicodeToArray(string) {\n    return string.match(reUnicode) || [];\n  }\n\n  /**\n   * Splits a Unicode `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function unicodeWords(string) {\n    return string.match(reUnicodeWord) || [];\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new pristine `lodash` function using the `context` object.\n   *\n   * @static\n   * @memberOf _\n   * @since 1.1.0\n   * @category Util\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns a new `lodash` function.\n   * @example\n   *\n   * _.mixin({ 'foo': _.constant('foo') });\n   *\n   * var lodash = _.runInContext();\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\n   *\n   * _.isFunction(_.foo);\n   * // => true\n   * _.isFunction(_.bar);\n   * // => false\n   *\n   * lodash.isFunction(lodash.foo);\n   * // => false\n   * lodash.isFunction(lodash.bar);\n   * // => true\n   *\n   * // Create a suped-up `defer` in Node.js.\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n   */\n  var runInContext = (function runInContext(context) {\n    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n    /** Built-in constructor references. */\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n\n    /** Used for built-in method references. */\n    var arrayProto = Array.prototype,\n        funcProto = Function.prototype,\n        objectProto = Object.prototype;\n\n    /** Used to detect overreaching core-js shims. */\n    var coreJsData = context['__core-js_shared__'];\n\n    /** Used to resolve the decompiled source of functions. */\n    var funcToString = funcProto.toString;\n\n    /** Used to check objects for own properties. */\n    var hasOwnProperty = objectProto.hasOwnProperty;\n\n    /** Used to generate unique IDs. */\n    var idCounter = 0;\n\n    /** Used to detect methods masquerading as native. */\n    var maskSrcKey = (function() {\n      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n      return uid ? ('Symbol(src)_1.' + uid) : '';\n    }());\n\n    /**\n     * Used to resolve the\n     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n     * of values.\n     */\n    var nativeObjectToString = objectProto.toString;\n\n    /** Used to infer the `Object` constructor. */\n    var objectCtorString = funcToString.call(Object);\n\n    /** Used to restore the original `_` reference in `_.noConflict`. */\n    var oldDash = root._;\n\n    /** Used to detect if a method is native. */\n    var reIsNative = RegExp('^' +\n      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n\n    /** Built-in value references. */\n    var Buffer = moduleExports ? context.Buffer : undefined,\n        Symbol = context.Symbol,\n        Uint8Array = context.Uint8Array,\n        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n        getPrototype = overArg(Object.getPrototypeOf, Object),\n        objectCreate = Object.create,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        splice = arrayProto.splice,\n        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n        symIterator = Symbol ? Symbol.iterator : undefined,\n        symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n    var defineProperty = (function() {\n      try {\n        var func = getNative(Object, 'defineProperty');\n        func({}, '', {});\n        return func;\n      } catch (e) {}\n    }());\n\n    /** Mocked built-ins. */\n    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n        ctxNow = Date && Date.now !== root.Date.now && Date.now,\n        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n    /* Built-in method references for those with the same name as other `lodash` methods. */\n    var nativeCeil = Math.ceil,\n        nativeFloor = Math.floor,\n        nativeGetSymbols = Object.getOwnPropertySymbols,\n        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n        nativeIsFinite = context.isFinite,\n        nativeJoin = arrayProto.join,\n        nativeKeys = overArg(Object.keys, Object),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = Date.now,\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random,\n        nativeReverse = arrayProto.reverse;\n\n    /* Built-in method references that are verified to be native. */\n    var DataView = getNative(context, 'DataView'),\n        Map = getNative(context, 'Map'),\n        Promise = getNative(context, 'Promise'),\n        Set = getNative(context, 'Set'),\n        WeakMap = getNative(context, 'WeakMap'),\n        nativeCreate = getNative(Object, 'create');\n\n    /** Used to store function metadata. */\n    var metaMap = WeakMap && new WeakMap;\n\n    /** Used to lookup unminified function names. */\n    var realNames = {};\n\n    /** Used to detect maps, sets, and weakmaps. */\n    var dataViewCtorString = toSource(DataView),\n        mapCtorString = toSource(Map),\n        promiseCtorString = toSource(Promise),\n        setCtorString = toSource(Set),\n        weakMapCtorString = toSource(WeakMap);\n\n    /** Used to convert symbols to primitives and strings. */\n    var symbolProto = Symbol ? Symbol.prototype : undefined,\n        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n        symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps `value` to enable implicit method\n     * chain sequences. Methods that operate on and return arrays, collections,\n     * and functions can be chained together. Methods that retrieve a single value\n     * or may return a primitive value will automatically end the chain sequence\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\n     * with `_#value`.\n     *\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n     * enabled using `_.chain`.\n     *\n     * The execution of chained methods is lazy, that is, it's deferred until\n     * `_#value` is implicitly or explicitly called.\n     *\n     * Lazy evaluation allows several methods to support shortcut fusion.\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n     * the creation of intermediate arrays and can greatly reduce the number of\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\n     * fusion if the section is applied to an array and iteratees accept only\n     * one argument. The heuristic for whether a section qualifies for shortcut\n     * fusion is subject to change.\n     *\n     * Chaining is supported in custom builds as long as the `_#value` method is\n     * directly or indirectly included in the build.\n     *\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\n     *\n     * The wrapper `Array` methods are:\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n     *\n     * The wrapper `String` methods are:\n     * `replace` and `split`\n     *\n     * The wrapper methods that support shortcut fusion are:\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n     *\n     * The chainable wrapper methods are:\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\n     *\n     * The wrapper methods that are **not** chainable by default are:\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n     * `upperFirst`, `value`, and `words`\n     *\n     * @name _\n     * @constructor\n     * @category Seq\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // Returns an unwrapped value.\n     * wrapped.reduce(_.add);\n     * // => 6\n     *\n     * // Returns a wrapped value.\n     * var squares = wrapped.map(square);\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\n    }\n\n    /**\n     * The base implementation of `_.create` without support for assigning\n     * properties to the created object.\n     *\n     * @private\n     * @param {Object} proto The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */\n    var baseCreate = (function() {\n      function object() {}\n      return function(proto) {\n        if (!isObject(proto)) {\n          return {};\n        }\n        if (objectCreate) {\n          return objectCreate(proto);\n        }\n        object.prototype = proto;\n        var result = new object;\n        object.prototype = undefined;\n        return result;\n      };\n    }());\n\n    /**\n     * The function whose prototype chain sequence wrappers inherit from.\n     *\n     * @private\n     */\n    function baseLodash() {\n      // No operation performed.\n    }\n\n    /**\n     * The base constructor for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\n     */\n    function LodashWrapper(value, chainAll) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__chain__ = !!chainAll;\n      this.__index__ = 0;\n      this.__values__ = undefined;\n    }\n\n    /**\n     * By default, the template delimiters used by lodash are like those in\n     * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n     * following template settings to use alternative delimiters.\n     *\n     * **Security:** See\n     * [threat model](https://github.com/lodash/lodash/blob/main/threat-model.md)\n     * \u2014 `_.template` is insecure and will be removed in v5.\n     *\n     * @static\n     * @memberOf _\n     * @type {Object}\n     */\n    lodash.templateSettings = {\n\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'escape': reEscape,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'evaluate': reEvaluate,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type {string}\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type {Object}\n       */\n      'imports': {\n\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type {Function}\n         */\n        '_': lodash\n      }\n    };\n\n    // Ensure wrappers are instances of `baseLodash`.\n    lodash.prototype = baseLodash.prototype;\n    lodash.prototype.constructor = lodash;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n     *\n     * @private\n     * @constructor\n     * @param {*} value The value to wrap.\n     */\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = MAX_ARRAY_LENGTH;\n      this.__views__ = [];\n    }\n\n    /**\n     * Creates a clone of the lazy wrapper object.\n     *\n     * @private\n     * @name clone\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\n     */\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = copyArray(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = copyArray(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = copyArray(this.__views__);\n      return result;\n    }\n\n    /**\n     * Reverses the direction of lazy iteration.\n     *\n     * @private\n     * @name reverse\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\n     */\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n\n    /**\n     * Extracts the unwrapped value from its lazy wrapper.\n     *\n     * @private\n     * @name value\n     * @memberOf LazyWrapper\n     * @returns {*} Returns the unwrapped value.\n     */\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n        return baseWrapperValue(array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n\n    // Ensure `LazyWrapper` is an instance of `baseLodash`.\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a hash object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Hash(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the hash.\n     *\n     * @private\n     * @name clear\n     * @memberOf Hash\n     */\n    function hashClear() {\n      this.__data__ = nativeCreate ? nativeCreate(null) : {};\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the hash.\n     *\n     * @private\n     * @name delete\n     * @memberOf Hash\n     * @param {Object} hash The hash to modify.\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function hashDelete(key) {\n      var result = this.has(key) && delete this.__data__[key];\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the hash value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Hash\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function hashGet(key) {\n      var data = this.__data__;\n      if (nativeCreate) {\n        var result = data[key];\n        return result === HASH_UNDEFINED ? undefined : result;\n      }\n      return hasOwnProperty.call(data, key) ? data[key] : undefined;\n    }\n\n    /**\n     * Checks if a hash value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Hash\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function hashHas(key) {\n      var data = this.__data__;\n      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n    }\n\n    /**\n     * Sets the hash `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Hash\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the hash instance.\n     */\n    function hashSet(key, value) {\n      var data = this.__data__;\n      this.size += this.has(key) ? 0 : 1;\n      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n      return this;\n    }\n\n    // Add methods to `Hash`.\n    Hash.prototype.clear = hashClear;\n    Hash.prototype['delete'] = hashDelete;\n    Hash.prototype.get = hashGet;\n    Hash.prototype.has = hashHas;\n    Hash.prototype.set = hashSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an list cache object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function ListCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the list cache.\n     *\n     * @private\n     * @name clear\n     * @memberOf ListCache\n     */\n    function listCacheClear() {\n      this.__data__ = [];\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the list cache.\n     *\n     * @private\n     * @name delete\n     * @memberOf ListCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function listCacheDelete(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        return false;\n      }\n      var lastIndex = data.length - 1;\n      if (index == lastIndex) {\n        data.pop();\n      } else {\n        splice.call(data, index, 1);\n      }\n      --this.size;\n      return true;\n    }\n\n    /**\n     * Gets the list cache value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf ListCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function listCacheGet(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      return index < 0 ? undefined : data[index][1];\n    }\n\n    /**\n     * Checks if a list cache value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf ListCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function listCacheHas(key) {\n      return assocIndexOf(this.__data__, key) > -1;\n    }\n\n    /**\n     * Sets the list cache `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf ListCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the list cache instance.\n     */\n    function listCacheSet(key, value) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        ++this.size;\n        data.push([key, value]);\n      } else {\n        data[index][1] = value;\n      }\n      return this;\n    }\n\n    // Add methods to `ListCache`.\n    ListCache.prototype.clear = listCacheClear;\n    ListCache.prototype['delete'] = listCacheDelete;\n    ListCache.prototype.get = listCacheGet;\n    ListCache.prototype.has = listCacheHas;\n    ListCache.prototype.set = listCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a map cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function MapCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the map.\n     *\n     * @private\n     * @name clear\n     * @memberOf MapCache\n     */\n    function mapCacheClear() {\n      this.size = 0;\n      this.__data__ = {\n        'hash': new Hash,\n        'map': new (Map || ListCache),\n        'string': new Hash\n      };\n    }\n\n    /**\n     * Removes `key` and its value from the map.\n     *\n     * @private\n     * @name delete\n     * @memberOf MapCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function mapCacheDelete(key) {\n      var result = getMapData(this, key)['delete'](key);\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the map value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf MapCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function mapCacheGet(key) {\n      return getMapData(this, key).get(key);\n    }\n\n    /**\n     * Checks if a map value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf MapCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function mapCacheHas(key) {\n      return getMapData(this, key).has(key);\n    }\n\n    /**\n     * Sets the map `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf MapCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the map cache instance.\n     */\n    function mapCacheSet(key, value) {\n      var data = getMapData(this, key),\n          size = data.size;\n\n      data.set(key, value);\n      this.size += data.size == size ? 0 : 1;\n      return this;\n    }\n\n    // Add methods to `MapCache`.\n    MapCache.prototype.clear = mapCacheClear;\n    MapCache.prototype['delete'] = mapCacheDelete;\n    MapCache.prototype.get = mapCacheGet;\n    MapCache.prototype.has = mapCacheHas;\n    MapCache.prototype.set = mapCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     *\n     * Creates an array cache object to store unique values.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [values] The values to cache.\n     */\n    function SetCache(values) {\n      var index = -1,\n          length = values == null ? 0 : values.length;\n\n      this.__data__ = new MapCache;\n      while (++index < length) {\n        this.add(values[index]);\n      }\n    }\n\n    /**\n     * Adds `value` to the array cache.\n     *\n     * @private\n     * @name add\n     * @memberOf SetCache\n     * @alias push\n     * @param {*} value The value to cache.\n     * @returns {Object} Returns the cache instance.\n     */\n    function setCacheAdd(value) {\n      this.__data__.set(value, HASH_UNDEFINED);\n      return this;\n    }\n\n    /**\n     * Checks if `value` is in the array cache.\n     *\n     * @private\n     * @name has\n     * @memberOf SetCache\n     * @param {*} value The value to search for.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     */\n    function setCacheHas(value) {\n      return this.__data__.has(value);\n    }\n\n    // Add methods to `SetCache`.\n    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n    SetCache.prototype.has = setCacheHas;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a stack cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Stack(entries) {\n      var data = this.__data__ = new ListCache(entries);\n      this.size = data.size;\n    }\n\n    /**\n     * Removes all key-value entries from the stack.\n     *\n     * @private\n     * @name clear\n     * @memberOf Stack\n     */\n    function stackClear() {\n      this.__data__ = new ListCache;\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the stack.\n     *\n     * @private\n     * @name delete\n     * @memberOf Stack\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function stackDelete(key) {\n      var data = this.__data__,\n          result = data['delete'](key);\n\n      this.size = data.size;\n      return result;\n    }\n\n    /**\n     * Gets the stack value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Stack\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function stackGet(key) {\n      return this.__data__.get(key);\n    }\n\n    /**\n     * Checks if a stack value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Stack\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function stackHas(key) {\n      return this.__data__.has(key);\n    }\n\n    /**\n     * Sets the stack `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Stack\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the stack cache instance.\n     */\n    function stackSet(key, value) {\n      var data = this.__data__;\n      if (data instanceof ListCache) {\n        var pairs = data.__data__;\n        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n          pairs.push([key, value]);\n          this.size = ++data.size;\n          return this;\n        }\n        data = this.__data__ = new MapCache(pairs);\n      }\n      data.set(key, value);\n      this.size = data.size;\n      return this;\n    }\n\n    // Add methods to `Stack`.\n    Stack.prototype.clear = stackClear;\n    Stack.prototype['delete'] = stackDelete;\n    Stack.prototype.get = stackGet;\n    Stack.prototype.has = stackHas;\n    Stack.prototype.set = stackSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of the enumerable property names of the array-like `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @param {boolean} inherited Specify returning inherited property names.\n     * @returns {Array} Returns the array of property names.\n     */\n    function arrayLikeKeys(value, inherited) {\n      var isArr = isArray(value),\n          isArg = !isArr && isArguments(value),\n          isBuff = !isArr && !isArg && isBuffer(value),\n          isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n          skipIndexes = isArr || isArg || isBuff || isType,\n          result = skipIndexes ? baseTimes(value.length, String) : [],\n          length = result.length;\n\n      for (var key in value) {\n        if ((inherited || hasOwnProperty.call(value, key)) &&\n            !(skipIndexes && (\n               // Safari 9 has enumerable `arguments.length` in strict mode.\n               key == 'length' ||\n               // Node.js 0.10 has enumerable non-index properties on buffers.\n               (isBuff && (key == 'offset' || key == 'parent')) ||\n               // PhantomJS 2 has enumerable non-index properties on typed arrays.\n               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n               // Skip index properties.\n               isIndex(key, length)\n            ))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `_.sample` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @returns {*} Returns the random element.\n     */\n    function arraySample(array) {\n      var length = array.length;\n      return length ? array[baseRandom(0, length - 1)] : undefined;\n    }\n\n    /**\n     * A specialized version of `_.sampleSize` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function arraySampleSize(array, n) {\n      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * A specialized version of `_.shuffle` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function arrayShuffle(array) {\n      return shuffleSelf(copyArray(array));\n    }\n\n    /**\n     * This function is like `assignValue` except that it doesn't assign\n     * `undefined` values.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignMergeValue(object, key, value) {\n      if ((value !== undefined && !eq(object[key], value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Assigns `value` to `key` of `object` if the existing value is not equivalent\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignValue(object, key, value) {\n      var objValue = object[key];\n      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Gets the index at which the `key` is found in `array` of key-value pairs.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} key The key to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */\n    function assocIndexOf(array, key) {\n      var length = array.length;\n      while (length--) {\n        if (eq(array[length][0], key)) {\n          return length;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\n     * by `iteratee` and values set by `setter`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform keys.\n     * @param {Object} accumulator The initial aggregated object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseAggregator(collection, setter, iteratee, accumulator) {\n      baseEach(collection, function(value, key, collection) {\n        setter(accumulator, value, iteratee(value), collection);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.assign` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssign(object, source) {\n      return object && copyObject(source, keys(source), object);\n    }\n\n    /**\n     * The base implementation of `_.assignIn` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssignIn(object, source) {\n      return object && copyObject(source, keysIn(source), object);\n    }\n\n    /**\n     * The base implementation of `assignValue` and `assignMergeValue` without\n     * value checks.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function baseAssignValue(object, key, value) {\n      if (key == '__proto__' && defineProperty) {\n        defineProperty(object, key, {\n          'configurable': true,\n          'enumerable': true,\n          'value': value,\n          'writable': true\n        });\n      } else {\n        object[key] = value;\n      }\n    }\n\n    /**\n     * The base implementation of `_.at` without support for individual paths.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Array} Returns the picked elements.\n     */\n    function baseAt(object, paths) {\n      var index = -1,\n          length = paths.length,\n          result = Array(length),\n          skip = object == null;\n\n      while (++index < length) {\n        result[index] = skip ? undefined : get(object, paths[index]);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     */\n    function baseClamp(number, lower, upper) {\n      if (number === number) {\n        if (upper !== undefined) {\n          number = number <= upper ? number : upper;\n        }\n        if (lower !== undefined) {\n          number = number >= lower ? number : lower;\n        }\n      }\n      return number;\n    }\n\n    /**\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n     * traversed objects.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Deep clone\n     *  2 - Flatten inherited properties\n     *  4 - Clone symbols\n     * @param {Function} [customizer] The function to customize cloning.\n     * @param {string} [key] The key of `value`.\n     * @param {Object} [object] The parent object of `value`.\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n    function baseClone(value, bitmask, customizer, key, object, stack) {\n      var result,\n          isDeep = bitmask & CLONE_DEEP_FLAG,\n          isFlat = bitmask & CLONE_FLAT_FLAG,\n          isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n      if (customizer) {\n        result = object ? customizer(value, key, object, stack) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return copyArray(value, result);\n        }\n      } else {\n        var tag = getTag(value),\n            isFunc = tag == funcTag || tag == genTag;\n\n        if (isBuffer(value)) {\n          return cloneBuffer(value, isDeep);\n        }\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = (isFlat || isFunc) ? {} : initCloneObject(value);\n          if (!isDeep) {\n            return isFlat\n              ? copySymbolsIn(value, baseAssignIn(result, value))\n              : copySymbols(value, baseAssign(result, value));\n          }\n        } else {\n          if (!cloneableTags[tag]) {\n            return object ? value : {};\n          }\n          result = initCloneByTag(value, tag, isDeep);\n        }\n      }\n      // Check for circular references and return its corresponding clone.\n      stack || (stack = new Stack);\n      var stacked = stack.get(value);\n      if (stacked) {\n        return stacked;\n      }\n      stack.set(value, result);\n\n      if (isSet(value)) {\n        value.forEach(function(subValue) {\n          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n        });\n      } else if (isMap(value)) {\n        value.forEach(function(subValue, key) {\n          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n        });\n      }\n\n      var keysFunc = isFull\n        ? (isFlat ? getAllKeysIn : getAllKeys)\n        : (isFlat ? keysIn : keys);\n\n      var props = isArr ? undefined : keysFunc(value);\n      arrayEach(props || value, function(subValue, key) {\n        if (props) {\n          key = subValue;\n          subValue = value[key];\n        }\n        // Recursively populate clone (susceptible to call stack limits).\n        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.conforms` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseConforms(source) {\n      var props = keys(source);\n      return function(object) {\n        return baseConformsTo(object, source, props);\n      };\n    }\n\n    /**\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     */\n    function baseConformsTo(object, source, props) {\n      var length = props.length;\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (length--) {\n        var key = props[length],\n            predicate = source[key],\n            value = object[key];\n\n        if ((value === undefined && !(key in object)) || !predicate(value)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\n     * to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {Array} args The arguments to provide to `func`.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n\n    /**\n     * The base implementation of methods like `_.difference` without support\n     * for excluding multiple arrays or iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Array} values The values to exclude.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     */\n    function baseDifference(array, values, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          isCommon = true,\n          length = array.length,\n          result = [],\n          valuesLength = values.length;\n\n      if (!length) {\n        return result;\n      }\n      if (iteratee) {\n        values = arrayMap(values, baseUnary(iteratee));\n      }\n      if (comparator) {\n        includes = arrayIncludesWith;\n        isCommon = false;\n      }\n      else if (values.length >= LARGE_ARRAY_SIZE) {\n        includes = cacheHas;\n        isCommon = false;\n        values = new SetCache(values);\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee == null ? value : iteratee(value);\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var valuesIndex = valuesLength;\n          while (valuesIndex--) {\n            if (values[valuesIndex] === computed) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n        else if (!includes(values, computed, comparator)) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.forEach` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEach = createBaseEach(baseForOwn);\n\n    /**\n     * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n    /**\n     * The base implementation of `_.every` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`\n     */\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\n     * `comparator` to determine the extremum value.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The iteratee invoked per iteration.\n     * @param {Function} comparator The comparator used to compare values.\n     * @returns {*} Returns the extremum value.\n     */\n    function baseExtremum(array, iteratee, comparator) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index],\n            current = iteratee(value);\n\n        if (current != null && (computed === undefined\n              ? (current === current && !isSymbol(current))\n              : comparator(current, computed)\n            )) {\n          var computed = current,\n              result = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.fill` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     */\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = toInteger(start);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : toInteger(end);\n      if (end < 0) {\n        end += length;\n      }\n      end = start > end ? 0 : toLength(end);\n      while (start < end) {\n        array[start++] = value;\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.filter` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.flatten` with support for restricting flattening.\n     *\n     * @private\n     * @param {Array} array The array to flatten.\n     * @param {number} depth The maximum recursion depth.\n     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n     * @param {Array} [result=[]] The initial result value.\n     * @returns {Array} Returns the new flattened array.\n     */\n    function baseFlatten(array, depth, predicate, isStrict, result) {\n      var index = -1,\n          length = array.length;\n\n      predicate || (predicate = isFlattenable);\n      result || (result = []);\n\n      while (++index < length) {\n        var value = array[index];\n        if (depth > 0 && predicate(value)) {\n          if (depth > 1) {\n            // Recursively flatten arrays (susceptible to call stack limits).\n            baseFlatten(value, depth - 1, predicate, isStrict, result);\n          } else {\n            arrayPush(result, value);\n          }\n        } else if (!isStrict) {\n          result[result.length] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `baseForOwn` which iterates over `object`\n     * properties returned by `keysFunc` and invokes `iteratee` for each property.\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseFor = createBaseFor();\n\n    /**\n     * This function is like `baseFor` except that it iterates over properties\n     * in the opposite order.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseForRight = createBaseFor(true);\n\n    /**\n     * The base implementation of `_.forOwn` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwn(object, iteratee) {\n      return object && baseFor(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwnRight(object, iteratee) {\n      return object && baseForRight(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.functions` which creates an array of\n     * `object` function property names filtered from `props`.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} props The property names to filter.\n     * @returns {Array} Returns the function names.\n     */\n    function baseFunctions(object, props) {\n      return arrayFilter(props, function(key) {\n        return isFunction(object[key]);\n      });\n    }\n\n    /**\n     * The base implementation of `_.get` without support for default values.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseGet(object, path) {\n      path = castPath(path, object);\n\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[toKey(path[index++])];\n      }\n      return (index && index == length) ? object : undefined;\n    }\n\n    /**\n     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n     * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @param {Function} symbolsFunc The function to get the symbols of `object`.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n      var result = keysFunc(object);\n      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n    }\n\n    /**\n     * The base implementation of `getTag` without fallbacks for buggy environments.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    function baseGetTag(value) {\n      if (value == null) {\n        return value === undefined ? undefinedTag : nullTag;\n      }\n      return (symToStringTag && symToStringTag in Object(value))\n        ? getRawTag(value)\n        : objectToString(value);\n    }\n\n    /**\n     * The base implementation of `_.gt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     */\n    function baseGt(value, other) {\n      return value > other;\n    }\n\n    /**\n     * The base implementation of `_.has` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHas(object, key) {\n      return object != null && hasOwnProperty.call(object, key);\n    }\n\n    /**\n     * The base implementation of `_.hasIn` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHasIn(object, key) {\n      return object != null && key in Object(object);\n    }\n\n    /**\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to check.\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     */\n    function baseInRange(number, start, end) {\n      return number >= nativeMin(start, end) && number < nativeMax(start, end);\n    }\n\n    /**\n     * The base implementation of methods like `_.intersection`, without support\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of shared values.\n     */\n    function baseIntersection(arrays, iteratee, comparator) {\n      var includes = comparator ? arrayIncludesWith : arrayIncludes,\n          length = arrays[0].length,\n          othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(othLength),\n          maxLength = Infinity,\n          result = [];\n\n      while (othIndex--) {\n        var array = arrays[othIndex];\n        if (othIndex && iteratee) {\n          array = arrayMap(array, baseUnary(iteratee));\n        }\n        maxLength = nativeMin(array.length, maxLength);\n        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n          ? new SetCache(othIndex && array)\n          : undefined;\n      }\n      array = arrays[0];\n\n      var index = -1,\n          seen = caches[0];\n\n      outer:\n      while (++index < length && result.length < maxLength) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (!(seen\n              ? cacheHas(seen, computed)\n              : includes(result, computed, comparator)\n            )) {\n          othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if (!(cache\n                  ? cacheHas(cache, computed)\n                  : includes(arrays[othIndex], computed, comparator))\n                ) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\n     * `object` with values transformed by `iteratee` and set by `setter`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform values.\n     * @param {Object} accumulator The initial inverted object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseInverter(object, setter, iteratee, accumulator) {\n      baseForOwn(object, function(value, key, object) {\n        setter(accumulator, iteratee(value), key, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.invoke` without support for individual\n     * method arguments.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {Array} args The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     */\n    function baseInvoke(object, path, args) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      var func = object == null ? object : object[toKey(last(path))];\n      return func == null ? undefined : apply(func, object, args);\n    }\n\n    /**\n     * The base implementation of `_.isArguments`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     */\n    function baseIsArguments(value) {\n      return isObjectLike(value) && baseGetTag(value) == argsTag;\n    }\n\n    /**\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     */\n    function baseIsArrayBuffer(value) {\n      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n    }\n\n    /**\n     * The base implementation of `_.isDate` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     */\n    function baseIsDate(value) {\n      return isObjectLike(value) && baseGetTag(value) == dateTag;\n    }\n\n    /**\n     * The base implementation of `_.isEqual` which supports partial comparisons\n     * and tracks traversed objects.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Unordered comparison\n     *  2 - Partial comparison\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */\n    function baseIsEqual(value, other, bitmask, customizer, stack) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n    }\n\n    /**\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\n     * deep comparisons and tracks traversed objects enabling objects with circular\n     * references to be compared.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = objIsArr ? arrayTag : getTag(object),\n          othTag = othIsArr ? arrayTag : getTag(other);\n\n      objTag = objTag == argsTag ? objectTag : objTag;\n      othTag = othTag == argsTag ? objectTag : othTag;\n\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && isBuffer(object)) {\n        if (!isBuffer(other)) {\n          return false;\n        }\n        objIsArr = true;\n        objIsObj = false;\n      }\n      if (isSameTag && !objIsObj) {\n        stack || (stack = new Stack);\n        return (objIsArr || isTypedArray(object))\n          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n      }\n      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          var objUnwrapped = objIsWrapped ? object.value() : object,\n              othUnwrapped = othIsWrapped ? other.value() : other;\n\n          stack || (stack = new Stack);\n          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      stack || (stack = new Stack);\n      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n    }\n\n    /**\n     * The base implementation of `_.isMap` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     */\n    function baseIsMap(value) {\n      return isObjectLike(value) && getTag(value) == mapTag;\n    }\n\n    /**\n     * The base implementation of `_.isMatch` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Array} matchData The property names, values, and compare flags to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     */\n    function baseIsMatch(object, source, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (index--) {\n        var data = matchData[index];\n        if ((noCustomizer && data[2])\n              ? data[1] !== object[data[0]]\n              : !(data[0] in object)\n            ) {\n          return false;\n        }\n      }\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var stack = new Stack;\n          if (customizer) {\n            var result = customizer(objValue, srcValue, key, object, source, stack);\n          }\n          if (!(result === undefined\n                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n                : result\n              )) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.isNative` without bad shim checks.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     */\n    function baseIsNative(value) {\n      if (!isObject(value) || isMasked(value)) {\n        return false;\n      }\n      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n      return pattern.test(toSource(value));\n    }\n\n    /**\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     */\n    function baseIsRegExp(value) {\n      return isObjectLike(value) && baseGetTag(value) == regexpTag;\n    }\n\n    /**\n     * The base implementation of `_.isSet` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     */\n    function baseIsSet(value) {\n      return isObjectLike(value) && getTag(value) == setTag;\n    }\n\n    /**\n     * The base implementation of `_.isTypedArray` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     */\n    function baseIsTypedArray(value) {\n      return isObjectLike(value) &&\n        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n    }\n\n    /**\n     * The base implementation of `_.iteratee`.\n     *\n     * @private\n     * @param {*} [value=_.identity] The value to convert to an iteratee.\n     * @returns {Function} Returns the iteratee.\n     */\n    function baseIteratee(value) {\n      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n      if (typeof value == 'function') {\n        return value;\n      }\n      if (value == null) {\n        return identity;\n      }\n      if (typeof value == 'object') {\n        return isArray(value)\n          ? baseMatchesProperty(value[0], value[1])\n          : baseMatches(value);\n      }\n      return property(value);\n    }\n\n    /**\n     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeys(object) {\n      if (!isPrototype(object)) {\n        return nativeKeys(object);\n      }\n      var result = [];\n      for (var key in Object(object)) {\n        if (hasOwnProperty.call(object, key) && key != 'constructor') {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeysIn(object) {\n      if (!isObject(object)) {\n        return nativeKeysIn(object);\n      }\n      var isProto = isPrototype(object),\n          result = [];\n\n      for (var key in object) {\n        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.lt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     */\n    function baseLt(value, other) {\n      return value < other;\n    }\n\n    /**\n     * The base implementation of `_.map` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.matches` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n      if (matchData.length == 1 && matchData[0][2]) {\n        return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n      }\n      return function(object) {\n        return object === source || baseIsMatch(object, source, matchData);\n      };\n    }\n\n    /**\n     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n     *\n     * @private\n     * @param {string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatchesProperty(path, srcValue) {\n      if (isKey(path) && isStrictComparable(srcValue)) {\n        return matchesStrictComparable(toKey(path), srcValue);\n      }\n      return function(object) {\n        var objValue = get(object, path);\n        return (objValue === undefined && objValue === srcValue)\n          ? hasIn(object, path)\n          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n      };\n    }\n\n    /**\n     * The base implementation of `_.merge` without support for multiple sources.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} [customizer] The function to customize merged values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMerge(object, source, srcIndex, customizer, stack) {\n      if (object === source) {\n        return;\n      }\n      baseFor(source, function(srcValue, key) {\n        stack || (stack = new Stack);\n        if (isObject(srcValue)) {\n          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n        }\n        else {\n          var newValue = customizer\n            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n            : undefined;\n\n          if (newValue === undefined) {\n            newValue = srcValue;\n          }\n          assignMergeValue(object, key, newValue);\n        }\n      }, keysIn);\n    }\n\n    /**\n     * A specialized version of `baseMerge` for arrays and objects which performs\n     * deep merges and tracks traversed objects enabling objects with circular\n     * references to be merged.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {string} key The key of the value to merge.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} mergeFunc The function to merge values.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n      var objValue = safeGet(object, key),\n          srcValue = safeGet(source, key),\n          stacked = stack.get(srcValue);\n\n      if (stacked) {\n        assignMergeValue(object, key, stacked);\n        return;\n      }\n      var newValue = customizer\n        ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      var isCommon = newValue === undefined;\n\n      if (isCommon) {\n        var isArr = isArray(srcValue),\n            isBuff = !isArr && isBuffer(srcValue),\n            isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n        newValue = srcValue;\n        if (isArr || isBuff || isTyped) {\n          if (isArray(objValue)) {\n            newValue = objValue;\n          }\n          else if (isArrayLikeObject(objValue)) {\n            newValue = copyArray(objValue);\n          }\n          else if (isBuff) {\n            isCommon = false;\n            newValue = cloneBuffer(srcValue, true);\n          }\n          else if (isTyped) {\n            isCommon = false;\n            newValue = cloneTypedArray(srcValue, true);\n          }\n          else {\n            newValue = [];\n          }\n        }\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          newValue = objValue;\n          if (isArguments(objValue)) {\n            newValue = toPlainObject(objValue);\n          }\n          else if (!isObject(objValue) || isFunction(objValue)) {\n            newValue = initCloneObject(srcValue);\n          }\n        }\n        else {\n          isCommon = false;\n        }\n      }\n      if (isCommon) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, newValue);\n        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n        stack['delete'](srcValue);\n      }\n      assignMergeValue(object, key, newValue);\n    }\n\n    /**\n     * The base implementation of `_.nth` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {number} n The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     */\n    function baseNth(array, n) {\n      var length = array.length;\n      if (!length) {\n        return;\n      }\n      n += n < 0 ? length : 0;\n      return isIndex(n, length) ? array[n] : undefined;\n    }\n\n    /**\n     * The base implementation of `_.orderBy` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n     * @param {string[]} orders The sort orders of `iteratees`.\n     * @returns {Array} Returns the new sorted array.\n     */\n    function baseOrderBy(collection, iteratees, orders) {\n      if (iteratees.length) {\n        iteratees = arrayMap(iteratees, function(iteratee) {\n          if (isArray(iteratee)) {\n            return function(value) {\n              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n            };\n          }\n          return iteratee;\n        });\n      } else {\n        iteratees = [identity];\n      }\n\n      var index = -1;\n      iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n      var result = baseMap(collection, function(value, key, collection) {\n        var criteria = arrayMap(iteratees, function(iteratee) {\n          return iteratee(value);\n        });\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\n      });\n\n      return baseSortBy(result, function(object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n\n    /**\n     * The base implementation of `_.pick` without support for individual\n     * property identifiers.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Object} Returns the new object.\n     */\n    function basePick(object, paths) {\n      return basePickBy(object, paths, function(value, path) {\n        return hasIn(object, path);\n      });\n    }\n\n    /**\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @param {Function} predicate The function invoked per property.\n     * @returns {Object} Returns the new object.\n     */\n    function basePickBy(object, paths, predicate) {\n      var index = -1,\n          length = paths.length,\n          result = {};\n\n      while (++index < length) {\n        var path = paths[index],\n            value = baseGet(object, path);\n\n        if (predicate(value, path)) {\n          baseSet(result, castPath(path, object), value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseProperty` which supports deep paths.\n     *\n     * @private\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     */\n    function basePropertyDeep(path) {\n      return function(object) {\n        return baseGet(object, path);\n      };\n    }\n\n    /**\n     * The base implementation of `_.pullAllBy` without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAll(array, values, iteratee, comparator) {\n      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n          index = -1,\n          length = values.length,\n          seen = array;\n\n      if (array === values) {\n        values = copyArray(values);\n      }\n      if (iteratee) {\n        seen = arrayMap(array, baseUnary(iteratee));\n      }\n      while (++index < length) {\n        var fromIndex = 0,\n            value = values[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n          if (seen !== array) {\n            splice.call(seen, fromIndex, 1);\n          }\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.pullAt` without support for individual\n     * indexes or capturing the removed elements.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {number[]} indexes The indexes of elements to remove.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0,\n          lastIndex = length - 1;\n\n      while (length--) {\n        var index = indexes[length];\n        if (length == lastIndex || index !== previous) {\n          var previous = index;\n          if (isIndex(index)) {\n            splice.call(array, index, 1);\n          } else {\n            baseUnset(array, index);\n          }\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.random` without support for returning\n     * floating-point numbers.\n     *\n     * @private\n     * @param {number} lower The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the random number.\n     */\n    function baseRandom(lower, upper) {\n      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n    }\n\n    /**\n     * The base implementation of `_.range` and `_.rangeRight` which doesn't\n     * coerce arguments.\n     *\n     * @private\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} step The value to increment or decrement by.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the range of numbers.\n     */\n    function baseRange(start, end, step, fromRight) {\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (length--) {\n        result[fromRight ? length : ++index] = start;\n        start += step;\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.repeat` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {string} string The string to repeat.\n     * @param {number} n The number of times to repeat the string.\n     * @returns {string} Returns the repeated string.\n     */\n    function baseRepeat(string, n) {\n      var result = '';\n      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n        return result;\n      }\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n      do {\n        if (n % 2) {\n          result += string;\n        }\n        n = nativeFloor(n / 2);\n        if (n) {\n          string += string;\n        }\n      } while (n);\n\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     */\n    function baseRest(func, start) {\n      return setToString(overRest(func, start, identity), func + '');\n    }\n\n    /**\n     * The base implementation of `_.sample`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     */\n    function baseSample(collection) {\n      return arraySample(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.sampleSize` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function baseSampleSize(collection, n) {\n      var array = values(collection);\n      return shuffleSelf(array, baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * The base implementation of `_.set`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseSet(object, path, value, customizer) {\n      if (!isObject(object)) {\n        return object;\n      }\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = toKey(path[index]),\n            newValue = value;\n\n        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n          return object;\n        }\n\n        if (index != lastIndex) {\n          var objValue = nested[key];\n          newValue = customizer ? customizer(objValue, key, nested) : undefined;\n          if (newValue === undefined) {\n            newValue = isObject(objValue)\n              ? objValue\n              : (isIndex(path[index + 1]) ? [] : {});\n          }\n        }\n        assignValue(nested, key, newValue);\n        nested = nested[key];\n      }\n      return object;\n    }\n\n    /**\n     * The base implementation of `setData` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\n\n    /**\n     * The base implementation of `setToString` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetToString = !defineProperty ? identity : function(func, string) {\n      return defineProperty(func, 'toString', {\n        'configurable': true,\n        'enumerable': false,\n        'value': constant(string),\n        'writable': true\n      });\n    };\n\n    /**\n     * The base implementation of `_.shuffle`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function baseShuffle(collection) {\n      return shuffleSelf(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.slice` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = end > length ? length : end;\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : ((end - start) >>> 0);\n      start >>>= 0;\n\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.some` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n\n    /**\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n     * performs a binary search of `array` to determine the index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndex(array, value, retHighest) {\n      var low = 0,\n          high = array == null ? low : array.length;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if (computed !== null && !isSymbol(computed) &&\n              (retHighest ? (computed <= value) : (computed < value))) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return baseSortedIndexBy(array, value, identity, retHighest);\n    }\n\n    /**\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n     * which invokes `iteratee` for `value` and each element of `array` to compute\n     * their sort ranking. The iteratee is invoked with one argument; (value).\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} iteratee The iteratee invoked per element.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndexBy(array, value, iteratee, retHighest) {\n      var low = 0,\n          high = array == null ? 0 : array.length;\n      if (high === 0) {\n        return 0;\n      }\n\n      value = iteratee(value);\n      var valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsSymbol = isSymbol(value),\n          valIsUndefined = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            othIsDefined = computed !== undefined,\n            othIsNull = computed === null,\n            othIsReflexive = computed === computed,\n            othIsSymbol = isSymbol(computed);\n\n        if (valIsNaN) {\n          var setLow = retHighest || othIsReflexive;\n        } else if (valIsUndefined) {\n          setLow = othIsReflexive && (retHighest || othIsDefined);\n        } else if (valIsNull) {\n          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n        } else if (valIsSymbol) {\n          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n        } else if (othIsNull || othIsSymbol) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n\n    /**\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n     * support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseSortedUniq(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        if (!index || !eq(computed, seen)) {\n          var seen = computed;\n          result[resIndex++] = value === 0 ? 0 : value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.toNumber` which doesn't ensure correct\n     * conversions of binary, hexadecimal, or octal string values.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     */\n    function baseToNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      return +value;\n    }\n\n    /**\n     * The base implementation of `_.toString` which doesn't convert nullish\n     * values to empty strings.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {string} Returns the string.\n     */\n    function baseToString(value) {\n      // Exit early for strings to avoid a performance hit in some environments.\n      if (typeof value == 'string') {\n        return value;\n      }\n      if (isArray(value)) {\n        // Recursively convert values (susceptible to call stack limits).\n        return arrayMap(value, baseToString) + '';\n      }\n      if (isSymbol(value)) {\n        return symbolToString ? symbolToString.call(value) : '';\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseUniq(array, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          length = array.length,\n          isCommon = true,\n          result = [],\n          seen = result;\n\n      if (comparator) {\n        isCommon = false;\n        includes = arrayIncludesWith;\n      }\n      else if (length >= LARGE_ARRAY_SIZE) {\n        var set = iteratee ? null : createSet(array);\n        if (set) {\n          return setToArray(set);\n        }\n        isCommon = false;\n        includes = cacheHas;\n        seen = new SetCache;\n      }\n      else {\n        seen = iteratee ? [] : result;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var seenIndex = seen.length;\n          while (seenIndex--) {\n            if (seen[seenIndex] === computed) {\n              continue outer;\n            }\n          }\n          if (iteratee) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n        else if (!includes(seen, computed, comparator)) {\n          if (seen !== result) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.unset`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The property path to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     */\n    function baseUnset(object, path) {\n      path = castPath(path, object);\n\n      // Prevent prototype pollution:\n      // https://github.com/lodash/lodash/security/advisories/GHSA-xxjr-mmjv-4gpg\n      // https://github.com/lodash/lodash/security/advisories/GHSA-f23m-r3pf-42rh\n      var index = -1,\n          length = path.length;\n\n      if (!length) {\n        return true;\n      }\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n\n        // Always block \"__proto__\" anywhere in the path if it's not expected\n        if (key === '__proto__' && !hasOwnProperty.call(object, '__proto__')) {\n          return false;\n        }\n\n        // Block constructor/prototype as non-terminal traversal keys to prevent\n        // escaping the object graph into built-in constructors and prototypes.\n        if ((key === 'constructor' || key === 'prototype') && index < length - 1) {\n          return false;\n        }\n      }\n\n      var obj = parent(object, path);\n      return obj == null || delete obj[toKey(last(path))];\n    }\n\n    /**\n     * The base implementation of `_.update`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to update.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseUpdate(object, path, updater, customizer) {\n      return baseSet(object, path, updater(baseGet(object, path)), customizer);\n    }\n\n    /**\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n     * without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) &&\n        predicate(array[index], index, array)) {}\n\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n\n    /**\n     * The base implementation of `wrapperValue` which returns the result of\n     * performing a sequence of actions on the unwrapped `value`, where each\n     * successive action is supplied the return value of the previous.\n     *\n     * @private\n     * @param {*} value The unwrapped value.\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      return arrayReduce(actions, function(result, action) {\n        return action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }, result);\n    }\n\n    /**\n     * The base implementation of methods like `_.xor`, without support for\n     * iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of values.\n     */\n    function baseXor(arrays, iteratee, comparator) {\n      var length = arrays.length;\n      if (length < 2) {\n        return length ? baseUniq(arrays[0]) : [];\n      }\n      var index = -1,\n          result = Array(length);\n\n      while (++index < length) {\n        var array = arrays[index],\n            othIndex = -1;\n\n        while (++othIndex < length) {\n          if (othIndex != index) {\n            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n          }\n        }\n      }\n      return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n    }\n\n    /**\n     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n     *\n     * @private\n     * @param {Array} props The property identifiers.\n     * @param {Array} values The property values.\n     * @param {Function} assignFunc The function to assign values.\n     * @returns {Object} Returns the new object.\n     */\n    function baseZipObject(props, values, assignFunc) {\n      var index = -1,\n          length = props.length,\n          valsLength = values.length,\n          result = {};\n\n      while (++index < length) {\n        var value = index < valsLength ? values[index] : undefined;\n        assignFunc(result, props[index], value);\n      }\n      return result;\n    }\n\n    /**\n     * Casts `value` to an empty array if it's not an array like object.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Array|Object} Returns the cast array-like object.\n     */\n    function castArrayLikeObject(value) {\n      return isArrayLikeObject(value) ? value : [];\n    }\n\n    /**\n     * Casts `value` to `identity` if it's not a function.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Function} Returns cast function.\n     */\n    function castFunction(value) {\n      return typeof value == 'function' ? value : identity;\n    }\n\n    /**\n     * Casts `value` to a path array if it's not one.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {Array} Returns the cast property path array.\n     */\n    function castPath(value, object) {\n      if (isArray(value)) {\n        return value;\n      }\n      return isKey(value, object) ? [value] : stringToPath(toString(value));\n    }\n\n    /**\n     * A `baseRest` alias which can be replaced with `identity` by module\n     * replacement plugins.\n     *\n     * @private\n     * @type {Function}\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    var castRest = baseRest;\n\n    /**\n     * Casts `array` to a slice if it's needed.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {number} start The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the cast slice.\n     */\n    function castSlice(array, start, end) {\n      var length = array.length;\n      end = end === undefined ? length : end;\n      return (!start && end >= length) ? array : baseSlice(array, start, end);\n    }\n\n    /**\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n     *\n     * @private\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\n     */\n    var clearTimeout = ctxClearTimeout || function(id) {\n      return root.clearTimeout(id);\n    };\n\n    /**\n     * Creates a clone of  `buffer`.\n     *\n     * @private\n     * @param {Buffer} buffer The buffer to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Buffer} Returns the cloned buffer.\n     */\n    function cloneBuffer(buffer, isDeep) {\n      if (isDeep) {\n        return buffer.slice();\n      }\n      var length = buffer.length,\n          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n      buffer.copy(result);\n      return result;\n    }\n\n    /**\n     * Creates a clone of `arrayBuffer`.\n     *\n     * @private\n     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\n     */\n    function cloneArrayBuffer(arrayBuffer) {\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n      new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n      return result;\n    }\n\n    /**\n     * Creates a clone of `dataView`.\n     *\n     * @private\n     * @param {Object} dataView The data view to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned data view.\n     */\n    function cloneDataView(dataView, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n    }\n\n    /**\n     * Creates a clone of `regexp`.\n     *\n     * @private\n     * @param {Object} regexp The regexp to clone.\n     * @returns {Object} Returns the cloned regexp.\n     */\n    function cloneRegExp(regexp) {\n      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n      result.lastIndex = regexp.lastIndex;\n      return result;\n    }\n\n    /**\n     * Creates a clone of the `symbol` object.\n     *\n     * @private\n     * @param {Object} symbol The symbol object to clone.\n     * @returns {Object} Returns the cloned symbol object.\n     */\n    function cloneSymbol(symbol) {\n      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n    }\n\n    /**\n     * Creates a clone of `typedArray`.\n     *\n     * @private\n     * @param {Object} typedArray The typed array to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned typed array.\n     */\n    function cloneTypedArray(typedArray, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n    }\n\n    /**\n     * Compares values to sort them in ascending order.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {number} Returns the sort order indicator for `value`.\n     */\n    function compareAscending(value, other) {\n      if (value !== other) {\n        var valIsDefined = value !== undefined,\n            valIsNull = value === null,\n            valIsReflexive = value === value,\n            valIsSymbol = isSymbol(value);\n\n        var othIsDefined = other !== undefined,\n            othIsNull = other === null,\n            othIsReflexive = other === other,\n            othIsSymbol = isSymbol(other);\n\n        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n            (valIsNull && othIsDefined && othIsReflexive) ||\n            (!valIsDefined && othIsReflexive) ||\n            !valIsReflexive) {\n          return 1;\n        }\n        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n            (othIsNull && valIsDefined && valIsReflexive) ||\n            (!othIsDefined && valIsReflexive) ||\n            !othIsReflexive) {\n          return -1;\n        }\n      }\n      return 0;\n    }\n\n    /**\n     * Used by `_.orderBy` to compare multiple properties of a value to another\n     * and stable sort them.\n     *\n     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n     * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n     * of corresponding values.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {boolean[]|string[]} orders The order to sort by for each property.\n     * @returns {number} Returns the sort order indicator for `object`.\n     */\n    function compareMultiple(object, other, orders) {\n      var index = -1,\n          objCriteria = object.criteria,\n          othCriteria = other.criteria,\n          length = objCriteria.length,\n          ordersLength = orders.length;\n\n      while (++index < length) {\n        var result = compareAscending(objCriteria[index], othCriteria[index]);\n        if (result) {\n          if (index >= ordersLength) {\n            return result;\n          }\n          var order = orders[index];\n          return result * (order == 'desc' ? -1 : 1);\n        }\n      }\n      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n      // that causes it, under certain circumstances, to provide the same value for\n      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n      // for more details.\n      //\n      // This also ensures a stable sort in V8 and other engines.\n      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n      return object.index - other.index;\n    }\n\n    /**\n     * Creates an array that is the composition of partially applied arguments,\n     * placeholders, and provided arguments into a single array of arguments.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to prepend to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgs(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersLength = holders.length,\n          leftIndex = -1,\n          leftLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(leftLength + rangeLength),\n          isUncurried = !isCurried;\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n      while (++argsIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[holders[argsIndex]] = args[argsIndex];\n        }\n      }\n      while (rangeLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n      return result;\n    }\n\n    /**\n     * This function is like `composeArgs` except that the arguments composition\n     * is tailored for `_.partialRight`.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to append to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgsRight(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersIndex = -1,\n          holdersLength = holders.length,\n          rightIndex = -1,\n          rightLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(rangeLength + rightLength),\n          isUncurried = !isCurried;\n\n      while (++argsIndex < rangeLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n      var offset = argsIndex;\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n      while (++holdersIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[offset + holders[holdersIndex]] = args[argsIndex++];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Copies the values of `source` to `array`.\n     *\n     * @private\n     * @param {Array} source The array to copy values from.\n     * @param {Array} [array=[]] The array to copy values to.\n     * @returns {Array} Returns `array`.\n     */\n    function copyArray(source, array) {\n      var index = -1,\n          length = source.length;\n\n      array || (array = Array(length));\n      while (++index < length) {\n        array[index] = source[index];\n      }\n      return array;\n    }\n\n    /**\n     * Copies properties of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy properties from.\n     * @param {Array} props The property identifiers to copy.\n     * @param {Object} [object={}] The object to copy properties to.\n     * @param {Function} [customizer] The function to customize copied values.\n     * @returns {Object} Returns `object`.\n     */\n    function copyObject(source, props, object, customizer) {\n      var isNew = !object;\n      object || (object = {});\n\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n\n        var newValue = customizer\n          ? customizer(object[key], source[key], key, object, source)\n          : undefined;\n\n        if (newValue === undefined) {\n          newValue = source[key];\n        }\n        if (isNew) {\n          baseAssignValue(object, key, newValue);\n        } else {\n          assignValue(object, key, newValue);\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Copies own symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbols(source, object) {\n      return copyObject(source, getSymbols(source), object);\n    }\n\n    /**\n     * Copies own and inherited symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbolsIn(source, object) {\n      return copyObject(source, getSymbolsIn(source), object);\n    }\n\n    /**\n     * Creates a function like `_.groupBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} [initializer] The accumulator object initializer.\n     * @returns {Function} Returns the new aggregator function.\n     */\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee) {\n        var func = isArray(collection) ? arrayAggregator : baseAggregator,\n            accumulator = initializer ? initializer() : {};\n\n        return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n      };\n    }\n\n    /**\n     * Creates a function like `_.assign`.\n     *\n     * @private\n     * @param {Function} assigner The function to assign values.\n     * @returns {Function} Returns the new assigner function.\n     */\n    function createAssigner(assigner) {\n      return baseRest(function(object, sources) {\n        var index = -1,\n            length = sources.length,\n            customizer = length > 1 ? sources[length - 1] : undefined,\n            guard = length > 2 ? sources[2] : undefined;\n\n        customizer = (assigner.length > 3 && typeof customizer == 'function')\n          ? (length--, customizer)\n          : undefined;\n\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n        object = Object(object);\n        while (++index < length) {\n          var source = sources[index];\n          if (source) {\n            assigner(object, source, index, customizer);\n          }\n        }\n        return object;\n      });\n    }\n\n    /**\n     * Creates a `baseEach` or `baseEachRight` function.\n     *\n     * @private\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseEach(eachFunc, fromRight) {\n      return function(collection, iteratee) {\n        if (collection == null) {\n          return collection;\n        }\n        if (!isArrayLike(collection)) {\n          return eachFunc(collection, iteratee);\n        }\n        var length = collection.length,\n            index = fromRight ? length : -1,\n            iterable = Object(collection);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n        return collection;\n      };\n    }\n\n    /**\n     * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseFor(fromRight) {\n      return function(object, iteratee, keysFunc) {\n        var index = -1,\n            iterable = Object(object),\n            props = keysFunc(object),\n            length = props.length;\n\n        while (length--) {\n          var key = props[fromRight ? length : ++index];\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n        return object;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the optional `this`\n     * binding of `thisArg`.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createBind(func, bitmask, thisArg) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, arguments);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.lowerFirst`.\n     *\n     * @private\n     * @param {string} methodName The name of the `String` case method to use.\n     * @returns {Function} Returns the new case function.\n     */\n    function createCaseFirst(methodName) {\n      return function(string) {\n        string = toString(string);\n\n        var strSymbols = hasUnicode(string)\n          ? stringToArray(string)\n          : undefined;\n\n        var chr = strSymbols\n          ? strSymbols[0]\n          : string.charAt(0);\n\n        var trailing = strSymbols\n          ? castSlice(strSymbols, 1).join('')\n          : string.slice(1);\n\n        return chr[methodName]() + trailing;\n      };\n    }\n\n    /**\n     * Creates a function like `_.camelCase`.\n     *\n     * @private\n     * @param {Function} callback The function to combine each word.\n     * @returns {Function} Returns the new compounder function.\n     */\n    function createCompounder(callback) {\n      return function(string) {\n        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n      };\n    }\n\n    /**\n     * Creates a function that produces an instance of `Ctor` regardless of\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n     *\n     * @private\n     * @param {Function} Ctor The constructor to wrap.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCtor(Ctor) {\n      return function() {\n        // Use a `switch` statement to work with class constructors. See\n        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n        // for more details.\n        var args = arguments;\n        switch (args.length) {\n          case 0: return new Ctor;\n          case 1: return new Ctor(args[0]);\n          case 2: return new Ctor(args[0], args[1]);\n          case 3: return new Ctor(args[0], args[1], args[2]);\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args);\n\n        // Mimic the constructor's `return` behavior.\n        // See https://es5.github.io/#x13.2.2 for more details.\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to enable currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {number} arity The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCurry(func, bitmask, arity) {\n      var Ctor = createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length,\n            placeholder = getHolder(wrapper);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n          ? []\n          : replaceHolders(args, placeholder);\n\n        length -= holders.length;\n        if (length < arity) {\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, undefined,\n            args, holders, undefined, undefined, arity - length);\n        }\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return apply(fn, this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.find` or `_.findLast` function.\n     *\n     * @private\n     * @param {Function} findIndexFunc The function to find the collection index.\n     * @returns {Function} Returns the new find function.\n     */\n    function createFind(findIndexFunc) {\n      return function(collection, predicate, fromIndex) {\n        var iterable = Object(collection);\n        if (!isArrayLike(collection)) {\n          var iteratee = getIteratee(predicate, 3);\n          collection = keys(collection);\n          predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n        }\n        var index = findIndexFunc(collection, predicate, fromIndex);\n        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n      };\n    }\n\n    /**\n     * Creates a `_.flow` or `_.flowRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new flow function.\n     */\n    function createFlow(fromRight) {\n      return flatRest(function(funcs) {\n        var length = funcs.length,\n            index = length,\n            prereq = LodashWrapper.prototype.thru;\n\n        if (fromRight) {\n          funcs.reverse();\n        }\n        while (index--) {\n          var func = funcs[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n            var wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? index : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) &&\n                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n                !data[4].length && data[9] == 1\n              ) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func))\n              ? wrapper[funcName]()\n              : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value)) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      });\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with optional `this`\n     * binding of `thisArg`, partial application, and currying.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [partialsRight] The arguments to append to those provided\n     *  to the new function.\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & WRAP_ARY_FLAG,\n          isBind = bitmask & WRAP_BIND_FLAG,\n          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n          isFlip = bitmask & WRAP_FLIP_FLAG,\n          Ctor = isBindKey ? undefined : createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length;\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        if (isCurried) {\n          var placeholder = getHolder(wrapper),\n              holdersCount = countHolders(args, placeholder);\n        }\n        if (partials) {\n          args = composeArgs(args, partials, holders, isCurried);\n        }\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n        }\n        length -= holdersCount;\n        if (isCurried && length < arity) {\n          var newHolders = replaceHolders(args, placeholder);\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n            args, newHolders, argPos, ary, arity - length\n          );\n        }\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n\n        length = args.length;\n        if (argPos) {\n          args = reorder(args, argPos);\n        } else if (isFlip && length > 1) {\n          args.reverse();\n        }\n        if (isAry && ary < length) {\n          args.length = ary;\n        }\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtor(fn);\n        }\n        return fn.apply(thisBinding, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.invertBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} toIteratee The function to resolve iteratees.\n     * @returns {Function} Returns the new inverter function.\n     */\n    function createInverter(setter, toIteratee) {\n      return function(object, iteratee) {\n        return baseInverter(object, setter, toIteratee(iteratee), {});\n      };\n    }\n\n    /**\n     * Creates a function that performs a mathematical operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\n     * @returns {Function} Returns the new mathematical operation function.\n     */\n    function createMathOperation(operator, defaultValue) {\n      return function(value, other) {\n        var result;\n        if (value === undefined && other === undefined) {\n          return defaultValue;\n        }\n        if (value !== undefined) {\n          result = value;\n        }\n        if (other !== undefined) {\n          if (result === undefined) {\n            return other;\n          }\n          if (typeof value == 'string' || typeof other == 'string') {\n            value = baseToString(value);\n            other = baseToString(other);\n          } else {\n            value = baseToNumber(value);\n            other = baseToNumber(other);\n          }\n          result = operator(value, other);\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function like `_.over`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over iteratees.\n     * @returns {Function} Returns the new over function.\n     */\n    function createOver(arrayFunc) {\n      return flatRest(function(iteratees) {\n        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n        return baseRest(function(args) {\n          var thisArg = this;\n          return arrayFunc(iteratees, function(iteratee) {\n            return apply(iteratee, thisArg, args);\n          });\n        });\n      });\n    }\n\n    /**\n     * Creates the padding for `string` based on `length`. The `chars` string\n     * is truncated if the number of characters exceeds `length`.\n     *\n     * @private\n     * @param {number} length The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padding for `string`.\n     */\n    function createPadding(length, chars) {\n      chars = chars === undefined ? ' ' : baseToString(chars);\n\n      var charsLength = chars.length;\n      if (charsLength < 2) {\n        return charsLength ? baseRepeat(chars, length) : chars;\n      }\n      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n      return hasUnicode(chars)\n        ? castSlice(stringToArray(result), 0, length).join('')\n        : result.slice(0, length);\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the `this` binding\n     * of `thisArg` and `partials` prepended to the arguments it receives.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {Array} partials The arguments to prepend to those provided to\n     *  the new function.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createPartial(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength),\n            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n        return apply(fn, isBind ? thisArg : this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.range` or `_.rangeRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new range function.\n     */\n    function createRange(fromRight) {\n      return function(start, end, step) {\n        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n          end = step = undefined;\n        }\n        // Ensure the sign of `-0` is preserved.\n        start = toFinite(start);\n        if (end === undefined) {\n          end = start;\n          start = 0;\n        } else {\n          end = toFinite(end);\n        }\n        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n        return baseRange(start, end, step, fromRight);\n      };\n    }\n\n    /**\n     * Creates a function that performs a relational operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @returns {Function} Returns the new relational operation function.\n     */\n    function createRelationalOperation(operator) {\n      return function(value, other) {\n        if (!(typeof value == 'string' && typeof other == 'string')) {\n          value = toNumber(value);\n          other = toNumber(other);\n        }\n        return operator(value, other);\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to continue currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {Function} wrapFunc The function to create the `func` wrapper.\n     * @param {*} placeholder The placeholder value.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n      var isCurry = bitmask & WRAP_CURRY_FLAG,\n          newHolders = isCurry ? holders : undefined,\n          newHoldersRight = isCurry ? undefined : holders,\n          newPartials = isCurry ? partials : undefined,\n          newPartialsRight = isCurry ? undefined : partials;\n\n      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n      }\n      var newData = [\n        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n        newHoldersRight, argPos, ary, arity\n      ];\n\n      var result = wrapFunc.apply(undefined, newData);\n      if (isLaziable(func)) {\n        setData(result, newData);\n      }\n      result.placeholder = placeholder;\n      return setWrapToString(result, func, bitmask);\n    }\n\n    /**\n     * Creates a function like `_.round`.\n     *\n     * @private\n     * @param {string} methodName The name of the `Math` method to use when rounding.\n     * @returns {Function} Returns the new round function.\n     */\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        number = toNumber(number);\n        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n        if (precision && nativeIsFinite(number)) {\n          // Shift with exponential notation to avoid floating-point issues.\n          // See [MDN](https://mdn.io/round#Examples) for more details.\n          var pair = (toString(number) + 'e').split('e'),\n              value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n          pair = (toString(value) + 'e').split('e');\n          return +(pair[0] + 'e' + (+pair[1] - precision));\n        }\n        return func(number);\n      };\n    }\n\n    /**\n     * Creates a set object of `values`.\n     *\n     * @private\n     * @param {Array} values The values to add to the set.\n     * @returns {Object} Returns the new set.\n     */\n    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n      return new Set(values);\n    };\n\n    /**\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\n     *\n     * @private\n     * @param {Function} keysFunc The function to get the keys of a given object.\n     * @returns {Function} Returns the new pairs function.\n     */\n    function createToPairs(keysFunc) {\n      return function(object) {\n        var tag = getTag(object);\n        if (tag == mapTag) {\n          return mapToArray(object);\n        }\n        if (tag == setTag) {\n          return setToPairs(object);\n        }\n        return baseToPairs(object, keysFunc(object));\n      };\n    }\n\n    /**\n     * Creates a function that either curries or invokes `func` with optional\n     * `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags.\n     *    1 - `_.bind`\n     *    2 - `_.bindKey`\n     *    4 - `_.curry` or `_.curryRight` of a bound function\n     *    8 - `_.curry`\n     *   16 - `_.curryRight`\n     *   32 - `_.partial`\n     *   64 - `_.partialRight`\n     *  128 - `_.rearg`\n     *  256 - `_.ary`\n     *  512 - `_.flip`\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to be partially applied.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = partials ? partials.length : 0;\n      if (!length) {\n        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n      arity = arity === undefined ? arity : toInteger(arity);\n      length -= holders ? holders.length : 0;\n\n      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func);\n\n      var newData = [\n        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n        argPos, ary, arity\n      ];\n\n      if (data) {\n        mergeData(newData, data);\n      }\n      func = newData[0];\n      bitmask = newData[1];\n      thisArg = newData[2];\n      partials = newData[3];\n      holders = newData[4];\n      arity = newData[9] = newData[9] === undefined\n        ? (isBindKey ? 0 : func.length)\n        : nativeMax(newData[9] - length, 0);\n\n      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n      }\n      if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n        var result = createBind(func, bitmask, thisArg);\n      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n        result = createCurry(func, bitmask, arity);\n      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n        result = createPartial(func, bitmask, thisArg, partials);\n      } else {\n        result = createHybrid.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setWrapToString(setter(result, newData), func, bitmask);\n    }\n\n    /**\n     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n     * of source objects to the destination object for all destination properties\n     * that resolve to `undefined`.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to assign.\n     * @param {Object} object The parent object of `objValue`.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsAssignIn(objValue, srcValue, key, object) {\n      if (objValue === undefined ||\n          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        return srcValue;\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n     * objects into destination objects that are passed thru.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to merge.\n     * @param {Object} object The parent object of `objValue`.\n     * @param {Object} source The parent object of `srcValue`.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n      if (isObject(objValue) && isObject(srcValue)) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, objValue);\n        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n        stack['delete'](srcValue);\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n     * objects.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {string} key The key of the property to inspect.\n     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n     */\n    function customOmitClone(value) {\n      return isPlainObject(value) ? undefined : value;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Array} array The array to compare.\n     * @param {Array} other The other array to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `array` and `other` objects.\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n     */\n    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n        return false;\n      }\n      // Check that cyclic values are equal.\n      var arrStacked = stack.get(array);\n      var othStacked = stack.get(other);\n      if (arrStacked && othStacked) {\n        return arrStacked == other && othStacked == array;\n      }\n      var index = -1,\n          result = true,\n          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n      stack.set(array, other);\n      stack.set(other, array);\n\n      // Ignore non-index properties.\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, arrValue, index, other, array, stack)\n            : customizer(arrValue, othValue, index, array, other, stack);\n        }\n        if (compared !== undefined) {\n          if (compared) {\n            continue;\n          }\n          result = false;\n          break;\n        }\n        // Recursively compare arrays (susceptible to call stack limits).\n        if (seen) {\n          if (!arraySome(other, function(othValue, othIndex) {\n                if (!cacheHas(seen, othIndex) &&\n                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n                  return seen.push(othIndex);\n                }\n              })) {\n            result = false;\n            break;\n          }\n        } else if (!(\n              arrValue === othValue ||\n                equalFunc(arrValue, othValue, bitmask, customizer, stack)\n            )) {\n          result = false;\n          break;\n        }\n      }\n      stack['delete'](array);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\n     * the same `toStringTag`.\n     *\n     * **Note:** This function only supports comparing values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {string} tag The `toStringTag` of the objects to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n      switch (tag) {\n        case dataViewTag:\n          if ((object.byteLength != other.byteLength) ||\n              (object.byteOffset != other.byteOffset)) {\n            return false;\n          }\n          object = object.buffer;\n          other = other.buffer;\n\n        case arrayBufferTag:\n          if ((object.byteLength != other.byteLength) ||\n              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n            return false;\n          }\n          return true;\n\n        case boolTag:\n        case dateTag:\n        case numberTag:\n          // Coerce booleans to `1` or `0` and dates to milliseconds.\n          // Invalid dates are coerced to `NaN`.\n          return eq(+object, +other);\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case regexpTag:\n        case stringTag:\n          // Coerce regexes to strings and treat strings, primitives and objects,\n          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n          // for more details.\n          return object == (other + '');\n\n        case mapTag:\n          var convert = mapToArray;\n\n        case setTag:\n          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n          convert || (convert = setToArray);\n\n          if (object.size != other.size && !isPartial) {\n            return false;\n          }\n          // Assume cyclic values are equal.\n          var stacked = stack.get(object);\n          if (stacked) {\n            return stacked == other;\n          }\n          bitmask |= COMPARE_UNORDERED_FLAG;\n\n          // Recursively compare objects (susceptible to call stack limits).\n          stack.set(object, other);\n          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n          stack['delete'](object);\n          return result;\n\n        case symbolTag:\n          if (symbolValueOf) {\n            return symbolValueOf.call(object) == symbolValueOf.call(other);\n          }\n      }\n      return false;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for objects with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          objProps = getAllKeys(object),\n          objLength = objProps.length,\n          othProps = getAllKeys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isPartial) {\n        return false;\n      }\n      var index = objLength;\n      while (index--) {\n        var key = objProps[index];\n        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      }\n      // Check that cyclic values are equal.\n      var objStacked = stack.get(object);\n      var othStacked = stack.get(other);\n      if (objStacked && othStacked) {\n        return objStacked == other && othStacked == object;\n      }\n      var result = true;\n      stack.set(object, other);\n      stack.set(other, object);\n\n      var skipCtor = isPartial;\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, objValue, key, other, object, stack)\n            : customizer(objValue, othValue, key, object, other, stack);\n        }\n        // Recursively compare objects (susceptible to call stack limits).\n        if (!(compared === undefined\n              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n              : compared\n            )) {\n          result = false;\n          break;\n        }\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n      if (result && !skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor;\n\n        // Non `Object` object instances with different constructors are not equal.\n        if (objCtor != othCtor &&\n            ('constructor' in object && 'constructor' in other) &&\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          result = false;\n        }\n      }\n      stack['delete'](object);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseRest` which flattens the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    function flatRest(func) {\n      return setToString(overRest(func, undefined, flatten), func + '');\n    }\n\n    /**\n     * Creates an array of own enumerable property names and symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeys(object) {\n      return baseGetAllKeys(object, keys, getSymbols);\n    }\n\n    /**\n     * Creates an array of own and inherited enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeysIn(object) {\n      return baseGetAllKeys(object, keysIn, getSymbolsIn);\n    }\n\n    /**\n     * Gets metadata for `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {*} Returns the metadata for `func`.\n     */\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n\n    /**\n     * Gets the name of `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {string} Returns the function name.\n     */\n    function getFuncName(func) {\n      var result = (func.name + ''),\n          array = realNames[result],\n          length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Gets the argument placeholder value for `func`.\n     *\n     * @private\n     * @param {Function} func The function to inspect.\n     * @returns {*} Returns the placeholder value.\n     */\n    function getHolder(func) {\n      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n      return object.placeholder;\n    }\n\n    /**\n     * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\n     * If arguments are provided, the chosen function is invoked with them and\n     * its result is returned.\n     *\n     * @private\n     * @param {*} [value] The value to convert to an iteratee.\n     * @param {number} [arity] The arity of the created iteratee.\n     * @returns {Function} Returns the chosen function or its result.\n     */\n    function getIteratee() {\n      var result = lodash.iteratee || iteratee;\n      result = result === iteratee ? baseIteratee : result;\n      return arguments.length ? result(arguments[0], arguments[1]) : result;\n    }\n\n    /**\n     * Gets the data for `map`.\n     *\n     * @private\n     * @param {Object} map The map to query.\n     * @param {string} key The reference key.\n     * @returns {*} Returns the map data.\n     */\n    function getMapData(map, key) {\n      var data = map.__data__;\n      return isKeyable(key)\n        ? data[typeof key == 'string' ? 'string' : 'hash']\n        : data.map;\n    }\n\n    /**\n     * Gets the property names, values, and compare flags of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the match data of `object`.\n     */\n    function getMatchData(object) {\n      var result = keys(object),\n          length = result.length;\n\n      while (length--) {\n        var key = result[length],\n            value = object[key];\n\n        result[length] = [key, value, isStrictComparable(value)];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the native function at `key` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the method to get.\n     * @returns {*} Returns the function if it's native, else `undefined`.\n     */\n    function getNative(object, key) {\n      var value = getValue(object, key);\n      return baseIsNative(value) ? value : undefined;\n    }\n\n    /**\n     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the raw `toStringTag`.\n     */\n    function getRawTag(value) {\n      var isOwn = hasOwnProperty.call(value, symToStringTag),\n          tag = value[symToStringTag];\n\n      try {\n        value[symToStringTag] = undefined;\n        var unmasked = true;\n      } catch (e) {}\n\n      var result = nativeObjectToString.call(value);\n      if (unmasked) {\n        if (isOwn) {\n          value[symToStringTag] = tag;\n        } else {\n          delete value[symToStringTag];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array of the own enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n      if (object == null) {\n        return [];\n      }\n      object = Object(object);\n      return arrayFilter(nativeGetSymbols(object), function(symbol) {\n        return propertyIsEnumerable.call(object, symbol);\n      });\n    };\n\n    /**\n     * Creates an array of the own and inherited enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n      var result = [];\n      while (object) {\n        arrayPush(result, getSymbols(object));\n        object = getPrototype(object);\n      }\n      return result;\n    };\n\n    /**\n     * Gets the `toStringTag` of `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    var getTag = baseGetTag;\n\n    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n        (Map && getTag(new Map) != mapTag) ||\n        (Promise && getTag(Promise.resolve()) != promiseTag) ||\n        (Set && getTag(new Set) != setTag) ||\n        (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n      getTag = function(value) {\n        var result = baseGetTag(value),\n            Ctor = result == objectTag ? value.constructor : undefined,\n            ctorString = Ctor ? toSource(Ctor) : '';\n\n        if (ctorString) {\n          switch (ctorString) {\n            case dataViewCtorString: return dataViewTag;\n            case mapCtorString: return mapTag;\n            case promiseCtorString: return promiseTag;\n            case setCtorString: return setTag;\n            case weakMapCtorString: return weakMapTag;\n          }\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\n     *\n     * @private\n     * @param {number} start The start of the view.\n     * @param {number} end The end of the view.\n     * @param {Array} transforms The transformations to apply to the view.\n     * @returns {Object} Returns an object containing the `start` and `end`\n     *  positions of the view.\n     */\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\n    }\n\n    /**\n     * Extracts wrapper details from the `source` body comment.\n     *\n     * @private\n     * @param {string} source The source to inspect.\n     * @returns {Array} Returns the wrapper details.\n     */\n    function getWrapDetails(source) {\n      var match = source.match(reWrapDetails);\n      return match ? match[1].split(reSplitDetails) : [];\n    }\n\n    /**\n     * Checks if `path` exists on `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @param {Function} hasFunc The function to check properties.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     */\n    function hasPath(object, path, hasFunc) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          result = false;\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n        if (!(result = object != null && hasFunc(object, key))) {\n          break;\n        }\n        object = object[key];\n      }\n      if (result || ++index != length) {\n        return result;\n      }\n      length = object == null ? 0 : object.length;\n      return !!length && isLength(length) && isIndex(key, length) &&\n        (isArray(object) || isArguments(object));\n    }\n\n    /**\n     * Initializes an array clone.\n     *\n     * @private\n     * @param {Array} array The array to clone.\n     * @returns {Array} Returns the initialized clone.\n     */\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n\n      // Add properties assigned by `RegExp#exec`.\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\n\n    /**\n     * Initializes an object clone.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneObject(object) {\n      return (typeof object.constructor == 'function' && !isPrototype(object))\n        ? baseCreate(getPrototype(object))\n        : {};\n    }\n\n    /**\n     * Initializes an object clone based on its `toStringTag`.\n     *\n     * **Note:** This function only supports cloning values with tags of\n     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @param {string} tag The `toStringTag` of the object to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return cloneArrayBuffer(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case dataViewTag:\n          return cloneDataView(object, isDeep);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          return cloneTypedArray(object, isDeep);\n\n        case mapTag:\n          return new Ctor;\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          return cloneRegExp(object);\n\n        case setTag:\n          return new Ctor;\n\n        case symbolTag:\n          return cloneSymbol(object);\n      }\n    }\n\n    /**\n     * Inserts wrapper `details` in a comment at the top of the `source` body.\n     *\n     * @private\n     * @param {string} source The source to modify.\n     * @returns {Array} details The details to insert.\n     * @returns {string} Returns the modified source.\n     */\n    function insertWrapDetails(source, details) {\n      var length = details.length;\n      if (!length) {\n        return source;\n      }\n      var lastIndex = length - 1;\n      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n      details = details.join(length > 2 ? ', ' : ' ');\n      return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n    }\n\n    /**\n     * Checks if `value` is a flattenable `arguments` object or array.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n     */\n    function isFlattenable(value) {\n      return isArray(value) || isArguments(value) ||\n        !!(spreadableSymbol && value && value[spreadableSymbol]);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like index.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n     */\n    function isIndex(value, length) {\n      var type = typeof value;\n      length = length == null ? MAX_SAFE_INTEGER : length;\n\n      return !!length &&\n        (type == 'number' ||\n          (type != 'symbol' && reIsUint.test(value))) &&\n            (value > -1 && value % 1 == 0 && value < length);\n    }\n\n    /**\n     * Checks if the given arguments are from an iteratee call.\n     *\n     * @private\n     * @param {*} value The potential iteratee value argument.\n     * @param {*} index The potential iteratee index or key argument.\n     * @param {*} object The potential iteratee object argument.\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n     *  else `false`.\n     */\n    function isIterateeCall(value, index, object) {\n      if (!isObject(object)) {\n        return false;\n      }\n      var type = typeof index;\n      if (type == 'number'\n            ? (isArrayLike(object) && isIndex(index, object.length))\n            : (type == 'string' && index in object)\n          ) {\n        return eq(object[index], value);\n      }\n      return false;\n    }\n\n    /**\n     * Checks if `value` is a property name and not a property path.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n     */\n    function isKey(value, object) {\n      if (isArray(value)) {\n        return false;\n      }\n      var type = typeof value;\n      if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n          value == null || isSymbol(value)) {\n        return true;\n      }\n      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n        (object != null && value in Object(object));\n    }\n\n    /**\n     * Checks if `value` is suitable for use as unique object key.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n     */\n    function isKeyable(value) {\n      var type = typeof value;\n      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n        ? (value !== '__proto__')\n        : (value === null);\n    }\n\n    /**\n     * Checks if `func` has a lazy counterpart.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n     *  else `false`.\n     */\n    function isLaziable(func) {\n      var funcName = getFuncName(func),\n          other = lodash[funcName];\n\n      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\n    }\n\n    /**\n     * Checks if `func` has its source masked.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n     */\n    function isMasked(func) {\n      return !!maskSrcKey && (maskSrcKey in func);\n    }\n\n    /**\n     * Checks if `func` is capable of being masked.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n     */\n    var isMaskable = coreJsData ? isFunction : stubFalse;\n\n    /**\n     * Checks if `value` is likely a prototype object.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n     */\n    function isPrototype(value) {\n      var Ctor = value && value.constructor,\n          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n      return value === proto;\n    }\n\n    /**\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\n     *  equality comparisons, else `false`.\n     */\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n\n    /**\n     * A specialized version of `matchesProperty` for source values suitable\n     * for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {string} key The key of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function matchesStrictComparable(key, srcValue) {\n      return function(object) {\n        if (object == null) {\n          return false;\n        }\n        return object[key] === srcValue &&\n          (srcValue !== undefined || (key in Object(object)));\n      };\n    }\n\n    /**\n     * A specialized version of `_.memoize` which clears the memoized function's\n     * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n     *\n     * @private\n     * @param {Function} func The function to have its output memoized.\n     * @returns {Function} Returns the new memoized function.\n     */\n    function memoizeCapped(func) {\n      var result = memoize(func, function(key) {\n        if (cache.size === MAX_MEMOIZE_SIZE) {\n          cache.clear();\n        }\n        return key;\n      });\n\n      var cache = result.cache;\n      return result;\n    }\n\n    /**\n     * Merges the function metadata of `source` into `data`.\n     *\n     * Merging metadata reduces the number of wrappers used to invoke a function.\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n     * may be applied regardless of execution order. Methods like `_.ary` and\n     * `_.rearg` modify function arguments, making the order in which they are\n     * executed important, preventing the merging of metadata. However, we make\n     * an exception for a safe combined case where curried functions have `_.ary`\n     * and or `_.rearg` applied.\n     *\n     * @private\n     * @param {Array} data The destination metadata.\n     * @param {Array} source The source metadata.\n     * @returns {Array} Returns `data`.\n     */\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n      var isCombo =\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n      // Exit early if metadata can't be merged.\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      // Use source `thisArg` if available.\n      if (srcBitmask & WRAP_BIND_FLAG) {\n        data[2] = source[2];\n        // Set when currying a bound function.\n        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n      }\n      // Compose partial arguments.\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n      }\n      // Compose partial right arguments.\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n      }\n      // Use source `argPos` if available.\n      value = source[7];\n      if (value) {\n        data[7] = value;\n      }\n      // Use source `ary` if it's smaller.\n      if (srcBitmask & WRAP_ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      // Use source `arity` if one is not provided.\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      // Use source `func` and merge bitmasks.\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n\n    /**\n     * This function is like\n     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * except that it includes inherited enumerable properties.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function nativeKeysIn(object) {\n      var result = [];\n      if (object != null) {\n        for (var key in Object(object)) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a string using `Object.prototype.toString`.\n     *\n     * @private\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     */\n    function objectToString(value) {\n      return nativeObjectToString.call(value);\n    }\n\n    /**\n     * A specialized version of `baseRest` which transforms the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @param {Function} transform The rest array transform.\n     * @returns {Function} Returns the new function.\n     */\n    function overRest(func, start, transform) {\n      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n      return function() {\n        var args = arguments,\n            index = -1,\n            length = nativeMax(args.length - start, 0),\n            array = Array(length);\n\n        while (++index < length) {\n          array[index] = args[start + index];\n        }\n        index = -1;\n        var otherArgs = Array(start + 1);\n        while (++index < start) {\n          otherArgs[index] = args[index];\n        }\n        otherArgs[start] = transform(array);\n        return apply(func, this, otherArgs);\n      };\n    }\n\n    /**\n     * Gets the parent value at `path` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} path The path to get the parent value of.\n     * @returns {*} Returns the parent value.\n     */\n    function parent(object, path) {\n      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n    }\n\n    /**\n     * Reorder `array` according to the specified indexes where the element at\n     * the first index is assigned as the first element, the element at\n     * the second index is assigned as the second element, and so on.\n     *\n     * @private\n     * @param {Array} array The array to reorder.\n     * @param {Array} indexes The arranged array indexes.\n     * @returns {Array} Returns `array`.\n     */\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = copyArray(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n      return array;\n    }\n\n    /**\n     * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the property to get.\n     * @returns {*} Returns the property value.\n     */\n    function safeGet(object, key) {\n      if (key === 'constructor' && typeof object[key] === 'function') {\n        return;\n      }\n\n      if (key == '__proto__') {\n        return;\n      }\n\n      return object[key];\n    }\n\n    /**\n     * Sets metadata for `func`.\n     *\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n     * period of time, it will trip its breaker and transition to an identity\n     * function to avoid garbage collection pauses in V8. See\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n     * for more details.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var setData = shortOut(baseSetData);\n\n    /**\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    var setTimeout = ctxSetTimeout || function(func, wait) {\n      return root.setTimeout(func, wait);\n    };\n\n    /**\n     * Sets the `toString` method of `func` to return `string`.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var setToString = shortOut(baseSetToString);\n\n    /**\n     * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n     * with wrapper details in a comment at the top of the source body.\n     *\n     * @private\n     * @param {Function} wrapper The function to modify.\n     * @param {Function} reference The reference function.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Function} Returns `wrapper`.\n     */\n    function setWrapToString(wrapper, reference, bitmask) {\n      var source = (reference + '');\n      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n    }\n\n    /**\n     * Creates a function that'll short out and invoke `identity` instead\n     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n     * milliseconds.\n     *\n     * @private\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new shortable function.\n     */\n    function shortOut(func) {\n      var count = 0,\n          lastCalled = 0;\n\n      return function() {\n        var stamp = nativeNow(),\n            remaining = HOT_SPAN - (stamp - lastCalled);\n\n        lastCalled = stamp;\n        if (remaining > 0) {\n          if (++count >= HOT_COUNT) {\n            return arguments[0];\n          }\n        } else {\n          count = 0;\n        }\n        return func.apply(undefined, arguments);\n      };\n    }\n\n    /**\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @param {number} [size=array.length] The size of `array`.\n     * @returns {Array} Returns `array`.\n     */\n    function shuffleSelf(array, size) {\n      var index = -1,\n          length = array.length,\n          lastIndex = length - 1;\n\n      size = size === undefined ? length : size;\n      while (++index < size) {\n        var rand = baseRandom(index, lastIndex),\n            value = array[rand];\n\n        array[rand] = array[index];\n        array[index] = value;\n      }\n      array.length = size;\n      return array;\n    }\n\n    /**\n     * Converts `string` to a property path array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the property path array.\n     */\n    var stringToPath = memoizeCapped(function(string) {\n      var result = [];\n      if (string.charCodeAt(0) === 46 /* . */) {\n        result.push('');\n      }\n      string.replace(rePropName, function(match, number, quote, subString) {\n        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n      });\n      return result;\n    });\n\n    /**\n     * Converts `value` to a string key if it's not a string or symbol.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {string|symbol} Returns the key.\n     */\n    function toKey(value) {\n      if (typeof value == 'string' || isSymbol(value)) {\n        return value;\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * Converts `func` to its source code.\n     *\n     * @private\n     * @param {Function} func The function to convert.\n     * @returns {string} Returns the source code.\n     */\n    function toSource(func) {\n      if (func != null) {\n        try {\n          return funcToString.call(func);\n        } catch (e) {}\n        try {\n          return (func + '');\n        } catch (e) {}\n      }\n      return '';\n    }\n\n    /**\n     * Updates wrapper `details` based on `bitmask` flags.\n     *\n     * @private\n     * @returns {Array} details The details to modify.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Array} Returns `details`.\n     */\n    function updateWrapDetails(details, bitmask) {\n      arrayEach(wrapFlags, function(pair) {\n        var value = '_.' + pair[0];\n        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n          details.push(value);\n        }\n      });\n      return details.sort();\n    }\n\n    /**\n     * Creates a clone of `wrapper`.\n     *\n     * @private\n     * @param {Object} wrapper The wrapper to clone.\n     * @returns {Object} Returns the cloned wrapper.\n     */\n    function wrapperClone(wrapper) {\n      if (wrapper instanceof LazyWrapper) {\n        return wrapper.clone();\n      }\n      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n      result.__actions__ = copyArray(wrapper.__actions__);\n      result.__index__  = wrapper.__index__;\n      result.__values__ = wrapper.__values__;\n      return result;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements split into groups the length of `size`.\n     * If `array` can't be split evenly, the final chunk will be the remaining\n     * elements.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to process.\n     * @param {number} [size=1] The length of each chunk\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the new array of chunks.\n     * @example\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\n     * // => [['a', 'b'], ['c', 'd']]\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\n     * // => [['a', 'b', 'c'], ['d']]\n     */\n    function chunk(array, size, guard) {\n      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n        size = 1;\n      } else {\n        size = nativeMax(toInteger(size), 0);\n      }\n      var length = array == null ? 0 : array.length;\n      if (!length || size < 1) {\n        return [];\n      }\n      var index = 0,\n          resIndex = 0,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[resIndex++] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `-0`, `0n`, `\"\"`, `undefined`, and `NaN` are falsy.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n    function compact(array) {\n      var index = -1,\n          length = array == null ? 0 : array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[resIndex++] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates a new array concatenating `array` with any additional arrays\n     * and/or values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to concatenate.\n     * @param {...*} [values] The values to concatenate.\n     * @returns {Array} Returns the new concatenated array.\n     * @example\n     *\n     * var array = [1];\n     * var other = _.concat(array, 2, [3], [[4]]);\n     *\n     * console.log(other);\n     * // => [1, 2, 3, [4]]\n     *\n     * console.log(array);\n     * // => [1]\n     */\n    function concat() {\n      var length = arguments.length;\n      if (!length) {\n        return [];\n      }\n      var args = Array(length - 1),\n          array = arguments[0],\n          index = length;\n\n      while (index--) {\n        args[index - 1] = arguments[index];\n      }\n      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n    }\n\n    /**\n     * Creates an array of `array` values not included in the other given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * **Note:** Unlike `_.pullAll`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.without, _.xor\n     * @example\n     *\n     * _.difference([2, 1], [2, 3]);\n     * // => [1]\n     */\n    var difference = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `iteratee` which\n     * is invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var differenceBy = baseRest(function(array, values) {\n      var iteratee = last(values);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `comparator`\n     * which is invoked to compare elements of `array` to `values`. The order and\n     * references of result values are determined by the first array. The comparator\n     * is invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     *\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }]\n     */\n    var differenceWith = baseRest(function(array, values) {\n      var comparator = last(values);\n      if (isArrayLikeObject(comparator)) {\n        comparator = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.drop([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.drop([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.drop([1, 2, 3], 5);\n     * // => []\n     *\n     * _.drop([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function drop(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRight([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.dropRight([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.dropRight([1, 2, 3], 5);\n     * // => []\n     *\n     * _.dropRight([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function dropRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the end.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.dropRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropRightWhile(users, ['active', false]);\n     * // => objects for ['barney']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropRightWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the beginning.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.dropWhile(users, function(o) { return !o.active; });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropWhile(users, ['active', false]);\n     * // => objects for ['pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true)\n        : [];\n    }\n\n    /**\n     * Fills elements of `array` with `value` from `start` up to, but not\n     * including, `end`.\n     *\n     * **Note:** This method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Array\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.fill(array, 'a');\n     * console.log(array);\n     * // => ['a', 'a', 'a']\n     *\n     * _.fill(Array(3), 2);\n     * // => [2, 2, 2]\n     *\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\n     * // => [4, '*', '*', 10]\n     */\n    function fill(array, value, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\n     * // => 0\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\n     * // => 1\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findIndex(users, ['active', false]);\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findIndex(users, 'active');\n     * // => 2\n     */\n    function findIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index);\n    }\n\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n     * // => 2\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n     * // => 0\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastIndex(users, ['active', false]);\n     * // => 2\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastIndex(users, 'active');\n     * // => 0\n     */\n    function findLastIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length - 1;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = fromIndex < 0\n          ? nativeMax(length + index, 0)\n          : nativeMin(index, length - 1);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n    }\n\n    /**\n     * Flattens `array` a single level deep.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, [3, [4]], 5]\n     */\n    function flatten(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, 1) : [];\n    }\n\n    /**\n     * Recursively flattens `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, 3, 4, 5]\n     */\n    function flattenDeep(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, INFINITY) : [];\n    }\n\n    /**\n     * Recursively flatten `array` up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * var array = [1, [2, [3, [4]], 5]];\n     *\n     * _.flattenDepth(array, 1);\n     * // => [1, 2, [3, [4]], 5]\n     *\n     * _.flattenDepth(array, 2);\n     * // => [1, 2, 3, [4], 5]\n     */\n    function flattenDepth(array, depth) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(array, depth);\n    }\n\n    /**\n     * The inverse of `_.toPairs`; this method returns an object composed\n     * from key-value `pairs`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} pairs The key-value pairs.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.fromPairs([['a', 1], ['b', 2]]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function fromPairs(pairs) {\n      var index = -1,\n          length = pairs == null ? 0 : pairs.length,\n          result = {};\n\n      while (++index < length) {\n        var pair = pairs[index];\n        baseAssignValue(result, pair[0], pair[1]);\n      }\n      return result;\n    }\n\n    /**\n     * Gets the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias first\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the first element of `array`.\n     * @example\n     *\n     * _.head([1, 2, 3]);\n     * // => 1\n     *\n     * _.head([]);\n     * // => undefined\n     */\n    function head(array) {\n      return (array && array.length) ? array[0] : undefined;\n    }\n\n    /**\n     * Gets the index at which the first occurrence of `value` is found in `array`\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\n     * offset from the end of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 1, 2], 2);\n     * // => 1\n     *\n     * // Search from the `fromIndex`.\n     * _.indexOf([1, 2, 1, 2], 2, 2);\n     * // => 3\n     */\n    function indexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseIndexOf(array, value, index);\n    }\n\n    /**\n     * Gets all but the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     */\n    function initial(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 0, -1) : [];\n    }\n\n    /**\n     * Creates an array of unique values that are included in all given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersection([2, 1], [2, 3]);\n     * // => [2]\n     */\n    var intersection = baseRest(function(arrays) {\n      var mapped = arrayMap(arrays, castArrayLikeObject);\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped)\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `iteratee`\n     * which is invoked for each element of each `arrays` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [2.1]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }]\n     */\n    var intersectionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      if (iteratee === last(mapped)) {\n        iteratee = undefined;\n      } else {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `comparator`\n     * which is invoked to compare elements of `arrays`. The order and references\n     * of result values are determined by the first array. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.intersectionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }]\n     */\n    var intersectionWith = baseRest(function(arrays) {\n      var comparator = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      if (comparator) {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Converts all elements in `array` into a string separated by `separator`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to convert.\n     * @param {string} [separator=','] The element separator.\n     * @returns {string} Returns the joined string.\n     * @example\n     *\n     * _.join(['a', 'b', 'c'], '~');\n     * // => 'a~b~c'\n     */\n    function join(array, separator) {\n      return array == null ? '' : nativeJoin.call(array, separator);\n    }\n\n    /**\n     * Gets the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the last element of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     */\n    function last(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? array[length - 1] : undefined;\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it iterates over elements of\n     * `array` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 1, 2], 2);\n     * // => 3\n     *\n     * // Search from the `fromIndex`.\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n     * // => 1\n     */\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n      }\n      return value === value\n        ? strictLastIndexOf(array, value, index)\n        : baseFindIndex(array, baseIsNaN, index, true);\n    }\n\n    /**\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\n     * element from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.11.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=0] The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     *\n     * _.nth(array, 1);\n     * // => 'b'\n     *\n     * _.nth(array, -2);\n     * // => 'c';\n     */\n    function nth(array, n) {\n      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n    }\n\n    /**\n     * Removes all given values from `array` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n     * to remove elements from an array by predicate.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...*} [values] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pull(array, 'a', 'c');\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    var pull = baseRest(pullAll);\n\n    /**\n     * This method is like `_.pull` except that it accepts an array of values to remove.\n     *\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pullAll(array, ['a', 'c']);\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    function pullAll(array, values) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values)\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\n     * invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The iteratee is invoked with one argument: (value).\n     *\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n     *\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n     * console.log(array);\n     * // => [{ 'x': 2 }]\n     */\n    function pullAllBy(array, values, iteratee) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, getIteratee(iteratee, 2))\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `comparator` which\n     * is invoked to compare elements of `array` to `values`. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n     *\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n     * console.log(array);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n     */\n    function pullAllWith(array, values, comparator) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, undefined, comparator)\n        : array;\n    }\n\n    /**\n     * Removes elements from `array` corresponding to `indexes` and returns an\n     * array of removed elements.\n     *\n     * **Note:** Unlike `_.at`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     * var pulled = _.pullAt(array, [1, 3]);\n     *\n     * console.log(array);\n     * // => ['a', 'c']\n     *\n     * console.log(pulled);\n     * // => ['b', 'd']\n     */\n    var pullAt = flatRest(function(array, indexes) {\n      var length = array == null ? 0 : array.length,\n          result = baseAt(array, indexes);\n\n      basePullAt(array, arrayMap(indexes, function(index) {\n        return isIndex(index, length) ? +index : index;\n      }).sort(compareAscending));\n\n      return result;\n    });\n\n    /**\n     * Removes all elements from `array` that `predicate` returns truthy for\n     * and returns an array of the removed elements. The predicate is invoked\n     * with three arguments: (value, index, array).\n     *\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n     * to pull elements from an array by value.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4];\n     * var evens = _.remove(array, function(n) {\n     *   return n % 2 == 0;\n     * });\n     *\n     * console.log(array);\n     * // => [1, 3]\n     *\n     * console.log(evens);\n     * // => [2, 4]\n     */\n    function remove(array, predicate) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getIteratee(predicate, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n\n    /**\n     * Reverses `array` so that the first element becomes the last, the second\n     * element becomes the second to last, and so on.\n     *\n     * **Note:** This method mutates `array` and is based on\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.reverse(array);\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function reverse(array) {\n      return array == null ? array : nativeReverse.call(array);\n    }\n\n    /**\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\n     *\n     * **Note:** This method is used instead of\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n     * returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function slice(array, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      else {\n        start = start == null ? 0 : toInteger(start);\n        end = end === undefined ? length : toInteger(end);\n      }\n      return baseSlice(array, start, end);\n    }\n\n    /**\n     * Uses a binary search to determine the lowest index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([30, 50], 40);\n     * // => 1\n     */\n    function sortedIndex(array, value) {\n      return baseSortedIndex(array, value);\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 0\n     */\n    function sortedIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 1\n     */\n    function sortedIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value);\n        if (index < length && eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it returns the highest\n     * index at which `value` should be inserted into `array` in order to\n     * maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n     * // => 4\n     */\n    function sortedLastIndex(array, value) {\n      return baseSortedIndex(array, value, true);\n    }\n\n    /**\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 1\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 1\n     */\n    function sortedLastIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n    }\n\n    /**\n     * This method is like `_.lastIndexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 3\n     */\n    function sortedLastIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value, true) - 1;\n        if (eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.uniq` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniq([1, 1, 2]);\n     * // => [1, 2]\n     */\n    function sortedUniq(array) {\n      return (array && array.length)\n        ? baseSortedUniq(array)\n        : [];\n    }\n\n    /**\n     * This method is like `_.uniqBy` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n     * // => [1.1, 2.3]\n     */\n    function sortedUniqBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSortedUniq(array, getIteratee(iteratee, 2))\n        : [];\n    }\n\n    /**\n     * Gets all but the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.tail([1, 2, 3]);\n     * // => [2, 3]\n     */\n    function tail(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 1, length) : [];\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.take([1, 2, 3]);\n     * // => [1]\n     *\n     * _.take([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.take([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.take([1, 2, 3], 0);\n     * // => []\n     */\n    function take(array, n, guard) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRight([1, 2, 3]);\n     * // => [3]\n     *\n     * _.takeRight([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.takeRight([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.takeRight([1, 2, 3], 0);\n     * // => []\n     */\n    function takeRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the end. Elements are\n     * taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.takeRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeRightWhile(users, ['active', false]);\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeRightWhile(users, 'active');\n     * // => []\n     */\n    function takeRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), false, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the beginning. Elements\n     * are taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.takeWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeWhile(users, ['active', false]);\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeWhile(users, 'active');\n     * // => []\n     */\n    function takeWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3))\n        : [];\n    }\n\n    /**\n     * Creates an array of unique values, in order, from all given arrays using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.union([2], [1, 2]);\n     * // => [2, 1]\n     */\n    var union = baseRest(function(arrays) {\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which uniqueness is computed. Result values are chosen from the first\n     * array in which the value occurs. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    var unionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `comparator` which\n     * is invoked to compare elements of `arrays`. Result values are chosen from\n     * the first array in which the value occurs. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.unionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var unionWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n    });\n\n    /**\n     * Creates a duplicate-free version of an array, using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons, in which only the first occurrence of each element\n     * is kept. The order of result values is determined by the order they occur\n     * in the array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniq([2, 1, 2]);\n     * // => [2, 1]\n     */\n    function uniq(array) {\n      return (array && array.length) ? baseUniq(array) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * uniqueness is computed. The order of result values is determined by the\n     * order they occur in the array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    function uniqBy(array, iteratee) {\n      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `comparator` which\n     * is invoked to compare elements of `array`. The order of result values is\n     * determined by the order they occur in the array.The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.uniqWith(objects, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n     */\n    function uniqWith(array, comparator) {\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts an array of grouped\n     * elements and creates an array regrouping the elements to their pre-zip\n     * configuration.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.2.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     *\n     * _.unzip(zipped);\n     * // => [['a', 'b'], [1, 2], [true, false]]\n     */\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var length = 0;\n      array = arrayFilter(array, function(group) {\n        if (isArrayLikeObject(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      return baseTimes(length, function(index) {\n        return arrayMap(array, baseProperty(index));\n      });\n    }\n\n    /**\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\n     * how regrouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  regrouped values.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n     * // => [[1, 10, 100], [2, 20, 200]]\n     *\n     * _.unzipWith(zipped, _.add);\n     * // => [3, 30, 300]\n     */\n    function unzipWith(array, iteratee) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      return arrayMap(result, function(group) {\n        return apply(iteratee, undefined, group);\n      });\n    }\n\n    /**\n     * Creates an array excluding all given values using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.pull`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...*} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.xor\n     * @example\n     *\n     * _.without([2, 1, 2, 3], 1, 2);\n     * // => [3]\n     */\n    var without = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n\n    /**\n     * Creates an array of unique values that is the\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n     * of the given arrays. The order of result values is determined by the order\n     * they occur in the arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.without\n     * @example\n     *\n     * _.xor([2, 1], [2, 3]);\n     * // => [1, 3]\n     */\n    var xor = baseRest(function(arrays) {\n      return baseXor(arrayFilter(arrays, isArrayLikeObject));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which by which they're compared. The order of result values is determined\n     * by the order they occur in the arrays. The iteratee is invoked with one\n     * argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2, 3.4]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var xorBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `comparator` which is\n     * invoked to compare elements of `arrays`. The order of result values is\n     * determined by the order they occur in the arrays. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.xorWith(objects, others, _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var xorWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n    });\n\n    /**\n     * Creates an array of grouped elements, the first of which contains the\n     * first elements of the given arrays, the second of which contains the\n     * second elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     */\n    var zip = baseRest(unzip);\n\n    /**\n     * This method is like `_.fromPairs` except that it accepts two arrays,\n     * one of property identifiers and one of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.4.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObject(['a', 'b'], [1, 2]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function zipObject(props, values) {\n      return baseZipObject(props || [], values || [], assignValue);\n    }\n\n    /**\n     * This method is like `_.zipObject` except that it supports property paths.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n     */\n    function zipObjectDeep(props, values) {\n      return baseZipObject(props || [], values || [], baseSet);\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\n     * how grouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  grouped values.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n     *   return a + b + c;\n     * });\n     * // => [111, 222]\n     */\n    var zipWith = baseRest(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n      return unzipWith(arrays, iteratee);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n     * chain sequences enabled. The result of such sequences must be unwrapped\n     * with `_#value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Seq\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36 },\n     *   { 'user': 'fred',    'age': 40 },\n     *   { 'user': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _\n     *   .chain(users)\n     *   .sortBy('age')\n     *   .map(function(o) {\n     *     return o.user + ' is ' + o.age;\n     *   })\n     *   .head()\n     *   .value();\n     * // => 'pebbles is 1'\n     */\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n\n    /**\n     * This method invokes `interceptor` and returns `value`. The interceptor\n     * is invoked with one argument; (value). The purpose of this method is to\n     * \"tap into\" a method chain sequence in order to modify intermediate results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3])\n     *  .tap(function(array) {\n     *    // Mutate input array.\n     *    array.pop();\n     *  })\n     *  .reverse()\n     *  .value();\n     * // => [2, 1]\n     */\n    function tap(value, interceptor) {\n      interceptor(value);\n      return value;\n    }\n\n    /**\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\n     * The purpose of this method is to \"pass thru\" values replacing intermediate\n     * results in a method chain sequence.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns the result of `interceptor`.\n     * @example\n     *\n     * _('  abc  ')\n     *  .chain()\n     *  .trim()\n     *  .thru(function(value) {\n     *    return [value];\n     *  })\n     *  .value();\n     * // => ['abc']\n     */\n    function thru(value, interceptor) {\n      return interceptor(value);\n    }\n\n    /**\n     * This method is the wrapper version of `_.at`.\n     *\n     * @name at\n     * @memberOf _\n     * @since 1.0.0\n     * @category Seq\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\n     * // => [3, 4]\n     */\n    var wrapperAt = flatRest(function(paths) {\n      var length = paths.length,\n          start = length ? paths[0] : 0,\n          value = this.__wrapped__,\n          interceptor = function(object) { return baseAt(object, paths); };\n\n      if (length > 1 || this.__actions__.length ||\n          !(value instanceof LazyWrapper) || !isIndex(start)) {\n        return this.thru(interceptor);\n      }\n      value = value.slice(start, +start + (length ? 1 : 0));\n      value.__actions__.push({\n        'func': thru,\n        'args': [interceptor],\n        'thisArg': undefined\n      });\n      return new LodashWrapper(value, this.__chain__).thru(function(array) {\n        if (length && !array.length) {\n          array.push(undefined);\n        }\n        return array;\n      });\n    });\n\n    /**\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n     *\n     * @name chain\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // A sequence without explicit chaining.\n     * _(users).head();\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // A sequence with explicit chaining.\n     * _(users)\n     *   .chain()\n     *   .head()\n     *   .pick('user')\n     *   .value();\n     * // => { 'user': 'barney' }\n     */\n    function wrapperChain() {\n      return chain(this);\n    }\n\n    /**\n     * Executes the chain sequence and returns the wrapped result.\n     *\n     * @name commit\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).push(3);\n     *\n     * console.log(array);\n     * // => [1, 2]\n     *\n     * wrapped = wrapped.commit();\n     * console.log(array);\n     * // => [1, 2, 3]\n     *\n     * wrapped.last();\n     * // => 3\n     *\n     * console.log(array);\n     * // => [1, 2, 3]\n     */\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n\n    /**\n     * Gets the next value on a wrapped object following the\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n     *\n     * @name next\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the next iterator value.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 1 }\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 2 }\n     *\n     * wrapped.next();\n     * // => { 'done': true, 'value': undefined }\n     */\n    function wrapperNext() {\n      if (this.__values__ === undefined) {\n        this.__values__ = toArray(this.value());\n      }\n      var done = this.__index__ >= this.__values__.length,\n          value = done ? undefined : this.__values__[this.__index__++];\n\n      return { 'done': done, 'value': value };\n    }\n\n    /**\n     * Enables the wrapper to be iterable.\n     *\n     * @name Symbol.iterator\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped[Symbol.iterator]() === wrapped;\n     * // => true\n     *\n     * Array.from(wrapped);\n     * // => [1, 2]\n     */\n    function wrapperToIterator() {\n      return this;\n    }\n\n    /**\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\n     *\n     * @name plant\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @param {*} value The value to plant.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2]).map(square);\n     * var other = wrapped.plant([3, 4]);\n     *\n     * other.value();\n     * // => [9, 16]\n     *\n     * wrapped.value();\n     * // => [1, 4]\n     */\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        clone.__index__ = 0;\n        clone.__values__ = undefined;\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n\n    /**\n     * This method is the wrapper version of `_.reverse`.\n     *\n     * **Note:** This method mutates the wrapped array.\n     *\n     * @name reverse\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _(array).reverse().value()\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({\n          'func': thru,\n          'args': [reverse],\n          'thisArg': undefined\n        });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(reverse);\n    }\n\n    /**\n     * Executes the chain sequence to resolve the unwrapped value.\n     *\n     * @name value\n     * @memberOf _\n     * @since 0.1.0\n     * @alias toJSON, valueOf\n     * @category Seq\n     * @returns {*} Returns the resolved unwrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).value();\n     * // => [1, 2, 3]\n     */\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the number of times the key was returned by `iteratee`. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': 1, '6': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n    var countBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        ++result[key];\n      } else {\n        baseAssignValue(result, key, 1);\n      }\n    });\n\n    /**\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * **Note:** This method returns `true` for\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n     * elements of empty collections.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes'], Boolean);\n     * // => false\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.every(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.every(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.every(users, 'active');\n     * // => false\n     */\n    function every(collection, predicate, guard) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning an array of all elements\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * **Note:** Unlike `_.remove`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.reject\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.filter(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, { 'age': 36, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.filter(users, 'active');\n     * // => objects for ['barney']\n     *\n     * // Combining several predicates using `_.overEvery` or `_.overSome`.\n     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n     * // => objects for ['fred', 'barney']\n     */\n    function filter(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning the first element\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': true },\n     *   { 'user': 'fred',    'age': 40, 'active': false },\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\n     * ];\n     *\n     * _.find(users, function(o) { return o.age < 40; });\n     * // => object for 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.find(users, { 'age': 1, 'active': true });\n     * // => object for 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.find(users, ['active', false]);\n     * // => object for 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.find(users, 'active');\n     * // => object for 'barney'\n     */\n    var find = createFind(findIndex);\n\n    /**\n     * This method is like `_.find` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 1;\n     * });\n     * // => 3\n     */\n    var findLast = createFind(findLastIndex);\n\n    /**\n     * Creates a flattened array of values by running each element in `collection`\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n     * with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [n, n];\n     * }\n     *\n     * _.flatMap([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMap(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), 1);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDeep([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMapDeep(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), INFINITY);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDepth([1, 2], duplicate, 2);\n     * // => [[1, 1], [2, 2]]\n     */\n    function flatMapDepth(collection, iteratee, depth) {\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(map(collection, iteratee), depth);\n    }\n\n    /**\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\n     * or `_.forOwn` for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias each\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEachRight\n     * @example\n     *\n     * _.forEach([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `1` then `2`.\n     *\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forEach(collection, iteratee) {\n      var func = isArray(collection) ? arrayEach : baseEach;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forEach` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @alias eachRight\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEach\n     * @example\n     *\n     * _.forEachRight([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `2` then `1`.\n     */\n    function forEachRight(collection, iteratee) {\n      var func = isArray(collection) ? arrayEachRight : baseEachRight;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The order of grouped values\n     * is determined by the order they occur in `collection`. The corresponding\n     * value of each key is an array of elements responsible for generating the\n     * key. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        baseAssignValue(result, key, [value]);\n      }\n    });\n\n    /**\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\n     * checked for a substring of `value`, otherwise\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\n     * the offset from the end of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     * @example\n     *\n     * _.includes([1, 2, 3], 1);\n     * // => true\n     *\n     * _.includes([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\n     * // => true\n     *\n     * _.includes('abcd', 'bc');\n     * // => true\n     */\n    function includes(collection, value, fromIndex, guard) {\n      collection = isArrayLike(collection) ? collection : values(collection);\n      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n      var length = collection.length;\n      if (fromIndex < 0) {\n        fromIndex = nativeMax(length + fromIndex, 0);\n      }\n      return isString(collection)\n        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n    }\n\n    /**\n     * Invokes the method at `path` of each element in `collection`, returning\n     * an array of the results of each invoked method. Any additional arguments\n     * are provided to each invoked method. If `path` is a function, it's invoked\n     * for, and `this` bound to, each element in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array|Function|string} path The path of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [args] The arguments to invoke each method with.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invokeMap([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n    var invokeMap = baseRest(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n      });\n      return result;\n    });\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the last element responsible for generating the key. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var array = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.keyBy(array, function(o) {\n     *   return String.fromCharCode(o.code);\n     * });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.keyBy(array, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     */\n    var keyBy = createAggregator(function(result, value, key) {\n      baseAssignValue(result, key, value);\n    });\n\n    /**\n     * Creates an array of values by running each element in `collection` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n     *\n     * The guarded methods are:\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * _.map([4, 8], square);\n     * // => [16, 64]\n     *\n     * _.map({ 'a': 4, 'b': 8 }, square);\n     * // => [16, 64] (iteration order is not guaranteed)\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, 'user');\n     * // => ['barney', 'fred']\n     */\n    function map(collection, iteratee) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.sortBy` except that it allows specifying the sort\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\n     * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n     * descending or \"asc\" for ascending sort order of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @param {string[]} [orders] The sort orders of `iteratees`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 34 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 36 }\n     * ];\n     *\n     * // Sort by `user` in ascending order and by `age` in descending order.\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     */\n    function orderBy(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      orders = guard ? undefined : orders;\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseOrderBy(collection, iteratees, orders);\n    }\n\n    /**\n     * Creates an array of elements split into two groups, the first of which\n     * contains elements `predicate` returns truthy for, the second of which\n     * contains elements `predicate` returns falsey for. The predicate is\n     * invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of grouped elements.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': false },\n     *   { 'user': 'fred',    'age': 40, 'active': true },\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\n     * ];\n     *\n     * _.partition(users, function(o) { return o.active; });\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.partition(users, { 'age': 1, 'active': false });\n     * // => objects for [['pebbles'], ['barney', 'fred']]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.partition(users, ['active', false]);\n     * // => objects for [['barney', 'pebbles'], ['fred']]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.partition(users, 'active');\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     */\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n\n    /**\n     * Reduces `collection` to a value which is the accumulated result of running\n     * each element in `collection` thru `iteratee`, where each successive\n     * invocation is supplied the return value of the previous. If `accumulator`\n     * is not given, the first element of `collection` is used as the initial\n     * value. The iteratee is invoked with four arguments:\n     * (accumulator, value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\n     *\n     * The guarded methods are:\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n     * and `sortBy`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduceRight\n     * @example\n     *\n     * _.reduce([1, 2], function(sum, n) {\n     *   return sum + n;\n     * }, 0);\n     * // => 3\n     *\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     *   return result;\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n     */\n    function reduce(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduce : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n    }\n\n    /**\n     * This method is like `_.reduce` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduce\n     * @example\n     *\n     * var array = [[0, 1], [2, 3], [4, 5]];\n     *\n     * _.reduceRight(array, function(flattened, other) {\n     *   return flattened.concat(other);\n     * }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n    function reduceRight(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduceRight : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n    }\n\n    /**\n     * The opposite of `_.filter`; this method returns the elements of `collection`\n     * that `predicate` does **not** return truthy for.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.filter\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': true }\n     * ];\n     *\n     * _.reject(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.reject(users, { 'age': 40, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.reject(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.reject(users, 'active');\n     * // => objects for ['barney']\n     */\n    function reject(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, negate(getIteratee(predicate, 3)));\n    }\n\n    /**\n     * Gets a random element from `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     */\n    function sample(collection) {\n      var func = isArray(collection) ? arraySample : baseSample;\n      return func(collection);\n    }\n\n    /**\n     * Gets `n` random elements at unique keys from `collection` up to the\n     * size of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} [n=1] The number of elements to sample.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the random elements.\n     * @example\n     *\n     * _.sampleSize([1, 2, 3], 2);\n     * // => [3, 1]\n     *\n     * _.sampleSize([1, 2, 3], 4);\n     * // => [2, 3, 1]\n     */\n    function sampleSize(collection, n, guard) {\n      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n      return func(collection, n);\n    }\n\n    /**\n     * Creates an array of shuffled values, using a version of the\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4]);\n     * // => [4, 1, 3, 2]\n     */\n    function shuffle(collection) {\n      var func = isArray(collection) ? arrayShuffle : baseShuffle;\n      return func(collection);\n    }\n\n    /**\n     * Gets the size of `collection` by returning its length for array-like\n     * values or the number of own enumerable string keyed properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns the collection size.\n     * @example\n     *\n     * _.size([1, 2, 3]);\n     * // => 3\n     *\n     * _.size({ 'a': 1, 'b': 2 });\n     * // => 2\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n    function size(collection) {\n      if (collection == null) {\n        return 0;\n      }\n      if (isArrayLike(collection)) {\n        return isString(collection) ? stringSize(collection) : collection.length;\n      }\n      var tag = getTag(collection);\n      if (tag == mapTag || tag == setTag) {\n        return collection.size;\n      }\n      return baseKeys(collection).length;\n    }\n\n    /**\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': true },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.some(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.some(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.some(users, 'active');\n     * // => true\n     */\n    function some(collection, predicate, guard) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection thru each iteratee. This method\n     * performs a stable sort, that is, it preserves the original sort order of\n     * equal elements. The iteratees are invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 30 },\n     *   { 'user': 'barney', 'age': 34 }\n     * ];\n     *\n     * _.sortBy(users, [function(o) { return o.user; }]);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n     *\n     * _.sortBy(users, ['user', 'age']);\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n     */\n    var sortBy = baseRest(function(collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n      var length = iteratees.length;\n      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n        iteratees = [];\n      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n        iteratees = [iteratees[0]];\n      }\n      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Gets the timestamp of the number of milliseconds that have elapsed since\n     * the Unix epoch (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Date\n     * @returns {number} Returns the timestamp.\n     * @example\n     *\n     * _.defer(function(stamp) {\n     *   console.log(_.now() - stamp);\n     * }, _.now());\n     * // => Logs the number of milliseconds it took for the deferred invocation.\n     */\n    var now = ctxNow || function() {\n      return root.Date.now();\n    };\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The opposite of `_.before`; this method creates a function that invokes\n     * `func` once it's called `n` or more times.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {number} n The number of calls before `func` is invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => Logs 'done saving!' after the two async saves have completed.\n     */\n    function after(n, func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func`, with up to `n` arguments,\n     * ignoring any additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @param {number} [n=func.length] The arity cap.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n     * // => [6, 8, 10]\n     */\n    function ary(func, n, guard) {\n      n = guard ? undefined : n;\n      n = (func && n == null) ? func.length : n;\n      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n\n    /**\n     * Creates a function that invokes `func`, with the `this` binding and arguments\n     * of the created function, while it's called less than `n` times. Subsequent\n     * calls to the created function return the result of the last `func` invocation.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {number} n The number of calls at which `func` is no longer invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * jQuery(element).on('click', _.before(5, addContactToList));\n     * // => Allows adding up to 4 contacts to the list.\n     */\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and `partials` prepended to the arguments it receives.\n     *\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n     * property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * function greet(greeting, punctuation) {\n     *   return greeting + ' ' + this.user + punctuation;\n     * }\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * var bound = _.bind(greet, object, 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bind(greet, object, _, '!');\n     * bound('hi');\n     * // => 'hi fred!'\n     */\n    var bind = baseRest(function(func, thisArg, partials) {\n      var bitmask = WRAP_BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bind));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(func, bitmask, thisArg, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes the method at `object[key]` with `partials`\n     * prepended to the arguments it receives.\n     *\n     * This method differs from `_.bind` by allowing bound functions to reference\n     * methods that may be redefined or don't yet exist. See\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n     * for more details.\n     *\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Function\n     * @param {Object} object The object to invoke the method on.\n     * @param {string} key The key of the method.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'user': 'fred',\n     *   'greet': function(greeting, punctuation) {\n     *     return greeting + ' ' + this.user + punctuation;\n     *   }\n     * };\n     *\n     * var bound = _.bindKey(object, 'greet', 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * object.greet = function(greeting, punctuation) {\n     *   return greeting + 'ya ' + this.user + punctuation;\n     * };\n     *\n     * bound('!');\n     * // => 'hiya fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bindKey(object, 'greet', _, '!');\n     * bound('hi');\n     * // => 'hiya fred!'\n     */\n    var bindKey = baseRest(function(object, key, partials) {\n      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bindKey));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(key, bitmask, object, partials, holders);\n    });\n\n    /**\n     * Creates a function that accepts arguments of `func` and either invokes\n     * `func` returning its result, if at least `arity` number of arguments have\n     * been provided, or returns a function that accepts the remaining `func`\n     * arguments, and so on. The arity of `func` may be specified if `func.length`\n     * is not sufficient.\n     *\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curry(abc);\n     *\n     * curried(1)(2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(1)(_, 3)(2);\n     * // => [1, 2, 3]\n     */\n    function curry(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curry.placeholder;\n      return result;\n    }\n\n    /**\n     * This method is like `_.curry` except that arguments are applied to `func`\n     * in the manner of `_.partialRight` instead of `_.partial`.\n     *\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curryRight(abc);\n     *\n     * curried(3)(2)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(2, 3)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(3)(1, _)(2);\n     * // => [1, 2, 3]\n     */\n    function curryRight(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curryRight.placeholder;\n      return result;\n    }\n\n    /**\n     * Creates a debounced function that delays invoking `func` until after `wait`\n     * milliseconds have elapsed since the last time the debounced function was\n     * invoked. The debounced function comes with a `cancel` method to cancel\n     * delayed `func` invocations and a `flush` method to immediately invoke them.\n     * Provide `options` to indicate whether `func` should be invoked on the\n     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n     * with the last arguments provided to the debounced function. Subsequent\n     * calls to the debounced function return the result of the last `func`\n     * invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the debounced function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.debounce` and `_.throttle`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to debounce.\n     * @param {number} [wait=0] The number of milliseconds to delay.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=false]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {number} [options.maxWait]\n     *  The maximum time `func` is allowed to be delayed before it's invoked.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // Avoid costly calculations while the window size is in flux.\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n     *\n     * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n     * jQuery(element).on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * }));\n     *\n     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n     * var source = new EventSource('/stream');\n     * jQuery(source).on('message', debounced);\n     *\n     * // Cancel the trailing debounced invocation.\n     * jQuery(window).on('popstate', debounced.cancel);\n     */\n    function debounce(func, wait, options) {\n      var lastArgs,\n          lastThis,\n          maxWait,\n          result,\n          timerId,\n          lastCallTime,\n          lastInvokeTime = 0,\n          leading = false,\n          maxing = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      wait = toNumber(wait) || 0;\n      if (isObject(options)) {\n        leading = !!options.leading;\n        maxing = 'maxWait' in options;\n        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function invokeFunc(time) {\n        var args = lastArgs,\n            thisArg = lastThis;\n\n        lastArgs = lastThis = undefined;\n        lastInvokeTime = time;\n        result = func.apply(thisArg, args);\n        return result;\n      }\n\n      function leadingEdge(time) {\n        // Reset any `maxWait` timer.\n        lastInvokeTime = time;\n        // Start the timer for the trailing edge.\n        timerId = setTimeout(timerExpired, wait);\n        // Invoke the leading edge.\n        return leading ? invokeFunc(time) : result;\n      }\n\n      function remainingWait(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime,\n            timeWaiting = wait - timeSinceLastCall;\n\n        return maxing\n          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n          : timeWaiting;\n      }\n\n      function shouldInvoke(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime;\n\n        // Either this is the first call, activity has stopped and we're at the\n        // trailing edge, the system time has gone backwards and we're treating\n        // it as the trailing edge, or we've hit the `maxWait` limit.\n        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n      }\n\n      function timerExpired() {\n        var time = now();\n        if (shouldInvoke(time)) {\n          return trailingEdge(time);\n        }\n        // Restart the timer.\n        timerId = setTimeout(timerExpired, remainingWait(time));\n      }\n\n      function trailingEdge(time) {\n        timerId = undefined;\n\n        // Only invoke if we have `lastArgs` which means `func` has been\n        // debounced at least once.\n        if (trailing && lastArgs) {\n          return invokeFunc(time);\n        }\n        lastArgs = lastThis = undefined;\n        return result;\n      }\n\n      function cancel() {\n        if (timerId !== undefined) {\n          clearTimeout(timerId);\n        }\n        lastInvokeTime = 0;\n        lastArgs = lastCallTime = lastThis = timerId = undefined;\n      }\n\n      function flush() {\n        return timerId === undefined ? result : trailingEdge(now());\n      }\n\n      function debounced() {\n        var time = now(),\n            isInvoking = shouldInvoke(time);\n\n        lastArgs = arguments;\n        lastThis = this;\n        lastCallTime = time;\n\n        if (isInvoking) {\n          if (timerId === undefined) {\n            return leadingEdge(lastCallTime);\n          }\n          if (maxing) {\n            // Handle invocations in a tight loop.\n            clearTimeout(timerId);\n            timerId = setTimeout(timerExpired, wait);\n            return invokeFunc(lastCallTime);\n          }\n        }\n        if (timerId === undefined) {\n          timerId = setTimeout(timerExpired, wait);\n        }\n        return result;\n      }\n      debounced.cancel = cancel;\n      debounced.flush = flush;\n      return debounced;\n    }\n\n    /**\n     * Defers invoking the `func` until the current call stack has cleared. Any\n     * additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to defer.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) {\n     *   console.log(text);\n     * }, 'deferred');\n     * // => Logs 'deferred' after one millisecond.\n     */\n    var defer = baseRest(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n\n    /**\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\n     * provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) {\n     *   console.log(text);\n     * }, 1000, 'later');\n     * // => Logs 'later' after one second.\n     */\n    var delay = baseRest(function(func, wait, args) {\n      return baseDelay(func, toNumber(wait) || 0, args);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments reversed.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to flip arguments for.\n     * @returns {Function} Returns the new flipped function.\n     * @example\n     *\n     * var flipped = _.flip(function() {\n     *   return _.toArray(arguments);\n     * });\n     *\n     * flipped('a', 'b', 'c', 'd');\n     * // => ['d', 'c', 'b', 'a']\n     */\n    function flip(func) {\n      return createWrap(func, WRAP_FLIP_FLAG);\n    }\n\n    /**\n     * Creates a function that memoizes the result of `func`. If `resolver` is\n     * provided, it determines the cache key for storing the result based on the\n     * arguments provided to the memoized function. By default, the first argument\n     * provided to the memoized function is used as the map cache key. The `func`\n     * is invoked with the `this` binding of the memoized function.\n     *\n     * **Note:** The cache is exposed as the `cache` property on the memoized\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\n     * constructor with one whose instances implement the\n     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n     * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to have its output memoized.\n     * @param {Function} [resolver] The function to resolve the cache key.\n     * @returns {Function} Returns the new memoized function.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     * var other = { 'c': 3, 'd': 4 };\n     *\n     * var values = _.memoize(_.values);\n     * values(object);\n     * // => [1, 2]\n     *\n     * values(other);\n     * // => [3, 4]\n     *\n     * object.a = 2;\n     * values(object);\n     * // => [1, 2]\n     *\n     * // Modify the result cache.\n     * values.cache.set(object, ['a', 'b']);\n     * values(object);\n     * // => ['a', 'b']\n     *\n     * // Replace `_.memoize.Cache`.\n     * _.memoize.Cache = WeakMap;\n     */\n    function memoize(func, resolver) {\n      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var memoized = function() {\n        var args = arguments,\n            key = resolver ? resolver.apply(this, args) : args[0],\n            cache = memoized.cache;\n\n        if (cache.has(key)) {\n          return cache.get(key);\n        }\n        var result = func.apply(this, args);\n        memoized.cache = cache.set(key, result) || cache;\n        return result;\n      };\n      memoized.cache = new (memoize.Cache || MapCache);\n      return memoized;\n    }\n\n    // Expose `MapCache`.\n    memoize.Cache = MapCache;\n\n    /**\n     * Creates a function that negates the result of the predicate `func`. The\n     * `func` predicate is invoked with the `this` binding and arguments of the\n     * created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} predicate The predicate to negate.\n     * @returns {Function} Returns the new negated function.\n     * @example\n     *\n     * function isEven(n) {\n     *   return n % 2 == 0;\n     * }\n     *\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n     * // => [1, 3, 5]\n     */\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        var args = arguments;\n        switch (args.length) {\n          case 0: return !predicate.call(this);\n          case 1: return !predicate.call(this, args[0]);\n          case 2: return !predicate.call(this, args[0], args[1]);\n          case 3: return !predicate.call(this, args[0], args[1], args[2]);\n        }\n        return !predicate.apply(this, args);\n      };\n    }\n\n    /**\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\n     * to the function return the value of the first invocation. The `func` is\n     * invoked with the `this` binding and arguments of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // => `createApplication` is invoked once\n     */\n    function once(func) {\n      return before(2, func);\n    }\n\n    /**\n     * Creates a function that invokes `func` with its arguments transformed.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to wrap.\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\n     *  The argument transforms.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function doubled(n) {\n     *   return n * 2;\n     * }\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var func = _.overArgs(function(x, y) {\n     *   return [x, y];\n     * }, [square, doubled]);\n     *\n     * func(9, 3);\n     * // => [81, 6]\n     *\n     * func(10, 5);\n     * // => [100, 10]\n     */\n    var overArgs = castRest(function(func, transforms) {\n      transforms = (transforms.length == 1 && isArray(transforms[0]))\n        ? arrayMap(transforms[0], baseUnary(getIteratee()))\n        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n      var funcsLength = transforms.length;\n      return baseRest(function(args) {\n        var index = -1,\n            length = nativeMin(args.length, funcsLength);\n\n        while (++index < length) {\n          args[index] = transforms[index].call(this, args[index]);\n        }\n        return apply(func, this, args);\n      });\n    });\n\n    /**\n     * Creates a function that invokes `func` with `partials` prepended to the\n     * arguments it receives. This method is like `_.bind` except it does **not**\n     * alter the `this` binding.\n     *\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.2.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var sayHelloTo = _.partial(greet, 'hello');\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     *\n     * // Partially applied with placeholders.\n     * var greetFred = _.partial(greet, _, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     */\n    var partial = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partial));\n      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * This method is like `_.partial` except that partially applied arguments\n     * are appended to the arguments it receives.\n     *\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var greetFred = _.partialRight(greet, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     *\n     * // Partially applied with placeholders.\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     */\n    var partialRight = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partialRight));\n      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments arranged according\n     * to the specified `indexes` where the argument value at the first index is\n     * provided as the first argument, the argument value at the second index is\n     * provided as the second argument, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to rearrange arguments for.\n     * @param {...(number|number[])} indexes The arranged argument indexes.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var rearged = _.rearg(function(a, b, c) {\n     *   return [a, b, c];\n     * }, [2, 0, 1]);\n     *\n     * rearged('b', 'c', 'a')\n     * // => ['a', 'b', 'c']\n     */\n    var rearg = flatRest(function(func, indexes) {\n      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n    });\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * created function and arguments from `start` and beyond provided as\n     * an array.\n     *\n     * **Note:** This method is based on the\n     * [rest parameter](https://mdn.io/rest_parameters).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.rest(function(what, names) {\n     *   return what + ' ' + _.initial(names).join(', ') +\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n     * });\n     *\n     * say('hello', 'fred', 'barney', 'pebbles');\n     * // => 'hello fred, barney, & pebbles'\n     */\n    function rest(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start === undefined ? start : toInteger(start);\n      return baseRest(func, start);\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * create function and an array of arguments much like\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n     *\n     * **Note:** This method is based on the\n     * [spread operator](https://mdn.io/spread_operator).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Function\n     * @param {Function} func The function to spread arguments over.\n     * @param {number} [start=0] The start position of the spread.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.spread(function(who, what) {\n     *   return who + ' says ' + what;\n     * });\n     *\n     * say(['fred', 'hello']);\n     * // => 'fred says hello'\n     *\n     * var numbers = Promise.all([\n     *   Promise.resolve(40),\n     *   Promise.resolve(36)\n     * ]);\n     *\n     * numbers.then(_.spread(function(x, y) {\n     *   return x + y;\n     * }));\n     * // => a Promise of 76\n     */\n    function spread(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start == null ? 0 : nativeMax(toInteger(start), 0);\n      return baseRest(function(args) {\n        var array = args[start],\n            otherArgs = castSlice(args, 0, start);\n\n        if (array) {\n          arrayPush(otherArgs, array);\n        }\n        return apply(func, this, otherArgs);\n      });\n    }\n\n    /**\n     * Creates a throttled function that only invokes `func` at most once per\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\n     * method to cancel delayed `func` invocations and a `flush` method to\n     * immediately invoke them. Provide `options` to indicate whether `func`\n     * should be invoked on the leading and/or trailing edge of the `wait`\n     * timeout. The `func` is invoked with the last arguments provided to the\n     * throttled function. Subsequent calls to the throttled function return the\n     * result of the last `func` invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the throttled function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.throttle` and `_.debounce`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to throttle.\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=true]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // Avoid excessively updating the position while scrolling.\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n     *\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n     * jQuery(element).on('click', throttled);\n     *\n     * // Cancel the trailing throttled invocation.\n     * jQuery(window).on('popstate', throttled.cancel);\n     */\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, {\n        'leading': leading,\n        'maxWait': wait,\n        'trailing': trailing\n      });\n    }\n\n    /**\n     * Creates a function that accepts up to one argument, ignoring any\n     * additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.unary(parseInt));\n     * // => [6, 8, 10]\n     */\n    function unary(func) {\n      return ary(func, 1);\n    }\n\n    /**\n     * Creates a function that provides `value` to `wrapper` as its first\n     * argument. Any additional arguments provided to the function are appended\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n     * binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {*} value The value to wrap.\n     * @param {Function} [wrapper=identity] The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('fred, barney, & pebbles');\n     * // => '<p>fred, barney, &amp; pebbles</p>'\n     */\n    function wrap(value, wrapper) {\n      return partial(castFunction(wrapper), value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Casts `value` as an array if it's not one.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Lang\n     * @param {*} value The value to inspect.\n     * @returns {Array} Returns the cast array.\n     * @example\n     *\n     * _.castArray(1);\n     * // => [1]\n     *\n     * _.castArray({ 'a': 1 });\n     * // => [{ 'a': 1 }]\n     *\n     * _.castArray('abc');\n     * // => ['abc']\n     *\n     * _.castArray(null);\n     * // => [null]\n     *\n     * _.castArray(undefined);\n     * // => [undefined]\n     *\n     * _.castArray();\n     * // => []\n     *\n     * var array = [1, 2, 3];\n     * console.log(_.castArray(array) === array);\n     * // => true\n     */\n    function castArray() {\n      if (!arguments.length) {\n        return [];\n      }\n      var value = arguments[0];\n      return isArray(value) ? value : [value];\n    }\n\n    /**\n     * Creates a shallow clone of `value`.\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n     * arrays. The own enumerable properties of `arguments` objects are cloned\n     * as plain objects. An empty object is returned for uncloneable values such\n     * as error objects, functions, DOM nodes, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeep\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var shallow = _.clone(objects);\n     * console.log(shallow[0] === objects[0]);\n     * // => true\n     */\n    function clone(value) {\n      return baseClone(value, CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.clone` except that it accepts `customizer` which\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n     * cloning is handled by the method instead. The `customizer` is invoked with\n     * up to four arguments; (value [, index|key, object, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeepWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(false);\n     *   }\n     * }\n     *\n     * var el = _.cloneWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 0\n     */\n    function cloneWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * This method is like `_.clone` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.clone\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var deep = _.cloneDeep(objects);\n     * console.log(deep[0] === objects[0]);\n     * // => false\n     */\n    function cloneDeep(value) {\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.cloneWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(true);\n     *   }\n     * }\n     *\n     * var el = _.cloneDeepWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 20\n     */\n    function cloneDeepWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * Checks if `object` conforms to `source` by invoking the predicate\n     * properties of `source` with the corresponding property values of `object`.\n     *\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\n     * partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n     * // => true\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n     * // => false\n     */\n    function conformsTo(object, source) {\n      return source == null || baseConformsTo(object, source, keys(source));\n    }\n\n    /**\n     * Performs a\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * comparison between two values to determine if they are equivalent.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.eq(object, object);\n     * // => true\n     *\n     * _.eq(object, other);\n     * // => false\n     *\n     * _.eq('a', 'a');\n     * // => true\n     *\n     * _.eq('a', Object('a'));\n     * // => false\n     *\n     * _.eq(NaN, NaN);\n     * // => true\n     */\n    function eq(value, other) {\n      return value === other || (value !== value && other !== other);\n    }\n\n    /**\n     * Checks if `value` is greater than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     * @see _.lt\n     * @example\n     *\n     * _.gt(3, 1);\n     * // => true\n     *\n     * _.gt(3, 3);\n     * // => false\n     *\n     * _.gt(1, 3);\n     * // => false\n     */\n    var gt = createRelationalOperation(baseGt);\n\n    /**\n     * Checks if `value` is greater than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to\n     *  `other`, else `false`.\n     * @see _.lte\n     * @example\n     *\n     * _.gte(3, 1);\n     * // => true\n     *\n     * _.gte(3, 3);\n     * // => true\n     *\n     * _.gte(1, 3);\n     * // => false\n     */\n    var gte = createRelationalOperation(function(value, other) {\n      return value >= other;\n    });\n\n    /**\n     * Checks if `value` is likely an `arguments` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArguments(function() { return arguments; }());\n     * // => true\n     *\n     * _.isArguments([1, 2, 3]);\n     * // => false\n     */\n    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n        !propertyIsEnumerable.call(value, 'callee');\n    };\n\n    /**\n     * Checks if `value` is classified as an `Array` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n     * @example\n     *\n     * _.isArray([1, 2, 3]);\n     * // => true\n     *\n     * _.isArray(document.body.children);\n     * // => false\n     *\n     * _.isArray('abc');\n     * // => false\n     *\n     * _.isArray(_.noop);\n     * // => false\n     */\n    var isArray = Array.isArray;\n\n    /**\n     * Checks if `value` is classified as an `ArrayBuffer` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     * @example\n     *\n     * _.isArrayBuffer(new ArrayBuffer(2));\n     * // => true\n     *\n     * _.isArrayBuffer(new Array(2));\n     * // => false\n     */\n    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n    /**\n     * Checks if `value` is array-like. A value is considered array-like if it's\n     * not a function and has a `value.length` that's an integer greater than or\n     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n     * @example\n     *\n     * _.isArrayLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLike(document.body.children);\n     * // => true\n     *\n     * _.isArrayLike('abc');\n     * // => true\n     *\n     * _.isArrayLike(_.noop);\n     * // => false\n     */\n    function isArrayLike(value) {\n      return value != null && isLength(value.length) && !isFunction(value);\n    }\n\n    /**\n     * This method is like `_.isArrayLike` except that it also checks if `value`\n     * is an object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array-like object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArrayLikeObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLikeObject(document.body.children);\n     * // => true\n     *\n     * _.isArrayLikeObject('abc');\n     * // => false\n     *\n     * _.isArrayLikeObject(_.noop);\n     * // => false\n     */\n    function isArrayLikeObject(value) {\n      return isObjectLike(value) && isArrayLike(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a boolean primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n     * @example\n     *\n     * _.isBoolean(false);\n     * // => true\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n    function isBoolean(value) {\n      return value === true || value === false ||\n        (isObjectLike(value) && baseGetTag(value) == boolTag);\n    }\n\n    /**\n     * Checks if `value` is a buffer.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n     * @example\n     *\n     * _.isBuffer(new Buffer(2));\n     * // => true\n     *\n     * _.isBuffer(new Uint8Array(2));\n     * // => false\n     */\n    var isBuffer = nativeIsBuffer || stubFalse;\n\n    /**\n     * Checks if `value` is classified as a `Date` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     *\n     * _.isDate('Mon April 23 2012');\n     * // => false\n     */\n    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n    /**\n     * Checks if `value` is likely a DOM element.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     *\n     * _.isElement('<body>');\n     * // => false\n     */\n    function isElement(value) {\n      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n    }\n\n    /**\n     * Checks if `value` is an empty object, collection, map, or set.\n     *\n     * Objects are considered empty if they have no own enumerable string keyed\n     * properties.\n     *\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n     * @example\n     *\n     * _.isEmpty(null);\n     * // => true\n     *\n     * _.isEmpty(true);\n     * // => true\n     *\n     * _.isEmpty(1);\n     * // => true\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({ 'a': 1 });\n     * // => false\n     */\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) &&\n          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n            isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n        return !value.length;\n      }\n      var tag = getTag(value);\n      if (tag == mapTag || tag == setTag) {\n        return !value.size;\n      }\n      if (isPrototype(value)) {\n        return !baseKeys(value).length;\n      }\n      for (var key in value) {\n        if (hasOwnProperty.call(value, key)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent.\n     *\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\n     * by their own, not inherited, enumerable properties. Functions and DOM\n     * nodes are compared by strict equality, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.isEqual(object, other);\n     * // => true\n     *\n     * object === other;\n     * // => false\n     */\n    function isEqual(value, other) {\n      return baseIsEqual(value, other);\n    }\n\n    /**\n     * This method is like `_.isEqual` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with up to\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, othValue) {\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var array = ['hello', 'goodbye'];\n     * var other = ['hi', 'goodbye'];\n     *\n     * _.isEqualWith(array, other, customizer);\n     * // => true\n     */\n    function isEqualWith(value, other, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n    }\n\n    /**\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n     * `SyntaxError`, `TypeError`, or `URIError` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n     * @example\n     *\n     * _.isError(new Error);\n     * // => true\n     *\n     * _.isError(Error);\n     * // => false\n     */\n    function isError(value) {\n      if (!isObjectLike(value)) {\n        return false;\n      }\n      var tag = baseGetTag(value);\n      return tag == errorTag || tag == domExcTag ||\n        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n    }\n\n    /**\n     * Checks if `value` is a finite primitive number.\n     *\n     * **Note:** This method is based on\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n     * @example\n     *\n     * _.isFinite(3);\n     * // => true\n     *\n     * _.isFinite(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     *\n     * _.isFinite('3');\n     * // => false\n     */\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Function` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n     * @example\n     *\n     * _.isFunction(_);\n     * // => true\n     *\n     * _.isFunction(/abc/);\n     * // => false\n     */\n    function isFunction(value) {\n      if (!isObject(value)) {\n        return false;\n      }\n      // The use of `Object#toString` avoids issues with the `typeof` operator\n      // in Safari 9 which returns 'object' for typed arrays and other constructors.\n      var tag = baseGetTag(value);\n      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n    }\n\n    /**\n     * Checks if `value` is an integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n     * @example\n     *\n     * _.isInteger(3);\n     * // => true\n     *\n     * _.isInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isInteger(Infinity);\n     * // => false\n     *\n     * _.isInteger('3');\n     * // => false\n     */\n    function isInteger(value) {\n      return typeof value == 'number' && value == toInteger(value);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like length.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n     * @example\n     *\n     * _.isLength(3);\n     * // => true\n     *\n     * _.isLength(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isLength(Infinity);\n     * // => false\n     *\n     * _.isLength('3');\n     * // => false\n     */\n    function isLength(value) {\n      return typeof value == 'number' &&\n        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is the\n     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n     * @example\n     *\n     * _.isObject({});\n     * // => true\n     *\n     * _.isObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isObject(_.noop);\n     * // => true\n     *\n     * _.isObject(null);\n     * // => false\n     */\n    function isObject(value) {\n      var type = typeof value;\n      return value != null && (type == 'object' || type == 'function');\n    }\n\n    /**\n     * Checks if `value` is object-like. A value is object-like if it's not `null`\n     * and has a `typeof` result of \"object\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n     * @example\n     *\n     * _.isObjectLike({});\n     * // => true\n     *\n     * _.isObjectLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isObjectLike(_.noop);\n     * // => false\n     *\n     * _.isObjectLike(null);\n     * // => false\n     */\n    function isObjectLike(value) {\n      return value != null && typeof value == 'object';\n    }\n\n    /**\n     * Checks if `value` is classified as a `Map` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     * @example\n     *\n     * _.isMap(new Map);\n     * // => true\n     *\n     * _.isMap(new WeakMap);\n     * // => false\n     */\n    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n    /**\n     * Performs a partial deep comparison between `object` and `source` to\n     * determine if `object` contains equivalent property values.\n     *\n     * **Note:** This method is equivalent to `_.matches` when `source` is\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.isMatch(object, { 'b': 2 });\n     * // => true\n     *\n     * _.isMatch(object, { 'b': 1 });\n     * // => false\n     */\n    function isMatch(object, source) {\n      return object === source || baseIsMatch(object, source, getMatchData(source));\n    }\n\n    /**\n     * This method is like `_.isMatch` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with five\n     * arguments: (objValue, srcValue, index|key, object, source).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var object = { 'greeting': 'hello' };\n     * var source = { 'greeting': 'hi' };\n     *\n     * _.isMatchWith(object, source, customizer);\n     * // => true\n     */\n    function isMatchWith(object, source, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseIsMatch(object, source, getMatchData(source), customizer);\n    }\n\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * **Note:** This method is based on\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n     * `undefined` and other non-number values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n    function isNaN(value) {\n      // An `NaN` primitive is the only value that is not equal to itself.\n      // Perform the `toStringTag` check first to avoid errors with some\n      // ActiveX objects in IE.\n      return isNumber(value) && value != +value;\n    }\n\n    /**\n     * Checks if `value` is a pristine native function.\n     *\n     * **Note:** This method can't reliably detect native functions in the presence\n     * of the core-js package because core-js circumvents this kind of detection.\n     * Despite multiple requests, the core-js maintainer has made it clear: any\n     * attempt to fix the detection will be obstructed. As a result, we're left\n     * with little choice but to throw an error. Unfortunately, this also affects\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n     * which rely on core-js.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     * @example\n     *\n     * _.isNative(Array.prototype.push);\n     * // => true\n     *\n     * _.isNative(_);\n     * // => false\n     */\n    function isNative(value) {\n      if (isMaskable(value)) {\n        throw new Error(CORE_ERROR_TEXT);\n      }\n      return baseIsNative(value);\n    }\n\n    /**\n     * Checks if `value` is `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(void 0);\n     * // => false\n     */\n    function isNull(value) {\n      return value === null;\n    }\n\n    /**\n     * Checks if `value` is `null` or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n     * @example\n     *\n     * _.isNil(null);\n     * // => true\n     *\n     * _.isNil(void 0);\n     * // => true\n     *\n     * _.isNil(NaN);\n     * // => false\n     */\n    function isNil(value) {\n      return value == null;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Number` primitive or object.\n     *\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n     * classified as numbers, use the `_.isFinite` method.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n     * @example\n     *\n     * _.isNumber(3);\n     * // => true\n     *\n     * _.isNumber(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isNumber(Infinity);\n     * // => true\n     *\n     * _.isNumber('3');\n     * // => false\n     */\n    function isNumber(value) {\n      return typeof value == 'number' ||\n        (isObjectLike(value) && baseGetTag(value) == numberTag);\n    }\n\n    /**\n     * Checks if `value` is a plain object, that is, an object created by the\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.8.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * _.isPlainObject(new Foo);\n     * // => false\n     *\n     * _.isPlainObject([1, 2, 3]);\n     * // => false\n     *\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\n     * // => true\n     *\n     * _.isPlainObject(Object.create(null));\n     * // => true\n     */\n    function isPlainObject(value) {\n      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n        return false;\n      }\n      var proto = getPrototype(value);\n      if (proto === null) {\n        return true;\n      }\n      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n      return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n        funcToString.call(Ctor) == objectCtorString;\n    }\n\n    /**\n     * Checks if `value` is classified as a `RegExp` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     * @example\n     *\n     * _.isRegExp(/abc/);\n     * // => true\n     *\n     * _.isRegExp('/abc/');\n     * // => false\n     */\n    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n    /**\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n     * double precision number which isn't the result of a rounded unsafe integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n     * @example\n     *\n     * _.isSafeInteger(3);\n     * // => true\n     *\n     * _.isSafeInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isSafeInteger(Infinity);\n     * // => false\n     *\n     * _.isSafeInteger('3');\n     * // => false\n     */\n    function isSafeInteger(value) {\n      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Set` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     * @example\n     *\n     * _.isSet(new Set);\n     * // => true\n     *\n     * _.isSet(new WeakSet);\n     * // => false\n     */\n    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n    /**\n     * Checks if `value` is classified as a `String` primitive or object.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('abc');\n     * // => true\n     *\n     * _.isString(1);\n     * // => false\n     */\n    function isString(value) {\n      return typeof value == 'string' ||\n        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Symbol` primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n     * @example\n     *\n     * _.isSymbol(Symbol.iterator);\n     * // => true\n     *\n     * _.isSymbol('abc');\n     * // => false\n     */\n    function isSymbol(value) {\n      return typeof value == 'symbol' ||\n        (isObjectLike(value) && baseGetTag(value) == symbolTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a typed array.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     * @example\n     *\n     * _.isTypedArray(new Uint8Array);\n     * // => true\n     *\n     * _.isTypedArray([]);\n     * // => false\n     */\n    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     *\n     * _.isUndefined(null);\n     * // => false\n     */\n    function isUndefined(value) {\n      return value === undefined;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakMap` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n     * @example\n     *\n     * _.isWeakMap(new WeakMap);\n     * // => true\n     *\n     * _.isWeakMap(new Map);\n     * // => false\n     */\n    function isWeakMap(value) {\n      return isObjectLike(value) && getTag(value) == weakMapTag;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakSet` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n     * @example\n     *\n     * _.isWeakSet(new WeakSet);\n     * // => true\n     *\n     * _.isWeakSet(new Set);\n     * // => false\n     */\n    function isWeakSet(value) {\n      return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n    }\n\n    /**\n     * Checks if `value` is less than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     * @see _.gt\n     * @example\n     *\n     * _.lt(1, 3);\n     * // => true\n     *\n     * _.lt(3, 3);\n     * // => false\n     *\n     * _.lt(3, 1);\n     * // => false\n     */\n    var lt = createRelationalOperation(baseLt);\n\n    /**\n     * Checks if `value` is less than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than or equal to\n     *  `other`, else `false`.\n     * @see _.gte\n     * @example\n     *\n     * _.lte(1, 3);\n     * // => true\n     *\n     * _.lte(3, 3);\n     * // => true\n     *\n     * _.lte(3, 1);\n     * // => false\n     */\n    var lte = createRelationalOperation(function(value, other) {\n      return value <= other;\n    });\n\n    /**\n     * Converts `value` to an array.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the converted array.\n     * @example\n     *\n     * _.toArray({ 'a': 1, 'b': 2 });\n     * // => [1, 2]\n     *\n     * _.toArray('abc');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toArray(1);\n     * // => []\n     *\n     * _.toArray(null);\n     * // => []\n     */\n    function toArray(value) {\n      if (!value) {\n        return [];\n      }\n      if (isArrayLike(value)) {\n        return isString(value) ? stringToArray(value) : copyArray(value);\n      }\n      if (symIterator && value[symIterator]) {\n        return iteratorToArray(value[symIterator]());\n      }\n      var tag = getTag(value),\n          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n      return func(value);\n    }\n\n    /**\n     * Converts `value` to a finite number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.12.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted number.\n     * @example\n     *\n     * _.toFinite(3.2);\n     * // => 3.2\n     *\n     * _.toFinite(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toFinite(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toFinite('3.2');\n     * // => 3.2\n     */\n    function toFinite(value) {\n      if (!value) {\n        return value === 0 ? value : 0;\n      }\n      value = toNumber(value);\n      if (value === INFINITY || value === -INFINITY) {\n        var sign = (value < 0 ? -1 : 1);\n        return sign * MAX_INTEGER;\n      }\n      return value === value ? value : 0;\n    }\n\n    /**\n     * Converts `value` to an integer.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toInteger(3.2);\n     * // => 3\n     *\n     * _.toInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toInteger(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toInteger('3.2');\n     * // => 3\n     */\n    function toInteger(value) {\n      var result = toFinite(value),\n          remainder = result % 1;\n\n      return result === result ? (remainder ? result - remainder : result) : 0;\n    }\n\n    /**\n     * Converts `value` to an integer suitable for use as the length of an\n     * array-like object.\n     *\n     * **Note:** This method is based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toLength(3.2);\n     * // => 3\n     *\n     * _.toLength(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toLength(Infinity);\n     * // => 4294967295\n     *\n     * _.toLength('3.2');\n     * // => 3\n     */\n    function toLength(value) {\n      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n    }\n\n    /**\n     * Converts `value` to a number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     * @example\n     *\n     * _.toNumber(3.2);\n     * // => 3.2\n     *\n     * _.toNumber(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toNumber(Infinity);\n     * // => Infinity\n     *\n     * _.toNumber('3.2');\n     * // => 3.2\n     */\n    function toNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      if (isObject(value)) {\n        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n        value = isObject(other) ? (other + '') : other;\n      }\n      if (typeof value != 'string') {\n        return value === 0 ? value : +value;\n      }\n      value = baseTrim(value);\n      var isBinary = reIsBinary.test(value);\n      return (isBinary || reIsOctal.test(value))\n        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n        : (reIsBadHex.test(value) ? NAN : +value);\n    }\n\n    /**\n     * Converts `value` to a plain object flattening inherited enumerable string\n     * keyed properties of `value` to own properties of the plain object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Object} Returns the converted plain object.\n     * @example\n     *\n     * function Foo() {\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.assign({ 'a': 1 }, new Foo);\n     * // => { 'a': 1, 'b': 2 }\n     *\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\n     */\n    function toPlainObject(value) {\n      return copyObject(value, keysIn(value));\n    }\n\n    /**\n     * Converts `value` to a safe integer. A safe integer can be compared and\n     * represented correctly.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toSafeInteger(3.2);\n     * // => 3\n     *\n     * _.toSafeInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toSafeInteger(Infinity);\n     * // => 9007199254740991\n     *\n     * _.toSafeInteger('3.2');\n     * // => 3\n     */\n    function toSafeInteger(value) {\n      return value\n        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n        : (value === 0 ? value : 0);\n    }\n\n    /**\n     * Converts `value` to a string. An empty string is returned for `null`\n     * and `undefined` values. The sign of `-0` is preserved.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.toString(null);\n     * // => ''\n     *\n     * _.toString(-0);\n     * // => '-0'\n     *\n     * _.toString([1, 2, 3]);\n     * // => '1,2,3'\n     */\n    function toString(value) {\n      return value == null ? '' : baseToString(value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Assigns own enumerable string keyed properties of source objects to the\n     * destination object. Source objects are applied from left to right.\n     * Subsequent sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object` and is loosely based on\n     * [`Object.assign`](https://mdn.io/Object/assign).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assignIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var assign = createAssigner(function(object, source) {\n      if (isPrototype(source) || isArrayLike(source)) {\n        copyObject(source, keys(source), object);\n        return;\n      }\n      for (var key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          assignValue(object, key, source[key]);\n        }\n      }\n    });\n\n    /**\n     * This method is like `_.assign` except that it iterates over own and\n     * inherited source properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extend\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assign\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n     */\n    var assignIn = createAssigner(function(object, source) {\n      copyObject(source, keysIn(source), object);\n    });\n\n    /**\n     * This method is like `_.assignIn` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extendWith\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignInWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keysIn(source), object, customizer);\n    });\n\n    /**\n     * This method is like `_.assign` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignInWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keys(source), object, customizer);\n    });\n\n    /**\n     * Creates an array of values corresponding to `paths` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Array} Returns the picked values.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _.at(object, ['a[0].b.c', 'a[1]']);\n     * // => [3, 4]\n     */\n    var at = flatRest(baseAt);\n\n    /**\n     * Creates an object that inherits from the `prototype` object. If a\n     * `properties` object is given, its own enumerable string keyed properties\n     * are assigned to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Object\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, {\n     *   'constructor': Circle\n     * });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n    function create(prototype, properties) {\n      var result = baseCreate(prototype);\n      return properties == null ? result : baseAssign(result, properties);\n    }\n\n    /**\n     * Assigns own and inherited enumerable string keyed properties of source\n     * objects to the destination object for all destination properties that\n     * resolve to `undefined`. Source objects are applied from left to right.\n     * Once a property is set, additional values of the same property are ignored.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaultsDeep\n     * @example\n     *\n     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var defaults = baseRest(function(object, sources) {\n      object = Object(object);\n\n      var index = -1;\n      var length = sources.length;\n      var guard = length > 2 ? sources[2] : undefined;\n\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        length = 1;\n      }\n\n      while (++index < length) {\n        var source = sources[index];\n        var props = keysIn(source);\n        var propsIndex = -1;\n        var propsLength = props.length;\n\n        while (++propsIndex < propsLength) {\n          var key = props[propsIndex];\n          var value = object[key];\n\n          if (value === undefined ||\n              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n            object[key] = source[key];\n          }\n        }\n      }\n\n      return object;\n    });\n\n    /**\n     * This method is like `_.defaults` except that it recursively assigns\n     * default properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaults\n     * @example\n     *\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n     * // => { 'a': { 'b': 2, 'c': 3 } }\n     */\n    var defaultsDeep = baseRest(function(args) {\n      args.push(undefined, customDefaultsMerge);\n      return apply(mergeWith, undefined, args);\n    });\n\n    /**\n     * This method is like `_.find` except that it returns the key of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findKey(users, function(o) { return o.age < 40; });\n     * // => 'barney' (iteration order is not guaranteed)\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findKey(users, { 'age': 1, 'active': true });\n     * // => 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findKey(users, 'active');\n     * // => 'barney'\n     */\n    function findKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n    }\n\n    /**\n     * This method is like `_.findKey` except that it iterates over elements of\n     * a collection in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findLastKey(users, function(o) { return o.age < 40; });\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastKey(users, { 'age': 36, 'active': true });\n     * // => 'barney'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastKey(users, 'active');\n     * // => 'pebbles'\n     */\n    function findLastKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n    }\n\n    /**\n     * Iterates over own and inherited enumerable string keyed properties of an\n     * object and invokes `iteratee` for each property. The iteratee is invoked\n     * with three arguments: (value, key, object). Iteratee functions may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forInRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forIn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n     */\n    function forIn(object, iteratee) {\n      return object == null\n        ? object\n        : baseFor(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * This method is like `_.forIn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forInRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n     */\n    function forInRight(object, iteratee) {\n      return object == null\n        ? object\n        : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * Iterates over own enumerable string keyed properties of an object and\n     * invokes `iteratee` for each property. The iteratee is invoked with three\n     * arguments: (value, key, object). Iteratee functions may exit iteration\n     * early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwnRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forOwn(object, iteratee) {\n      return object && baseForOwn(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forOwn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwnRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n     */\n    function forOwnRight(object, iteratee) {\n      return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an array of function property names from own enumerable properties\n     * of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functionsIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functions(new Foo);\n     * // => ['a', 'b']\n     */\n    function functions(object) {\n      return object == null ? [] : baseFunctions(object, keys(object));\n    }\n\n    /**\n     * Creates an array of function property names from own and inherited\n     * enumerable properties of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functions\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functionsIn(new Foo);\n     * // => ['a', 'b', 'c']\n     */\n    function functionsIn(object) {\n      return object == null ? [] : baseFunctions(object, keysIn(object));\n    }\n\n    /**\n     * Gets the value at `path` of `object`. If the resolved value is\n     * `undefined`, the `defaultValue` is returned in its place.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.get(object, 'a[0].b.c');\n     * // => 3\n     *\n     * _.get(object, ['a', '0', 'b', 'c']);\n     * // => 3\n     *\n     * _.get(object, 'a.b.c', 'default');\n     * // => 'default'\n     */\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, path);\n      return result === undefined ? defaultValue : result;\n    }\n\n    /**\n     * Checks if `path` is a direct property of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = { 'a': { 'b': 2 } };\n     * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.has(object, 'a');\n     * // => true\n     *\n     * _.has(object, 'a.b');\n     * // => true\n     *\n     * _.has(object, ['a', 'b']);\n     * // => true\n     *\n     * _.has(other, 'a');\n     * // => false\n     */\n    function has(object, path) {\n      return object != null && hasPath(object, path, baseHas);\n    }\n\n    /**\n     * Checks if `path` is a direct or inherited property of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.hasIn(object, 'a');\n     * // => true\n     *\n     * _.hasIn(object, 'a.b');\n     * // => true\n     *\n     * _.hasIn(object, ['a', 'b']);\n     * // => true\n     *\n     * _.hasIn(object, 'b');\n     * // => false\n     */\n    function hasIn(object, path) {\n      return object != null && hasPath(object, path, baseHasIn);\n    }\n\n    /**\n     * Creates an object composed of the inverted keys and values of `object`.\n     * If `object` contains duplicate values, subsequent values overwrite\n     * property assignments of previous values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invert(object);\n     * // => { '1': 'c', '2': 'b' }\n     */\n    var invert = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      result[value] = key;\n    }, constant(identity));\n\n    /**\n     * This method is like `_.invert` except that the inverted object is generated\n     * from the results of running each element of `object` thru `iteratee`. The\n     * corresponding inverted value of each inverted key is an array of keys\n     * responsible for generating the inverted value. The iteratee is invoked\n     * with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invertBy(object);\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     *\n     * _.invertBy(object, function(value) {\n     *   return 'group' + value;\n     * });\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n     */\n    var invertBy = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      if (hasOwnProperty.call(result, value)) {\n        result[value].push(key);\n      } else {\n        result[value] = [key];\n      }\n    }, getIteratee);\n\n    /**\n     * Invokes the method at `path` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n     *\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n     * // => [2, 3]\n     */\n    var invoke = baseRest(baseInvoke);\n\n    /**\n     * Creates an array of the own enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects. See the\n     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * for more details.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keys(new Foo);\n     * // => ['a', 'b'] (iteration order is not guaranteed)\n     *\n     * _.keys('hi');\n     * // => ['0', '1']\n     */\n    function keys(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keysIn(new Foo);\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n     */\n    function keysIn(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n    }\n\n    /**\n     * The opposite of `_.mapValues`; this method creates an object with the\n     * same values as `object` and keys generated by running each own enumerable\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n     * with three arguments: (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapValues\n     * @example\n     *\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   return key + value;\n     * });\n     * // => { 'a1': 1, 'b2': 2 }\n     */\n    function mapKeys(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, iteratee(value, key, object), value);\n      });\n      return result;\n    }\n\n    /**\n     * Creates an object with the same keys as `object` and values generated\n     * by running each own enumerable string keyed property of `object` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapKeys\n     * @example\n     *\n     * var users = {\n     *   'fred':    { 'user': 'fred',    'age': 40 },\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n     * };\n     *\n     * _.mapValues(users, function(o) { return o.age; });\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.mapValues(users, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     */\n    function mapValues(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, key, iteratee(value, key, object));\n      });\n      return result;\n    }\n\n    /**\n     * This method is like `_.assign` except that it recursively merges own and\n     * inherited enumerable string keyed properties of source objects into the\n     * destination object. Source properties that resolve to `undefined` are\n     * skipped if a destination value exists. Array and plain object properties\n     * are merged recursively. Other objects and value types are overridden by\n     * assignment. Source objects are applied from left to right. Subsequent\n     * sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {\n     *   'a': [{ 'b': 2 }, { 'd': 4 }]\n     * };\n     *\n     * var other = {\n     *   'a': [{ 'c': 3 }, { 'e': 5 }]\n     * };\n     *\n     * _.merge(object, other);\n     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n     */\n    var merge = createAssigner(function(object, source, srcIndex) {\n      baseMerge(object, source, srcIndex);\n    });\n\n    /**\n     * This method is like `_.merge` except that it accepts `customizer` which\n     * is invoked to produce the merged values of the destination and source\n     * properties. If `customizer` returns `undefined`, merging is handled by the\n     * method instead. The `customizer` is invoked with six arguments:\n     * (objValue, srcValue, key, object, source, stack).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (_.isArray(objValue)) {\n     *     return objValue.concat(srcValue);\n     *   }\n     * }\n     *\n     * var object = { 'a': [1], 'b': [2] };\n     * var other = { 'a': [3], 'b': [4] };\n     *\n     * _.mergeWith(object, other, customizer);\n     * // => { 'a': [1, 3], 'b': [2, 4] }\n     */\n    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n      baseMerge(object, source, srcIndex, customizer);\n    });\n\n    /**\n     * The opposite of `_.pick`; this method creates an object composed of the\n     * own and inherited enumerable property paths of `object` that are not omitted.\n     *\n     * **Note:** This method is considerably slower than `_.pick`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to omit.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omit(object, ['a', 'c']);\n     * // => { 'b': '2' }\n     */\n    var omit = flatRest(function(object, paths) {\n      var result = {};\n      if (object == null) {\n        return result;\n      }\n      var isDeep = false;\n      paths = arrayMap(paths, function(path) {\n        path = castPath(path, object);\n        isDeep || (isDeep = path.length > 1);\n        return path;\n      });\n      copyObject(object, getAllKeysIn(object), result);\n      if (isDeep) {\n        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n      }\n      var length = paths.length;\n      while (length--) {\n        baseUnset(result, paths[length]);\n      }\n      return result;\n    });\n\n    /**\n     * The opposite of `_.pickBy`; this method creates an object composed of\n     * the own and inherited enumerable string keyed properties of `object` that\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\n     * arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omitBy(object, _.isNumber);\n     * // => { 'b': '2' }\n     */\n    function omitBy(object, predicate) {\n      return pickBy(object, negate(getIteratee(predicate)));\n    }\n\n    /**\n     * Creates an object composed of the picked `object` properties.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pick(object, ['a', 'c']);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var pick = flatRest(function(object, paths) {\n      return object == null ? {} : basePick(object, paths);\n    });\n\n    /**\n     * Creates an object composed of the `object` properties `predicate` returns\n     * truthy for. The predicate is invoked with two arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pickBy(object, _.isNumber);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    function pickBy(object, predicate) {\n      if (object == null) {\n        return {};\n      }\n      var props = arrayMap(getAllKeysIn(object), function(prop) {\n        return [prop];\n      });\n      predicate = getIteratee(predicate);\n      return basePickBy(object, props, function(value, path) {\n        return predicate(value, path[0]);\n      });\n    }\n\n    /**\n     * This method is like `_.get` except that if the resolved value is a\n     * function it's invoked with the `this` binding of its parent object and\n     * its result is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to resolve.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n     *\n     * _.result(object, 'a[0].b.c1');\n     * // => 3\n     *\n     * _.result(object, 'a[0].b.c2');\n     * // => 4\n     *\n     * _.result(object, 'a[0].b.c3', 'default');\n     * // => 'default'\n     *\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\n     * // => 'default'\n     */\n    function result(object, path, defaultValue) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length;\n\n      // Ensure the loop is entered when path is empty.\n      if (!length) {\n        length = 1;\n        object = undefined;\n      }\n      while (++index < length) {\n        var value = object == null ? undefined : object[toKey(path[index])];\n        if (value === undefined) {\n          index = length;\n          value = defaultValue;\n        }\n        object = isFunction(value) ? value.call(object) : value;\n      }\n      return object;\n    }\n\n    /**\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n     * it's created. Arrays are created for missing index properties while objects\n     * are created for all other missing properties. Use `_.setWith` to customize\n     * `path` creation.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.set(object, 'a[0].b.c', 4);\n     * console.log(object.a[0].b.c);\n     * // => 4\n     *\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\n     * console.log(object.x[0].y.z);\n     * // => 5\n     */\n    function set(object, path, value) {\n      return object == null ? object : baseSet(object, path, value);\n    }\n\n    /**\n     * This method is like `_.set` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.setWith(object, '[0][1]', 'a', Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function setWith(object, path, value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseSet(object, path, value, customizer);\n    }\n\n    /**\n     * Creates an array of own enumerable string keyed-value pairs for `object`\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n     * entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entries\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairs(new Foo);\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n     */\n    var toPairs = createToPairs(keys);\n\n    /**\n     * Creates an array of own and inherited enumerable string keyed-value pairs\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n     * or set, its entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entriesIn\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairsIn(new Foo);\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n     */\n    var toPairsIn = createToPairs(keysIn);\n\n    /**\n     * An alternative to `_.reduce`; this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable string keyed properties thru `iteratee`, with each invocation\n     * potentially mutating the `accumulator` object. If `accumulator` is not\n     * provided, a new object with the same `[[Prototype]]` will be used. The\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.transform([2, 3, 4], function(result, n) {\n     *   result.push(n *= n);\n     *   return n % 2 == 0;\n     * }, []);\n     * // => [4, 9]\n     *\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     */\n    function transform(object, iteratee, accumulator) {\n      var isArr = isArray(object),\n          isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n      iteratee = getIteratee(iteratee, 4);\n      if (accumulator == null) {\n        var Ctor = object && object.constructor;\n        if (isArrLike) {\n          accumulator = isArr ? new Ctor : [];\n        }\n        else if (isObject(object)) {\n          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n        }\n        else {\n          accumulator = {};\n        }\n      }\n      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * Removes the property at `path` of `object`.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n     * _.unset(object, 'a[0].b.c');\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     *\n     * _.unset(object, ['a', '0', 'b', 'c']);\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     */\n    function unset(object, path) {\n      return object == null ? true : baseUnset(object, path);\n    }\n\n    /**\n     * This method is like `_.set` except that accepts `updater` to produce the\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n     * is invoked with one argument: (value).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n     * console.log(object.a[0].b.c);\n     * // => 9\n     *\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n     * console.log(object.x[0].y.z);\n     * // => 0\n     */\n    function update(object, path, updater) {\n      return object == null ? object : baseUpdate(object, path, castFunction(updater));\n    }\n\n    /**\n     * This method is like `_.update` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function updateWith(object, path, updater, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n    }\n\n    /**\n     * Creates an array of the own enumerable string keyed property values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.values(new Foo);\n     * // => [1, 2] (iteration order is not guaranteed)\n     *\n     * _.values('hi');\n     * // => ['h', 'i']\n     */\n    function values(object) {\n      return object == null ? [] : baseValues(object, keys(object));\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable string keyed property\n     * values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.valuesIn(new Foo);\n     * // => [1, 2, 3] (iteration order is not guaranteed)\n     */\n    function valuesIn(object) {\n      return object == null ? [] : baseValues(object, keysIn(object));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Number\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     * @example\n     *\n     * _.clamp(-10, -5, 5);\n     * // => -5\n     *\n     * _.clamp(10, -5, 5);\n     * // => 5\n     */\n    function clamp(number, lower, upper) {\n      if (upper === undefined) {\n        upper = lower;\n        lower = undefined;\n      }\n      if (upper !== undefined) {\n        upper = toNumber(upper);\n        upper = upper === upper ? upper : 0;\n      }\n      if (lower !== undefined) {\n        lower = toNumber(lower);\n        lower = lower === lower ? lower : 0;\n      }\n      return baseClamp(toNumber(number), lower, upper);\n    }\n\n    /**\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\n     * If `start` is greater than `end` the params are swapped to support\n     * negative ranges.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.3.0\n     * @category Number\n     * @param {number} number The number to check.\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     * @see _.range, _.rangeRight\n     * @example\n     *\n     * _.inRange(3, 2, 4);\n     * // => true\n     *\n     * _.inRange(4, 8);\n     * // => true\n     *\n     * _.inRange(4, 2);\n     * // => false\n     *\n     * _.inRange(2, 2);\n     * // => false\n     *\n     * _.inRange(1.2, 2);\n     * // => true\n     *\n     * _.inRange(5.2, 4);\n     * // => false\n     *\n     * _.inRange(-3, -2, -6);\n     * // => true\n     */\n    function inRange(number, start, end) {\n      start = toFinite(start);\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = toFinite(end);\n      }\n      number = toNumber(number);\n      return baseInRange(number, start, end);\n    }\n\n    /**\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\n     * If only one argument is provided a number between `0` and the given number\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\n     * floats, a floating-point number is returned instead of an integer.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * **Note:** If `lower` is greater than `upper`, the values are swapped.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Number\n     * @param {number} [lower=0] The lower bound.\n     * @param {number} [upper=1] The upper bound.\n     * @param {boolean} [floating] Specify returning a floating-point number.\n     * @returns {number} Returns the random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * // when lower is greater than upper the values are swapped\n     * _.random(5, 0);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(-5);\n     * // => an integer between -5 and 0\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n    function random(lower, upper, floating) {\n      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n        upper = floating = undefined;\n      }\n      if (floating === undefined) {\n        if (typeof upper == 'boolean') {\n          floating = upper;\n          upper = undefined;\n        }\n        else if (typeof lower == 'boolean') {\n          floating = lower;\n          lower = undefined;\n        }\n      }\n      if (lower === undefined && upper === undefined) {\n        lower = 0;\n        upper = 1;\n      }\n      else {\n        lower = toFinite(lower);\n        if (upper === undefined) {\n          upper = lower;\n          lower = 0;\n        } else {\n          upper = toFinite(upper);\n        }\n      }\n      if (lower > upper) {\n        var temp = lower;\n        lower = upper;\n        upper = temp;\n      }\n      if (floating || lower % 1 || upper % 1) {\n        var rand = nativeRandom();\n        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n      }\n      return baseRandom(lower, upper);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the camel cased string.\n     * @example\n     *\n     * _.camelCase('Foo Bar');\n     * // => 'fooBar'\n     *\n     * _.camelCase('--foo-bar--');\n     * // => 'fooBar'\n     *\n     * _.camelCase('__FOO_BAR__');\n     * // => 'fooBar'\n     */\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? capitalize(word) : word);\n    });\n\n    /**\n     * Converts the first character of `string` to upper case and the remaining\n     * to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to capitalize.\n     * @returns {string} Returns the capitalized string.\n     * @example\n     *\n     * _.capitalize('FRED');\n     * // => 'Fred'\n     */\n    function capitalize(string) {\n      return upperFirst(toString(string).toLowerCase());\n    }\n\n    /**\n     * Deburrs `string` by converting\n     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n     * letters to basic Latin letters and removing\n     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to deburr.\n     * @returns {string} Returns the deburred string.\n     * @example\n     *\n     * _.deburr('d\u00E9j\u00E0 vu');\n     * // => 'deja vu'\n     */\n    function deburr(string) {\n      string = toString(string);\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n    }\n\n    /**\n     * Checks if `string` ends with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=string.length] The position to search up to.\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.endsWith('abc', 'c');\n     * // => true\n     *\n     * _.endsWith('abc', 'b');\n     * // => false\n     *\n     * _.endsWith('abc', 'b', 2);\n     * // => true\n     */\n    function endsWith(string, target, position) {\n      string = toString(string);\n      target = baseToString(target);\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : baseClamp(toInteger(position), 0, length);\n\n      var end = position;\n      position -= target.length;\n      return position >= 0 && string.slice(position, end) == target;\n    }\n\n    /**\n     * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n     * corresponding HTML entities.\n     *\n     * **Note:** No other characters are escaped. To escape additional\n     * characters use a third-party library like [_he_](https://mths.be/he).\n     *\n     * Though the \">\" character is escaped for symmetry, characters like\n     * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n     * unless they're part of a tag or unquoted attribute value. See\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n     * (under \"semi-related fun fact\") for more details.\n     *\n     * When working with HTML you should always\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n     * XSS vectors.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('fred, barney, & pebbles');\n     * // => 'fred, barney, &amp; pebbles'\n     */\n    function escape(string) {\n      string = toString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n     * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\n     * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n     */\n    function escapeRegExp(string) {\n      string = toString(string);\n      return (string && reHasRegExpChar.test(string))\n        ? string.replace(reRegExpChar, '\\\\$&')\n        : string;\n    }\n\n    /**\n     * Converts `string` to\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the kebab cased string.\n     * @example\n     *\n     * _.kebabCase('Foo Bar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('fooBar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('__FOO_BAR__');\n     * // => 'foo-bar'\n     */\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts `string`, as space separated words, to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.lowerCase('--Foo-Bar--');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('fooBar');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('__FOO_BAR__');\n     * // => 'foo bar'\n     */\n    var lowerCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts the first character of `string` to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.lowerFirst('Fred');\n     * // => 'fred'\n     *\n     * _.lowerFirst('FRED');\n     * // => 'fRED'\n     */\n    var lowerFirst = createCaseFirst('toLowerCase');\n\n    /**\n     * Pads `string` on the left and right sides if it's shorter than `length`.\n     * Padding characters are truncated if they can't be evenly divided by `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.pad('abc', 8);\n     * // => '  abc   '\n     *\n     * _.pad('abc', 8, '_-');\n     * // => '_-abc_-_'\n     *\n     * _.pad('abc', 3);\n     * // => 'abc'\n     */\n    function pad(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      if (!length || strLength >= length) {\n        return string;\n      }\n      var mid = (length - strLength) / 2;\n      return (\n        createPadding(nativeFloor(mid), chars) +\n        string +\n        createPadding(nativeCeil(mid), chars)\n      );\n    }\n\n    /**\n     * Pads `string` on the right side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padEnd('abc', 6);\n     * // => 'abc   '\n     *\n     * _.padEnd('abc', 6, '_-');\n     * // => 'abc_-_'\n     *\n     * _.padEnd('abc', 3);\n     * // => 'abc'\n     */\n    function padEnd(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (string + createPadding(length - strLength, chars))\n        : string;\n    }\n\n    /**\n     * Pads `string` on the left side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padStart('abc', 6);\n     * // => '   abc'\n     *\n     * _.padStart('abc', 6, '_-');\n     * // => '_-_abc'\n     *\n     * _.padStart('abc', 3);\n     * // => 'abc'\n     */\n    function padStart(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (createPadding(length - strLength, chars) + string)\n        : string;\n    }\n\n    /**\n     * Converts `string` to an integer of the specified radix. If `radix` is\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n     * hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * **Note:** This method aligns with the\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category String\n     * @param {string} string The string to convert.\n     * @param {number} [radix=10] The radix to interpret `value` by.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     *\n     * _.map(['6', '08', '10'], _.parseInt);\n     * // => [6, 8, 10]\n     */\n    function parseInt(string, radix, guard) {\n      if (guard || radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n    }\n\n    /**\n     * Repeats the given string `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to repeat.\n     * @param {number} [n=1] The number of times to repeat the string.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the repeated string.\n     * @example\n     *\n     * _.repeat('*', 3);\n     * // => '***'\n     *\n     * _.repeat('abc', 2);\n     * // => 'abcabc'\n     *\n     * _.repeat('abc', 0);\n     * // => ''\n     */\n    function repeat(string, n, guard) {\n      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      return baseRepeat(toString(string), n);\n    }\n\n    /**\n     * Replaces matches for `pattern` in `string` with `replacement`.\n     *\n     * **Note:** This method is based on\n     * [`String#replace`](https://mdn.io/String/replace).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to modify.\n     * @param {RegExp|string} pattern The pattern to replace.\n     * @param {Function|string} replacement The match replacement.\n     * @returns {string} Returns the modified string.\n     * @example\n     *\n     * _.replace('Hi Fred', 'Fred', 'Barney');\n     * // => 'Hi Barney'\n     */\n    function replace() {\n      var args = arguments,\n          string = toString(args[0]);\n\n      return args.length < 3 ? string : string.replace(args[1], args[2]);\n    }\n\n    /**\n     * Converts `string` to\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the snake cased string.\n     * @example\n     *\n     * _.snakeCase('Foo Bar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('fooBar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('--FOO-BAR--');\n     * // => 'foo_bar'\n     */\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Splits `string` by `separator`.\n     *\n     * **Note:** This method is based on\n     * [`String#split`](https://mdn.io/String/split).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to split.\n     * @param {RegExp|string} separator The separator pattern to split by.\n     * @param {number} [limit] The length to truncate results to.\n     * @returns {Array} Returns the string segments.\n     * @example\n     *\n     * _.split('a-b-c', '-', 2);\n     * // => ['a', 'b']\n     */\n    function split(string, separator, limit) {\n      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n        separator = limit = undefined;\n      }\n      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n      if (!limit) {\n        return [];\n      }\n      string = toString(string);\n      if (string && (\n            typeof separator == 'string' ||\n            (separator != null && !isRegExp(separator))\n          )) {\n        separator = baseToString(separator);\n        if (!separator && hasUnicode(string)) {\n          return castSlice(stringToArray(string), 0, limit);\n        }\n      }\n      return string.split(separator, limit);\n    }\n\n    /**\n     * Converts `string` to\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.1.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the start cased string.\n     * @example\n     *\n     * _.startCase('--foo-bar--');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('fooBar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('__FOO_BAR__');\n     * // => 'FOO BAR'\n     */\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + upperFirst(word);\n    });\n\n    /**\n     * Checks if `string` starts with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=0] The position to search from.\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.startsWith('abc', 'a');\n     * // => true\n     *\n     * _.startsWith('abc', 'b');\n     * // => false\n     *\n     * _.startsWith('abc', 'b', 1);\n     * // => true\n     */\n    function startsWith(string, target, position) {\n      string = toString(string);\n      position = position == null\n        ? 0\n        : baseClamp(toInteger(position), 0, string.length);\n\n      target = baseToString(target);\n      return string.slice(position, position + target.length) == target;\n    }\n\n    /**\n     * Creates a compiled template function that can interpolate data properties\n     * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n     * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n     * properties may be accessed as free variables in the template. If a setting\n     * object is given, it takes precedence over `_.templateSettings` values.\n     *\n     * **Security:** `_.template` is insecure and should not be used. It will be\n     * removed in Lodash v5. Avoid untrusted input. See\n     * [threat model](https://github.com/lodash/lodash/blob/main/threat-model.md).\n     *\n     * **Note:** In the development build `_.template` utilizes\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n     * for easier debugging.\n     *\n     * For more information on precompiling templates see\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n     *\n     * For more information on Chrome extension sandboxes see\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The template string.\n     * @param {Object} [options={}] The options object.\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\n     *  The HTML \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n     *  The \"evaluate\" delimiter.\n     * @param {Object} [options.imports=_.templateSettings.imports]\n     *  An object to import into the template as free variables.\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n     *  The \"interpolate\" delimiter.\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\n     *  The sourceURL of the compiled template.\n     * @param {string} [options.variable='obj']\n     *  The data object variable name.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the compiled template function.\n     * @example\n     *\n     * // Use the \"interpolate\" delimiter to create a compiled template.\n     * var compiled = _.template('hello <%= user %>!');\n     * compiled({ 'user': 'fred' });\n     * // => 'hello fred!'\n     *\n     * // Use the HTML \"escape\" delimiter to escape data property values.\n     * var compiled = _.template('<b><%- value %></b>');\n     * compiled({ 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the internal `print` function in \"evaluate\" delimiters.\n     * var compiled = _.template('<% print(\"hello \" + user); %>!');\n     * compiled({ 'user': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n     * // Disable support by replacing the \"interpolate\" delimiter.\n     * var compiled = _.template('hello ${ user }!');\n     * compiled({ 'user': 'pebbles' });\n     * // => 'hello pebbles!'\n     *\n     * // Use backslashes to treat delimiters as plain text.\n     * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n     * compiled({ 'value': 'ignored' });\n     * // => '<%- value %>'\n     *\n     * // Use the `imports` option to import `jQuery` as `jq`.\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n     *\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     * //   var __t, __p = '';\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n     * //   return __p;\n     * // }\n     *\n     * // Use custom template delimiters.\n     * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n     * var compiled = _.template('hello {{ user }}!');\n     * compiled({ 'user': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // Use the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and stack traces.\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n    function template(string, options, guard) {\n      // Based on John Resig's `tmpl` implementation\n      // (http://ejohn.org/blog/javascript-micro-templating/)\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n      var settings = lodash.templateSettings;\n\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      string = toString(string);\n      options = assignWith({}, options, settings, customDefaultsAssignIn);\n\n      var imports = assignWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      arrayEach(importsKeys, function(key) {\n        if (reForbiddenIdentifierChars.test(key)) {\n          throw new Error(INVALID_TEMPL_IMPORTS_ERROR_TEXT);\n        }\n      });\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n\n      // Compile the regexp to match each delimiter.\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n\n      // Use a sourceURL for easier debugging.\n      // The sourceURL gets injected into the source that's eval-ed, so be careful\n      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n      // and escape the comment, thus injecting code that gets evaled.\n      var sourceURL = '//# sourceURL=' +\n        (hasOwnProperty.call(options, 'sourceURL')\n          ? (options.sourceURL + '').replace(/\\s/g, ' ')\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n\n        // Escape characters that can't be included in string literals.\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n        // Replace delimiters with snippets.\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n\n        // The JS engine embedded in Adobe products needs `match` returned in\n        // order to produce the correct `offset` value.\n        return match;\n      });\n\n      source += \"';\\n\";\n\n      // If `variable` is not specified wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain.\n      var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      // Throw an error if a forbidden character was found in `variable`, to prevent\n      // potential command injection attacks.\n      else if (reForbiddenIdentifierChars.test(variable)) {\n        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n      }\n\n      // Cleanup code by stripping empty strings.\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n\n      // Frame code as the function body.\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source)\n          .apply(undefined, importsValues);\n      });\n\n      // Provide the compiled function's source by its `toString` method or\n      // the `source` property as a convenience for inlining compiled templates.\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n\n    /**\n     * Converts `string`, as a whole, to lower case just like\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.toLower('--Foo-Bar--');\n     * // => '--foo-bar--'\n     *\n     * _.toLower('fooBar');\n     * // => 'foobar'\n     *\n     * _.toLower('__FOO_BAR__');\n     * // => '__foo_bar__'\n     */\n    function toLower(value) {\n      return toString(value).toLowerCase();\n    }\n\n    /**\n     * Converts `string`, as a whole, to upper case just like\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.toUpper('--foo-bar--');\n     * // => '--FOO-BAR--'\n     *\n     * _.toUpper('fooBar');\n     * // => 'FOOBAR'\n     *\n     * _.toUpper('__foo_bar__');\n     * // => '__FOO_BAR__'\n     */\n    function toUpper(value) {\n      return toString(value).toUpperCase();\n    }\n\n    /**\n     * Removes leading and trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trim('  abc  ');\n     * // => 'abc'\n     *\n     * _.trim('-_-abc-_-', '_-');\n     * // => 'abc'\n     *\n     * _.map(['  foo  ', '  bar  '], _.trim);\n     * // => ['foo', 'bar']\n     */\n    function trim(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return baseTrim(string);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          chrSymbols = stringToArray(chars),\n          start = charsStartIndex(strSymbols, chrSymbols),\n          end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n      return castSlice(strSymbols, start, end).join('');\n    }\n\n    /**\n     * Removes trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimEnd('  abc  ');\n     * // => '  abc'\n     *\n     * _.trimEnd('-_-abc-_-', '_-');\n     * // => '-_-abc'\n     */\n    function trimEnd(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.slice(0, trimmedEndIndex(string) + 1);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n      return castSlice(strSymbols, 0, end).join('');\n    }\n\n    /**\n     * Removes leading whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimStart('  abc  ');\n     * // => 'abc  '\n     *\n     * _.trimStart('-_-abc-_-', '_-');\n     * // => 'abc-_-'\n     */\n    function trimStart(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimStart, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          start = charsStartIndex(strSymbols, stringToArray(chars));\n\n      return castSlice(strSymbols, start).join('');\n    }\n\n    /**\n     * Truncates `string` if it's longer than the given maximum string length.\n     * The last characters of the truncated string are replaced with the omission\n     * string which defaults to \"...\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to truncate.\n     * @param {Object} [options={}] The options object.\n     * @param {number} [options.length=30] The maximum string length.\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n     * @returns {string} Returns the truncated string.\n     * @example\n     *\n     * _.truncate('hi-diddly-ho there, neighborino');\n     * // => 'hi-diddly-ho there, neighbo...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': ' '\n     * });\n     * // => 'hi-diddly-ho there,...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': /,? +/\n     * });\n     * // => 'hi-diddly-ho there...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'omission': ' [...]'\n     * });\n     * // => 'hi-diddly-ho there, neig [...]'\n     */\n    function truncate(string, options) {\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (isObject(options)) {\n        var separator = 'separator' in options ? options.separator : separator;\n        length = 'length' in options ? toInteger(options.length) : length;\n        omission = 'omission' in options ? baseToString(options.omission) : omission;\n      }\n      string = toString(string);\n\n      var strLength = string.length;\n      if (hasUnicode(string)) {\n        var strSymbols = stringToArray(string);\n        strLength = strSymbols.length;\n      }\n      if (length >= strLength) {\n        return string;\n      }\n      var end = length - stringSize(omission);\n      if (end < 1) {\n        return omission;\n      }\n      var result = strSymbols\n        ? castSlice(strSymbols, 0, end).join('')\n        : string.slice(0, end);\n\n      if (separator === undefined) {\n        return result + omission;\n      }\n      if (strSymbols) {\n        end += (result.length - end);\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              substring = result;\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            var newEnd = match.index;\n          }\n          result = result.slice(0, newEnd === undefined ? end : newEnd);\n        }\n      } else if (string.indexOf(baseToString(separator), end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n\n    /**\n     * The inverse of `_.escape`; this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n     * their corresponding characters.\n     *\n     * **Note:** No other HTML entities are unescaped. To unescape additional\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.6.0\n     * @category String\n     * @param {string} [string=''] The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('fred, barney, &amp; pebbles');\n     * // => 'fred, barney, & pebbles'\n     */\n    function unescape(string) {\n      string = toString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Converts `string`, as space separated words, to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.upperCase('--foo-bar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('fooBar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('__foo_bar__');\n     * // => 'FOO BAR'\n     */\n    var upperCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toUpperCase();\n    });\n\n    /**\n     * Converts the first character of `string` to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.upperFirst('fred');\n     * // => 'Fred'\n     *\n     * _.upperFirst('FRED');\n     * // => 'FRED'\n     */\n    var upperFirst = createCaseFirst('toUpperCase');\n\n    /**\n     * Splits `string` into an array of its words.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {RegExp|string} [pattern] The pattern to match words.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the words of `string`.\n     * @example\n     *\n     * _.words('fred, barney, & pebbles');\n     * // => ['fred', 'barney', 'pebbles']\n     *\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\n     * // => ['fred', 'barney', '&', 'pebbles']\n     */\n    function words(string, pattern, guard) {\n      string = toString(string);\n      pattern = guard ? undefined : pattern;\n\n      if (pattern === undefined) {\n        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n      }\n      return string.match(pattern) || [];\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Attempts to invoke `func`, returning either the result or the caught error\n     * object. Any additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Function} func The function to attempt.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {*} Returns the `func` result or error object.\n     * @example\n     *\n     * // Avoid throwing errors for invalid selectors.\n     * var elements = _.attempt(function(selector) {\n     *   return document.querySelectorAll(selector);\n     * }, '>_>');\n     *\n     * if (_.isError(elements)) {\n     *   elements = [];\n     * }\n     */\n    var attempt = baseRest(function(func, args) {\n      try {\n        return apply(func, undefined, args);\n      } catch (e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method.\n     *\n     * **Note:** This method doesn't set the \"length\" property of bound functions.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...(string|string[])} methodNames The object method names to bind.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'click': function() {\n     *     console.log('clicked ' + this.label);\n     *   }\n     * };\n     *\n     * _.bindAll(view, ['click']);\n     * jQuery(element).on('click', view.click);\n     * // => Logs 'clicked docs' when clicked.\n     */\n    var bindAll = flatRest(function(object, methodNames) {\n      arrayEach(methodNames, function(key) {\n        key = toKey(key);\n        baseAssignValue(object, key, bind(object[key], object));\n      });\n      return object;\n    });\n\n    /**\n     * Creates a function that iterates over `pairs` and invokes the corresponding\n     * function of the first predicate to return truthy. The predicate-function\n     * pairs are invoked with the `this` binding and arguments of the created\n     * function.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Array} pairs The predicate-function pairs.\n     * @returns {Function} Returns the new composite function.\n     * @example\n     *\n     * var func = _.cond([\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n     *   [_.stubTrue,                      _.constant('no match')]\n     * ]);\n     *\n     * func({ 'a': 1, 'b': 2 });\n     * // => 'matches A'\n     *\n     * func({ 'a': 0, 'b': 1 });\n     * // => 'matches B'\n     *\n     * func({ 'a': '1', 'b': '2' });\n     * // => 'no match'\n     */\n    function cond(pairs) {\n      var length = pairs == null ? 0 : pairs.length,\n          toIteratee = getIteratee();\n\n      pairs = !length ? [] : arrayMap(pairs, function(pair) {\n        if (typeof pair[1] != 'function') {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n        return [toIteratee(pair[0]), pair[1]];\n      });\n\n      return baseRest(function(args) {\n        var index = -1;\n        while (++index < length) {\n          var pair = pairs[index];\n          if (apply(pair[0], this, args)) {\n            return apply(pair[1], this, args);\n          }\n        }\n      });\n    }\n\n    /**\n     * Creates a function that invokes the predicate properties of `source` with\n     * the corresponding property values of a given object, returning `true` if\n     * all predicates return truthy, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.conformsTo` with\n     * `source` partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 2, 'b': 1 },\n     *   { 'a': 1, 'b': 2 }\n     * ];\n     *\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n     * // => [{ 'a': 1, 'b': 2 }]\n     */\n    function conforms(source) {\n      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that returns `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {*} value The value to return from the new function.\n     * @returns {Function} Returns the new constant function.\n     * @example\n     *\n     * var objects = _.times(2, _.constant({ 'a': 1 }));\n     *\n     * console.log(objects);\n     * // => [{ 'a': 1 }, { 'a': 1 }]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => true\n     */\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n\n    /**\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n     * or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Util\n     * @param {*} value The value to check.\n     * @param {*} defaultValue The default value.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * _.defaultTo(1, 10);\n     * // => 1\n     *\n     * _.defaultTo(undefined, 10);\n     * // => 10\n     */\n    function defaultTo(value, defaultValue) {\n      return (value == null || value !== value) ? defaultValue : value;\n    }\n\n    /**\n     * Creates a function that returns the result of invoking the given functions\n     * with the `this` binding of the created function, where each successive\n     * invocation is supplied the return value of the previous.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flowRight\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flow([_.add, square]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flow = createFlow();\n\n    /**\n     * This method is like `_.flow` except that it creates a function that\n     * invokes the given functions from right to left.\n     *\n     * @static\n     * @since 3.0.0\n     * @memberOf _\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flow\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flowRight([square, _.add]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flowRight = createFlow(true);\n\n    /**\n     * This method returns the first argument it receives.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {*} value Any value.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     *\n     * console.log(_.identity(object) === object);\n     * // => true\n     */\n    function identity(value) {\n      return value;\n    }\n\n    /**\n     * Creates a function that invokes `func` with the arguments of the created\n     * function. If `func` is a property name, the created function returns the\n     * property value for a given element. If `func` is an array or object, the\n     * created function returns `true` for elements that contain the equivalent\n     * source properties, otherwise it returns `false`.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Util\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @returns {Function} Returns the callback.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, _.iteratee(['user', 'fred']));\n     * // => [{ 'user': 'fred', 'age': 40 }]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, _.iteratee('user'));\n     * // => ['barney', 'fred']\n     *\n     * // Create custom iteratee shorthands.\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n     *     return func.test(string);\n     *   };\n     * });\n     *\n     * _.filter(['abc', 'def'], /ef/);\n     * // => ['def']\n     */\n    function iteratee(func) {\n      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between a given\n     * object and `source`, returning `true` if the given object has equivalent\n     * property values, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matches(source) {\n      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between the\n     * value at `path` of a given object to `srcValue`, returning `true` if the\n     * object value is equivalent, else `false`.\n     *\n     * **Note:** Partial comparisons will match empty array and empty object\n     * `srcValue` values against any array or object value, respectively. See\n     * `_.isEqual` for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.find(objects, _.matchesProperty('a', 4));\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that invokes the method at `path` of a given object.\n     * Any additional arguments are provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': _.constant(2) } },\n     *   { 'a': { 'b': _.constant(1) } }\n     * ];\n     *\n     * _.map(objects, _.method('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(objects, _.method(['a', 'b']));\n     * // => [2, 1]\n     */\n    var method = baseRest(function(path, args) {\n      return function(object) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * The opposite of `_.method`; this method creates a function that invokes\n     * the method at a given path of `object`. Any additional arguments are\n     * provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var array = _.times(3, _.constant),\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n     * // => [2, 0]\n     */\n    var methodOf = baseRest(function(object, args) {\n      return function(path) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * Adds all own enumerable string keyed function properties of a source\n     * object to the destination object. If `object` is a function, then methods\n     * are added to its prototype as well.\n     *\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n     * avoid conflicts caused by modifying the original.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Function|Object} [object=lodash] The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n     * @returns {Function|Object} Returns `object`.\n     * @example\n     *\n     * function vowels(string) {\n     *   return _.filter(string, function(v) {\n     *     return /[aeiou]/i.test(v);\n     *   });\n     * }\n     *\n     * _.mixin({ 'vowels': vowels });\n     * _.vowels('fred');\n     * // => ['e']\n     *\n     * _('fred').vowels().value();\n     * // => ['e']\n     *\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\n     * _('fred').vowels();\n     * // => ['e']\n     */\n    function mixin(object, source, options) {\n      var props = keys(source),\n          methodNames = baseFunctions(source, props);\n\n      if (options == null &&\n          !(isObject(source) && (methodNames.length || !props.length))) {\n        options = source;\n        source = object;\n        object = this;\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n          isFunc = isFunction(object);\n\n      arrayEach(methodNames, function(methodName) {\n        var func = source[methodName];\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = function() {\n            var chainAll = this.__chain__;\n            if (chain || chainAll) {\n              var result = object(this.__wrapped__),\n                  actions = result.__actions__ = copyArray(this.__actions__);\n\n              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n              result.__chain__ = chainAll;\n              return result;\n            }\n            return func.apply(object, arrayPush([this.value()], arguments));\n          };\n        }\n      });\n\n      return object;\n    }\n\n    /**\n     * Reverts the `_` variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n    function noConflict() {\n      if (root._ === this) {\n        root._ = oldDash;\n      }\n      return this;\n    }\n\n    /**\n     * This method returns `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Util\n     * @example\n     *\n     * _.times(2, _.noop);\n     * // => [undefined, undefined]\n     */\n    function noop() {\n      // No operation performed.\n    }\n\n    /**\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\n     * the nth argument from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [n=0] The index of the argument to return.\n     * @returns {Function} Returns the new pass-thru function.\n     * @example\n     *\n     * var func = _.nthArg(1);\n     * func('a', 'b', 'c', 'd');\n     * // => 'b'\n     *\n     * var func = _.nthArg(-2);\n     * func('a', 'b', 'c', 'd');\n     * // => 'c'\n     */\n    function nthArg(n) {\n      n = toInteger(n);\n      return baseRest(function(args) {\n        return baseNth(args, n);\n      });\n    }\n\n    /**\n     * Creates a function that invokes `iteratees` with the arguments it receives\n     * and returns their results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.over([Math.max, Math.min]);\n     *\n     * func(1, 2, 3, 4);\n     * // => [4, 1]\n     */\n    var over = createOver(arrayMap);\n\n    /**\n     * Creates a function that checks if **all** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overEvery([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => false\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overEvery = createOver(arrayEvery);\n\n    /**\n     * Creates a function that checks if **any** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overSome([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => true\n     *\n     * func(NaN);\n     * // => false\n     *\n     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n     */\n    var overSome = createOver(arraySome);\n\n    /**\n     * Creates a function that returns the value at `path` of a given object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': 2 } },\n     *   { 'a': { 'b': 1 } }\n     * ];\n     *\n     * _.map(objects, _.property('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n     * // => [1, 2]\n     */\n    function property(path) {\n      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n    }\n\n    /**\n     * The opposite of `_.property`; this method creates a function that returns\n     * the value at a given path of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var array = [0, 1, 2],\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n     * // => [2, 0]\n     */\n    function propertyOf(object) {\n      return function(path) {\n        return object == null ? undefined : baseGet(object, path);\n      };\n    }\n\n    /**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n     * `start` is specified without an `end` or `step`. If `end` is not specified,\n     * it's set to `start` with `start` then set to `0`.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.rangeRight\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(-4);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */\n    var range = createRange();\n\n    /**\n     * This method is like `_.range` except that it populates values in\n     * descending order.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.range\n     * @example\n     *\n     * _.rangeRight(4);\n     * // => [3, 2, 1, 0]\n     *\n     * _.rangeRight(-4);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 5);\n     * // => [4, 3, 2, 1]\n     *\n     * _.rangeRight(0, 20, 5);\n     * // => [15, 10, 5, 0]\n     *\n     * _.rangeRight(0, -4, -1);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.rangeRight(0);\n     * // => []\n     */\n    var rangeRight = createRange(true);\n\n    /**\n     * This method returns a new empty array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Array} Returns the new empty array.\n     * @example\n     *\n     * var arrays = _.times(2, _.stubArray);\n     *\n     * console.log(arrays);\n     * // => [[], []]\n     *\n     * console.log(arrays[0] === arrays[1]);\n     * // => false\n     */\n    function stubArray() {\n      return [];\n    }\n\n    /**\n     * This method returns `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `false`.\n     * @example\n     *\n     * _.times(2, _.stubFalse);\n     * // => [false, false]\n     */\n    function stubFalse() {\n      return false;\n    }\n\n    /**\n     * This method returns a new empty object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Object} Returns the new empty object.\n     * @example\n     *\n     * var objects = _.times(2, _.stubObject);\n     *\n     * console.log(objects);\n     * // => [{}, {}]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => false\n     */\n    function stubObject() {\n      return {};\n    }\n\n    /**\n     * This method returns an empty string.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {string} Returns the empty string.\n     * @example\n     *\n     * _.times(2, _.stubString);\n     * // => ['', '']\n     */\n    function stubString() {\n      return '';\n    }\n\n    /**\n     * This method returns `true`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `true`.\n     * @example\n     *\n     * _.times(2, _.stubTrue);\n     * // => [true, true]\n     */\n    function stubTrue() {\n      return true;\n    }\n\n    /**\n     * Invokes the iteratee `n` times, returning an array of the results of\n     * each invocation. The iteratee is invoked with one argument; (index).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.times(3, String);\n     * // => ['0', '1', '2']\n     *\n     *  _.times(4, _.constant(0));\n     * // => [0, 0, 0, 0]\n     */\n    function times(n, iteratee) {\n      n = toInteger(n);\n      if (n < 1 || n > MAX_SAFE_INTEGER) {\n        return [];\n      }\n      var index = MAX_ARRAY_LENGTH,\n          length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n      iteratee = getIteratee(iteratee);\n      n -= MAX_ARRAY_LENGTH;\n\n      var result = baseTimes(length, iteratee);\n      while (++index < n) {\n        iteratee(index);\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a property path array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the new property path array.\n     * @example\n     *\n     * _.toPath('a.b.c');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toPath('a[0].b.c');\n     * // => ['a', '0', 'b', 'c']\n     */\n    function toPath(value) {\n      if (isArray(value)) {\n        return arrayMap(value, toKey);\n      }\n      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n    }\n\n    /**\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {string} [prefix=''] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return toString(prefix) + id;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Adds two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {number} augend The first number in an addition.\n     * @param {number} addend The second number in an addition.\n     * @returns {number} Returns the total.\n     * @example\n     *\n     * _.add(6, 4);\n     * // => 10\n     */\n    var add = createMathOperation(function(augend, addend) {\n      return augend + addend;\n    }, 0);\n\n    /**\n     * Computes `number` rounded up to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round up.\n     * @param {number} [precision=0] The precision to round up to.\n     * @returns {number} Returns the rounded up number.\n     * @example\n     *\n     * _.ceil(4.006);\n     * // => 5\n     *\n     * _.ceil(6.004, 2);\n     * // => 6.01\n     *\n     * _.ceil(6040, -2);\n     * // => 6100\n     */\n    var ceil = createRound('ceil');\n\n    /**\n     * Divide two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} dividend The first number in a division.\n     * @param {number} divisor The second number in a division.\n     * @returns {number} Returns the quotient.\n     * @example\n     *\n     * _.divide(6, 4);\n     * // => 1.5\n     */\n    var divide = createMathOperation(function(dividend, divisor) {\n      return dividend / divisor;\n    }, 1);\n\n    /**\n     * Computes `number` rounded down to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round down.\n     * @param {number} [precision=0] The precision to round down to.\n     * @returns {number} Returns the rounded down number.\n     * @example\n     *\n     * _.floor(4.006);\n     * // => 4\n     *\n     * _.floor(0.046, 2);\n     * // => 0.04\n     *\n     * _.floor(4060, -2);\n     * // => 4000\n     */\n    var floor = createRound('floor');\n\n    /**\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * _.max([]);\n     * // => undefined\n     */\n    function max(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseGt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.max` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.maxBy(objects, function(o) { return o.n; });\n     * // => { 'n': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.maxBy(objects, 'n');\n     * // => { 'n': 2 }\n     */\n    function maxBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n        : undefined;\n    }\n\n    /**\n     * Computes the mean of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * _.mean([4, 2, 8, 6]);\n     * // => 5\n     */\n    function mean(array) {\n      return baseMean(array, identity);\n    }\n\n    /**\n     * This method is like `_.mean` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be averaged.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.meanBy(objects, function(o) { return o.n; });\n     * // => 5\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.meanBy(objects, 'n');\n     * // => 5\n     */\n    function meanBy(array, iteratee) {\n      return baseMean(array, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * _.min([]);\n     * // => undefined\n     */\n    function min(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseLt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.min` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.minBy(objects, function(o) { return o.n; });\n     * // => { 'n': 1 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.minBy(objects, 'n');\n     * // => { 'n': 1 }\n     */\n    function minBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n        : undefined;\n    }\n\n    /**\n     * Multiply two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} multiplier The first number in a multiplication.\n     * @param {number} multiplicand The second number in a multiplication.\n     * @returns {number} Returns the product.\n     * @example\n     *\n     * _.multiply(6, 4);\n     * // => 24\n     */\n    var multiply = createMathOperation(function(multiplier, multiplicand) {\n      return multiplier * multiplicand;\n    }, 1);\n\n    /**\n     * Computes `number` rounded to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round.\n     * @param {number} [precision=0] The precision to round to.\n     * @returns {number} Returns the rounded number.\n     * @example\n     *\n     * _.round(4.006);\n     * // => 4\n     *\n     * _.round(4.006, 2);\n     * // => 4.01\n     *\n     * _.round(4060, -2);\n     * // => 4100\n     */\n    var round = createRound('round');\n\n    /**\n     * Subtract two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {number} minuend The first number in a subtraction.\n     * @param {number} subtrahend The second number in a subtraction.\n     * @returns {number} Returns the difference.\n     * @example\n     *\n     * _.subtract(6, 4);\n     * // => 2\n     */\n    var subtract = createMathOperation(function(minuend, subtrahend) {\n      return minuend - subtrahend;\n    }, 0);\n\n    /**\n     * Computes the sum of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.sum([4, 2, 8, 6]);\n     * // => 20\n     */\n    function sum(array) {\n      return (array && array.length)\n        ? baseSum(array, identity)\n        : 0;\n    }\n\n    /**\n     * This method is like `_.sum` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be summed.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.sumBy(objects, function(o) { return o.n; });\n     * // => 20\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sumBy(objects, 'n');\n     * // => 20\n     */\n    function sumBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSum(array, getIteratee(iteratee, 2))\n        : 0;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return wrapped values in chain sequences.\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.assignIn = assignIn;\n    lodash.assignInWith = assignInWith;\n    lodash.assignWith = assignWith;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.castArray = castArray;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.concat = concat;\n    lodash.cond = cond;\n    lodash.conforms = conforms;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.differenceBy = differenceBy;\n    lodash.differenceWith = differenceWith;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatMap = flatMap;\n    lodash.flatMapDeep = flatMapDeep;\n    lodash.flatMapDepth = flatMapDepth;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flattenDepth = flattenDepth;\n    lodash.flip = flip;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.fromPairs = fromPairs;\n    lodash.functions = functions;\n    lodash.functionsIn = functionsIn;\n    lodash.groupBy = groupBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.intersectionBy = intersectionBy;\n    lodash.intersectionWith = intersectionWith;\n    lodash.invert = invert;\n    lodash.invertBy = invertBy;\n    lodash.invokeMap = invokeMap;\n    lodash.iteratee = iteratee;\n    lodash.keyBy = keyBy;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.mergeWith = mergeWith;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.negate = negate;\n    lodash.nthArg = nthArg;\n    lodash.omit = omit;\n    lodash.omitBy = omitBy;\n    lodash.once = once;\n    lodash.orderBy = orderBy;\n    lodash.over = over;\n    lodash.overArgs = overArgs;\n    lodash.overEvery = overEvery;\n    lodash.overSome = overSome;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pickBy = pickBy;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAll = pullAll;\n    lodash.pullAllBy = pullAllBy;\n    lodash.pullAllWith = pullAllWith;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rangeRight = rangeRight;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.reverse = reverse;\n    lodash.sampleSize = sampleSize;\n    lodash.set = set;\n    lodash.setWith = setWith;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortedUniq = sortedUniq;\n    lodash.sortedUniqBy = sortedUniqBy;\n    lodash.split = split;\n    lodash.spread = spread;\n    lodash.tail = tail;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.toArray = toArray;\n    lodash.toPairs = toPairs;\n    lodash.toPairsIn = toPairsIn;\n    lodash.toPath = toPath;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.unary = unary;\n    lodash.union = union;\n    lodash.unionBy = unionBy;\n    lodash.unionWith = unionWith;\n    lodash.uniq = uniq;\n    lodash.uniqBy = uniqBy;\n    lodash.uniqWith = uniqWith;\n    lodash.unset = unset;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.update = update;\n    lodash.updateWith = updateWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.without = without;\n    lodash.words = words;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.xorBy = xorBy;\n    lodash.xorWith = xorWith;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipObjectDeep = zipObjectDeep;\n    lodash.zipWith = zipWith;\n\n    // Add aliases.\n    lodash.entries = toPairs;\n    lodash.entriesIn = toPairsIn;\n    lodash.extend = assignIn;\n    lodash.extendWith = assignInWith;\n\n    // Add methods to `lodash.prototype`.\n    mixin(lodash, lodash);\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return unwrapped values in chain sequences.\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clamp = clamp;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.cloneDeepWith = cloneDeepWith;\n    lodash.cloneWith = cloneWith;\n    lodash.conformsTo = conformsTo;\n    lodash.deburr = deburr;\n    lodash.defaultTo = defaultTo;\n    lodash.divide = divide;\n    lodash.endsWith = endsWith;\n    lodash.eq = eq;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.floor = floor;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.hasIn = hasIn;\n    lodash.head = head;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.invoke = invoke;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isArrayBuffer = isArrayBuffer;\n    lodash.isArrayLike = isArrayLike;\n    lodash.isArrayLikeObject = isArrayLikeObject;\n    lodash.isBoolean = isBoolean;\n    lodash.isBuffer = isBuffer;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isEqualWith = isEqualWith;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isInteger = isInteger;\n    lodash.isLength = isLength;\n    lodash.isMap = isMap;\n    lodash.isMatch = isMatch;\n    lodash.isMatchWith = isMatchWith;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNil = isNil;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isObjectLike = isObjectLike;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isSafeInteger = isSafeInteger;\n    lodash.isSet = isSet;\n    lodash.isString = isString;\n    lodash.isSymbol = isSymbol;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.isWeakMap = isWeakMap;\n    lodash.isWeakSet = isWeakSet;\n    lodash.join = join;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lowerCase = lowerCase;\n    lodash.lowerFirst = lowerFirst;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.maxBy = maxBy;\n    lodash.mean = mean;\n    lodash.meanBy = meanBy;\n    lodash.min = min;\n    lodash.minBy = minBy;\n    lodash.stubArray = stubArray;\n    lodash.stubFalse = stubFalse;\n    lodash.stubObject = stubObject;\n    lodash.stubString = stubString;\n    lodash.stubTrue = stubTrue;\n    lodash.multiply = multiply;\n    lodash.nth = nth;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padEnd = padEnd;\n    lodash.padStart = padStart;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.replace = replace;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.sample = sample;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedIndexBy = sortedIndexBy;\n    lodash.sortedIndexOf = sortedIndexOf;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.sortedLastIndexBy = sortedLastIndexBy;\n    lodash.sortedLastIndexOf = sortedLastIndexOf;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.subtract = subtract;\n    lodash.sum = sum;\n    lodash.sumBy = sumBy;\n    lodash.template = template;\n    lodash.times = times;\n    lodash.toFinite = toFinite;\n    lodash.toInteger = toInteger;\n    lodash.toLength = toLength;\n    lodash.toLower = toLower;\n    lodash.toNumber = toNumber;\n    lodash.toSafeInteger = toSafeInteger;\n    lodash.toString = toString;\n    lodash.toUpper = toUpper;\n    lodash.trim = trim;\n    lodash.trimEnd = trimEnd;\n    lodash.trimStart = trimStart;\n    lodash.truncate = truncate;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.upperCase = upperCase;\n    lodash.upperFirst = upperFirst;\n\n    // Add aliases.\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.first = head;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), { 'chain': false });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type {string}\n     */\n    lodash.VERSION = VERSION;\n\n    // Assign default placeholders.\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n        var result = (this.__filtered__ && !index)\n          ? new LazyWrapper(this)\n          : this.clone();\n\n        if (result.__filtered__) {\n          result.__takeCount__ = nativeMin(n, result.__takeCount__);\n        } else {\n          result.__views__.push({\n            'size': nativeMin(n, MAX_ARRAY_LENGTH),\n            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n          });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee) {\n        var result = this.clone();\n        result.__iteratees__.push({\n          'iteratee': getIteratee(iteratee, 3),\n          'type': type\n        });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.head` and `_.last`.\n    arrayEach(['head', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n    arrayEach(['initial', 'tail'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.find = function(predicate) {\n      return this.filter(predicate).head();\n    };\n\n    LazyWrapper.prototype.findLast = function(predicate) {\n      return this.reverse().find(predicate);\n    };\n\n    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n      if (typeof path == 'function') {\n        return new LazyWrapper(this);\n      }\n      return this.map(function(value) {\n        return baseInvoke(value, path, args);\n      });\n    });\n\n    LazyWrapper.prototype.reject = function(predicate) {\n      return this.filter(negate(getIteratee(predicate)));\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = toInteger(start);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = toInteger(end);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate) {\n      return this.reverse().takeWhile(predicate).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(MAX_ARRAY_LENGTH);\n    };\n\n    // Add `LazyWrapper` methods to `lodash.prototype`.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n          isTaker = /^(?:head|last)$/.test(methodName),\n          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n          retUnwrapped = isTaker || /^find/.test(methodName);\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var value = this.__wrapped__,\n            args = isTaker ? [1] : arguments,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        var interceptor = function(value) {\n          var result = lodashFunc.apply(lodash, arrayPush([value], args));\n          return (isTaker && chainAll) ? result[0] : result;\n        };\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n          isLazy = useLazy = false;\n        }\n        var chainAll = this.__chain__,\n            isHybrid = !!this.__actions__.length,\n            isUnwrapped = retUnwrapped && !chainAll,\n            onlyLazy = isLazy && !isHybrid;\n\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n          return new LodashWrapper(result, chainAll);\n        }\n        if (isUnwrapped && onlyLazy) {\n          return func.apply(this, args);\n        }\n        result = this.thru(interceptor);\n        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n      };\n    });\n\n    // Add `Array` methods to `lodash.prototype`.\n    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n      var func = arrayProto[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          var value = this.value();\n          return func.apply(isArray(value) ? value : [], args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(isArray(value) ? value : [], args);\n        });\n      };\n    });\n\n    // Map minified method names to their real names.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name + '';\n        if (!hasOwnProperty.call(realNames, key)) {\n          realNames[key] = [];\n        }\n        realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n      'name': 'wrapper',\n      'func': undefined\n    }];\n\n    // Add methods to `LazyWrapper`.\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n\n    // Add chain sequence methods to the `lodash` wrapper.\n    lodash.prototype.at = wrapperAt;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.next = wrapperNext;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n    // Add lazy aliases.\n    lodash.prototype.first = lodash.prototype.head;\n\n    if (symIterator) {\n      lodash.prototype[symIterator] = wrapperToIterator;\n    }\n    return lodash;\n  });\n\n  /*--------------------------------------------------------------------------*/\n\n  // Export lodash.\n  var _ = runInContext();\n\n  // Some AMD build optimizers, like r.js, check for condition patterns like:\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    // Expose Lodash on the global object to prevent errors when Lodash is\n    // loaded by a script tag in the presence of an AMD loader.\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\n    // Use `_.noConflict` to remove Lodash from the global object.\n    root._ = _;\n\n    // Define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module.\n    define(function() {\n      return _;\n    });\n  }\n  // Check for `exports` after `define` in case a build optimizer adds it.\n  else if (freeModule) {\n    // Export for Node.js.\n    (freeModule.exports = _)._ = _;\n    // Export for CommonJS support.\n    freeExports._ = _;\n  }\n  else {\n    // Export to the global object.\n    root._ = _;\n  }\n}.call(this));\n", "(function(window, factory) {\n\tvar lazySizes = factory(window, window.document, Date);\n\twindow.lazySizes = lazySizes;\n\tif(typeof module == 'object' && module.exports){\n\t\tmodule.exports = lazySizes;\n\t}\n}(typeof window != 'undefined' ?\n      window : {}, \n/**\n * import(\"./types/global\")\n * @typedef { import(\"./types/lazysizes-config\").LazySizesConfigPartial } LazySizesConfigPartial\n */\nfunction l(window, document, Date) { // Pass in the window Date function also for SSR because the Date class can be lost\n\t'use strict';\n\t/*jshint eqnull:true */\n\n\tvar lazysizes,\n\t\t/**\n\t\t * @type { LazySizesConfigPartial }\n\t\t */\n\t\tlazySizesCfg;\n\n\t(function(){\n\t\tvar prop;\n\n\t\tvar lazySizesDefaults = {\n\t\t\tlazyClass: 'lazyload',\n\t\t\tloadedClass: 'lazyloaded',\n\t\t\tloadingClass: 'lazyloading',\n\t\t\tpreloadClass: 'lazypreload',\n\t\t\terrorClass: 'lazyerror',\n\t\t\t//strictClass: 'lazystrict',\n\t\t\tautosizesClass: 'lazyautosizes',\n\t\t\tfastLoadedClass: 'ls-is-cached',\n\t\t\tiframeLoadMode: 0,\n\t\t\tsrcAttr: 'data-src',\n\t\t\tsrcsetAttr: 'data-srcset',\n\t\t\tsizesAttr: 'data-sizes',\n\t\t\t//preloadAfterLoad: false,\n\t\t\tminSize: 40,\n\t\t\tcustomMedia: {},\n\t\t\tinit: true,\n\t\t\texpFactor: 1.5,\n\t\t\thFac: 0.8,\n\t\t\tloadMode: 2,\n\t\t\tloadHidden: true,\n\t\t\tricTimeout: 0,\n\t\t\tthrottleDelay: 125,\n\t\t};\n\n\t\tlazySizesCfg = window.lazySizesConfig || window.lazysizesConfig || {};\n\n\t\tfor(prop in lazySizesDefaults){\n\t\t\tif(!(prop in lazySizesCfg)){\n\t\t\t\tlazySizesCfg[prop] = lazySizesDefaults[prop];\n\t\t\t}\n\t\t}\n\t})();\n\n\tif (!document || !document.getElementsByClassName) {\n\t\treturn {\n\t\t\tinit: function () {},\n\t\t\t/**\n\t\t\t * @type { LazySizesConfigPartial }\n\t\t\t */\n\t\t\tcfg: lazySizesCfg,\n\t\t\t/**\n\t\t\t * @type { true }\n\t\t\t */\n\t\t\tnoSupport: true,\n\t\t};\n\t}\n\n\tvar docElem = document.documentElement;\n\n\tvar supportPicture = window.HTMLPictureElement;\n\n\tvar _addEventListener = 'addEventListener';\n\n\tvar _getAttribute = 'getAttribute';\n\n\t/**\n\t * Update to bind to window because 'this' becomes null during SSR\n\t * builds.\n\t */\n\tvar addEventListener = window[_addEventListener].bind(window);\n\n\tvar setTimeout = window.setTimeout;\n\n\tvar requestAnimationFrame = window.requestAnimationFrame || setTimeout;\n\n\tvar requestIdleCallback = window.requestIdleCallback;\n\n\tvar regPicture = /^picture$/i;\n\n\tvar loadEvents = ['load', 'error', 'lazyincluded', '_lazyloaded'];\n\n\tvar regClassCache = {};\n\n\tvar forEach = Array.prototype.forEach;\n\n\t/**\n\t * @param ele {Element}\n\t * @param cls {string}\n\t */\n\tvar hasClass = function(ele, cls) {\n\t\tif(!regClassCache[cls]){\n\t\t\tregClassCache[cls] = new RegExp('(\\\\s|^)'+cls+'(\\\\s|$)');\n\t\t}\n\t\treturn regClassCache[cls].test(ele[_getAttribute]('class') || '') && regClassCache[cls];\n\t};\n\n\t/**\n\t * @param ele {Element}\n\t * @param cls {string}\n\t */\n\tvar addClass = function(ele, cls) {\n\t\tif (!hasClass(ele, cls)){\n\t\t\tele.setAttribute('class', (ele[_getAttribute]('class') || '').trim() + ' ' + cls);\n\t\t}\n\t};\n\n\t/**\n\t * @param ele {Element}\n\t * @param cls {string}\n\t */\n\tvar removeClass = function(ele, cls) {\n\t\tvar reg;\n\t\tif ((reg = hasClass(ele,cls))) {\n\t\t\tele.setAttribute('class', (ele[_getAttribute]('class') || '').replace(reg, ' '));\n\t\t}\n\t};\n\n\tvar addRemoveLoadEvents = function(dom, fn, add){\n\t\tvar action = add ? _addEventListener : 'removeEventListener';\n\t\tif(add){\n\t\t\taddRemoveLoadEvents(dom, fn);\n\t\t}\n\t\tloadEvents.forEach(function(evt){\n\t\t\tdom[action](evt, fn);\n\t\t});\n\t};\n\n\t/**\n\t * @param elem { Element }\n\t * @param name { string }\n\t * @param detail { any }\n\t * @param noBubbles { boolean }\n\t * @param noCancelable { boolean }\n\t * @returns { CustomEvent }\n\t */\n\tvar triggerEvent = function(elem, name, detail, noBubbles, noCancelable){\n\t\tvar event = document.createEvent('Event');\n\n\t\tif(!detail){\n\t\t\tdetail = {};\n\t\t}\n\n\t\tdetail.instance = lazysizes;\n\n\t\tevent.initEvent(name, !noBubbles, !noCancelable);\n\n\t\tevent.detail = detail;\n\n\t\telem.dispatchEvent(event);\n\t\treturn event;\n\t};\n\n\tvar updatePolyfill = function (el, full){\n\t\tvar polyfill;\n\t\tif( !supportPicture && ( polyfill = (window.picturefill || lazySizesCfg.pf) ) ){\n\t\t\tif(full && full.src && !el[_getAttribute]('srcset')){\n\t\t\t\tel.setAttribute('srcset', full.src);\n\t\t\t}\n\t\t\tpolyfill({reevaluate: true, elements: [el]});\n\t\t} else if(full && full.src){\n\t\t\tel.src = full.src;\n\t\t}\n\t};\n\n\tvar getCSS = function (elem, style){\n\t\treturn (getComputedStyle(elem, null) || {})[style];\n\t};\n\n\t/**\n\t *\n\t * @param elem { Element }\n\t * @param parent { Element }\n\t * @param [width] {number}\n\t * @returns {number}\n\t */\n\tvar getWidth = function(elem, parent, width){\n\t\twidth = width || elem.offsetWidth;\n\n\t\twhile(width < lazySizesCfg.minSize && parent && !elem._lazysizesWidth){\n\t\t\twidth =  parent.offsetWidth;\n\t\t\tparent = parent.parentNode;\n\t\t}\n\n\t\treturn width;\n\t};\n\n\tvar rAF = (function(){\n\t\tvar running, waiting;\n\t\tvar firstFns = [];\n\t\tvar secondFns = [];\n\t\tvar fns = firstFns;\n\n\t\tvar run = function(){\n\t\t\tvar runFns = fns;\n\n\t\t\tfns = firstFns.length ? secondFns : firstFns;\n\n\t\t\trunning = true;\n\t\t\twaiting = false;\n\n\t\t\twhile(runFns.length){\n\t\t\t\trunFns.shift()();\n\t\t\t}\n\n\t\t\trunning = false;\n\t\t};\n\n\t\tvar rafBatch = function(fn, queue){\n\t\t\tif(running && !queue){\n\t\t\t\tfn.apply(this, arguments);\n\t\t\t} else {\n\t\t\t\tfns.push(fn);\n\n\t\t\t\tif(!waiting){\n\t\t\t\t\twaiting = true;\n\t\t\t\t\t(document.hidden ? setTimeout : requestAnimationFrame)(run);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\trafBatch._lsFlush = run;\n\n\t\treturn rafBatch;\n\t})();\n\n\tvar rAFIt = function(fn, simple){\n\t\treturn simple ?\n\t\t\tfunction() {\n\t\t\t\trAF(fn);\n\t\t\t} :\n\t\t\tfunction(){\n\t\t\t\tvar that = this;\n\t\t\t\tvar args = arguments;\n\t\t\t\trAF(function(){\n\t\t\t\t\tfn.apply(that, args);\n\t\t\t\t});\n\t\t\t}\n\t\t;\n\t};\n\n\tvar throttle = function(fn){\n\t\tvar running;\n\t\tvar lastTime = 0;\n\t\tvar gDelay = lazySizesCfg.throttleDelay;\n\t\tvar rICTimeout = lazySizesCfg.ricTimeout;\n\t\tvar run = function(){\n\t\t\trunning = false;\n\t\t\tlastTime = Date.now();\n\t\t\tfn();\n\t\t};\n\t\tvar idleCallback = requestIdleCallback && rICTimeout > 49 ?\n\t\t\tfunction(){\n\t\t\t\trequestIdleCallback(run, {timeout: rICTimeout});\n\n\t\t\t\tif(rICTimeout !== lazySizesCfg.ricTimeout){\n\t\t\t\t\trICTimeout = lazySizesCfg.ricTimeout;\n\t\t\t\t}\n\t\t\t} :\n\t\t\trAFIt(function(){\n\t\t\t\tsetTimeout(run);\n\t\t\t}, true)\n\t\t;\n\n\t\treturn function(isPriority){\n\t\t\tvar delay;\n\n\t\t\tif((isPriority = isPriority === true)){\n\t\t\t\trICTimeout = 33;\n\t\t\t}\n\n\t\t\tif(running){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\trunning =  true;\n\n\t\t\tdelay = gDelay - (Date.now() - lastTime);\n\n\t\t\tif(delay < 0){\n\t\t\t\tdelay = 0;\n\t\t\t}\n\n\t\t\tif(isPriority || delay < 9){\n\t\t\t\tidleCallback();\n\t\t\t} else {\n\t\t\t\tsetTimeout(idleCallback, delay);\n\t\t\t}\n\t\t};\n\t};\n\n\t//based on http://modernjavascript.blogspot.de/2013/08/building-better-debounce.html\n\tvar debounce = function(func) {\n\t\tvar timeout, timestamp;\n\t\tvar wait = 99;\n\t\tvar run = function(){\n\t\t\ttimeout = null;\n\t\t\tfunc();\n\t\t};\n\t\tvar later = function() {\n\t\t\tvar last = Date.now() - timestamp;\n\n\t\t\tif (last < wait) {\n\t\t\t\tsetTimeout(later, wait - last);\n\t\t\t} else {\n\t\t\t\t(requestIdleCallback || run)(run);\n\t\t\t}\n\t\t};\n\n\t\treturn function() {\n\t\t\ttimestamp = Date.now();\n\n\t\t\tif (!timeout) {\n\t\t\t\ttimeout = setTimeout(later, wait);\n\t\t\t}\n\t\t};\n\t};\n\n\tvar loader = (function(){\n\t\tvar preloadElems, isCompleted, resetPreloadingTimer, loadMode, started;\n\n\t\tvar eLvW, elvH, eLtop, eLleft, eLright, eLbottom, isBodyHidden;\n\n\t\tvar regImg = /^img$/i;\n\t\tvar regIframe = /^iframe$/i;\n\n\t\tvar supportScroll = ('onscroll' in window) && !(/(gle|ing)bot/.test(navigator.userAgent));\n\n\t\tvar shrinkExpand = 0;\n\t\tvar currentExpand = 0;\n\n\t\tvar isLoading = 0;\n\t\tvar lowRuns = -1;\n\n\t\tvar resetPreloading = function(e){\n\t\t\tisLoading--;\n\t\t\tif(!e || isLoading < 0 || !e.target){\n\t\t\t\tisLoading = 0;\n\t\t\t}\n\t\t};\n\n\t\tvar isVisible = function (elem) {\n\t\t\tif (isBodyHidden == null) {\n\t\t\t\tisBodyHidden = getCSS(document.body, 'visibility') == 'hidden';\n\t\t\t}\n\n\t\t\treturn isBodyHidden || !(getCSS(elem.parentNode, 'visibility') == 'hidden' && getCSS(elem, 'visibility') == 'hidden');\n\t\t};\n\n\t\tvar isNestedVisible = function(elem, elemExpand){\n\t\t\tvar outerRect;\n\t\t\tvar parent = elem;\n\t\t\tvar visible = isVisible(elem);\n\n\t\t\teLtop -= elemExpand;\n\t\t\teLbottom += elemExpand;\n\t\t\teLleft -= elemExpand;\n\t\t\teLright += elemExpand;\n\n\t\t\twhile(visible && (parent = parent.offsetParent) && parent != document.body && parent != docElem){\n\t\t\t\tvisible = ((getCSS(parent, 'opacity') || 1) > 0);\n\n\t\t\t\tif(visible && getCSS(parent, 'overflow') != 'visible'){\n\t\t\t\t\touterRect = parent.getBoundingClientRect();\n\t\t\t\t\tvisible = eLright > outerRect.left &&\n\t\t\t\t\t\teLleft < outerRect.right &&\n\t\t\t\t\t\teLbottom > outerRect.top - 1 &&\n\t\t\t\t\t\teLtop < outerRect.bottom + 1\n\t\t\t\t\t;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn visible;\n\t\t};\n\n\t\tvar checkElements = function() {\n\t\t\tvar eLlen, i, rect, autoLoadElem, loadedSomething, elemExpand, elemNegativeExpand, elemExpandVal,\n\t\t\t\tbeforeExpandVal, defaultExpand, preloadExpand, hFac;\n\t\t\tvar lazyloadElems = lazysizes.elements;\n\n\t\t\tif((loadMode = lazySizesCfg.loadMode) && isLoading < 8 && (eLlen = lazyloadElems.length)){\n\n\t\t\t\ti = 0;\n\n\t\t\t\tlowRuns++;\n\n\t\t\t\tfor(; i < eLlen; i++){\n\n\t\t\t\t\tif(!lazyloadElems[i] || lazyloadElems[i]._lazyRace){continue;}\n\n\t\t\t\t\tif(!supportScroll || (lazysizes.prematureUnveil && lazysizes.prematureUnveil(lazyloadElems[i]))){unveilElement(lazyloadElems[i]);continue;}\n\n\t\t\t\t\tif(!(elemExpandVal = lazyloadElems[i][_getAttribute]('data-expand')) || !(elemExpand = elemExpandVal * 1)){\n\t\t\t\t\t\telemExpand = currentExpand;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!defaultExpand) {\n\t\t\t\t\t\tdefaultExpand = (!lazySizesCfg.expand || lazySizesCfg.expand < 1) ?\n\t\t\t\t\t\t\tdocElem.clientHeight > 500 && docElem.clientWidth > 500 ? 500 : 370 :\n\t\t\t\t\t\t\tlazySizesCfg.expand;\n\n\t\t\t\t\t\tlazysizes._defEx = defaultExpand;\n\n\t\t\t\t\t\tpreloadExpand = defaultExpand * lazySizesCfg.expFactor;\n\t\t\t\t\t\thFac = lazySizesCfg.hFac;\n\t\t\t\t\t\tisBodyHidden = null;\n\n\t\t\t\t\t\tif(currentExpand < preloadExpand && isLoading < 1 && lowRuns > 2 && loadMode > 2 && !document.hidden){\n\t\t\t\t\t\t\tcurrentExpand = preloadExpand;\n\t\t\t\t\t\t\tlowRuns = 0;\n\t\t\t\t\t\t} else if(loadMode > 1 && lowRuns > 1 && isLoading < 6){\n\t\t\t\t\t\t\tcurrentExpand = defaultExpand;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcurrentExpand = shrinkExpand;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif(beforeExpandVal !== elemExpand){\n\t\t\t\t\t\teLvW = innerWidth + (elemExpand * hFac);\n\t\t\t\t\t\telvH = innerHeight + elemExpand;\n\t\t\t\t\t\telemNegativeExpand = elemExpand * -1;\n\t\t\t\t\t\tbeforeExpandVal = elemExpand;\n\t\t\t\t\t}\n\n\t\t\t\t\trect = lazyloadElems[i].getBoundingClientRect();\n\n\t\t\t\t\tif ((eLbottom = rect.bottom) >= elemNegativeExpand &&\n\t\t\t\t\t\t(eLtop = rect.top) <= elvH &&\n\t\t\t\t\t\t(eLright = rect.right) >= elemNegativeExpand * hFac &&\n\t\t\t\t\t\t(eLleft = rect.left) <= eLvW &&\n\t\t\t\t\t\t(eLbottom || eLright || eLleft || eLtop) &&\n\t\t\t\t\t\t(lazySizesCfg.loadHidden || isVisible(lazyloadElems[i])) &&\n\t\t\t\t\t\t((isCompleted && isLoading < 3 && !elemExpandVal && (loadMode < 3 || lowRuns < 4)) || isNestedVisible(lazyloadElems[i], elemExpand))){\n\t\t\t\t\t\tunveilElement(lazyloadElems[i]);\n\t\t\t\t\t\tloadedSomething = true;\n\t\t\t\t\t\tif(isLoading > 9){break;}\n\t\t\t\t\t} else if(!loadedSomething && isCompleted && !autoLoadElem &&\n\t\t\t\t\t\tisLoading < 4 && lowRuns < 4 && loadMode > 2 &&\n\t\t\t\t\t\t(preloadElems[0] || lazySizesCfg.preloadAfterLoad) &&\n\t\t\t\t\t\t(preloadElems[0] || (!elemExpandVal && ((eLbottom || eLright || eLleft || eLtop) || lazyloadElems[i][_getAttribute](lazySizesCfg.sizesAttr) != 'auto')))){\n\t\t\t\t\t\tautoLoadElem = preloadElems[0] || lazyloadElems[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(autoLoadElem && !loadedSomething){\n\t\t\t\t\tunveilElement(autoLoadElem);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar throttledCheckElements = throttle(checkElements);\n\n\t\tvar switchLoadingClass = function(e){\n\t\t\tvar elem = e.target;\n\n\t\t\tif (elem._lazyCache) {\n\t\t\t\tdelete elem._lazyCache;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresetPreloading(e);\n\t\t\taddClass(elem, lazySizesCfg.loadedClass);\n\t\t\tremoveClass(elem, lazySizesCfg.loadingClass);\n\t\t\taddRemoveLoadEvents(elem, rafSwitchLoadingClass);\n\t\t\ttriggerEvent(elem, 'lazyloaded');\n\t\t};\n\t\tvar rafedSwitchLoadingClass = rAFIt(switchLoadingClass);\n\t\tvar rafSwitchLoadingClass = function(e){\n\t\t\trafedSwitchLoadingClass({target: e.target});\n\t\t};\n\n\t\tvar changeIframeSrc = function(elem, src){\n\t\t\tvar loadMode = elem.getAttribute('data-load-mode') || lazySizesCfg.iframeLoadMode;\n\n\t\t\t// loadMode can be also a string!\n\t\t\tif (loadMode == 0) {\n\t\t\t\telem.contentWindow.location.replace(src);\n\t\t\t} else if (loadMode == 1) {\n\t\t\t\telem.src = src;\n\t\t\t}\n\t\t};\n\n\t\tvar handleSources = function(source){\n\t\t\tvar customMedia;\n\n\t\t\tvar sourceSrcset = source[_getAttribute](lazySizesCfg.srcsetAttr);\n\n\t\t\tif( (customMedia = lazySizesCfg.customMedia[source[_getAttribute]('data-media') || source[_getAttribute]('media')]) ){\n\t\t\t\tsource.setAttribute('media', customMedia);\n\t\t\t}\n\n\t\t\tif(sourceSrcset){\n\t\t\t\tsource.setAttribute('srcset', sourceSrcset);\n\t\t\t}\n\t\t};\n\n\t\tvar lazyUnveil = rAFIt(function (elem, detail, isAuto, sizes, isImg){\n\t\t\tvar src, srcset, parent, isPicture, event, firesLoad;\n\n\t\t\tif(!(event = triggerEvent(elem, 'lazybeforeunveil', detail)).defaultPrevented){\n\n\t\t\t\tif(sizes){\n\t\t\t\t\tif(isAuto){\n\t\t\t\t\t\taddClass(elem, lazySizesCfg.autosizesClass);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem.setAttribute('sizes', sizes);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tsrcset = elem[_getAttribute](lazySizesCfg.srcsetAttr);\n\t\t\t\tsrc = elem[_getAttribute](lazySizesCfg.srcAttr);\n\n\t\t\t\tif(isImg) {\n\t\t\t\t\tparent = elem.parentNode;\n\t\t\t\t\tisPicture = parent && regPicture.test(parent.nodeName || '');\n\t\t\t\t}\n\n\t\t\t\tfiresLoad = detail.firesLoad || (('src' in elem) && (srcset || src || isPicture));\n\n\t\t\t\tevent = {target: elem};\n\n\t\t\t\taddClass(elem, lazySizesCfg.loadingClass);\n\n\t\t\t\tif(firesLoad){\n\t\t\t\t\tclearTimeout(resetPreloadingTimer);\n\t\t\t\t\tresetPreloadingTimer = setTimeout(resetPreloading, 2500);\n\t\t\t\t\taddRemoveLoadEvents(elem, rafSwitchLoadingClass, true);\n\t\t\t\t}\n\n\t\t\t\tif(isPicture){\n\t\t\t\t\tforEach.call(parent.getElementsByTagName('source'), handleSources);\n\t\t\t\t}\n\n\t\t\t\tif(srcset){\n\t\t\t\t\telem.setAttribute('srcset', srcset);\n\t\t\t\t} else if(src && !isPicture){\n\t\t\t\t\tif(regIframe.test(elem.nodeName)){\n\t\t\t\t\t\tchangeIframeSrc(elem, src);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem.src = src;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(isImg && (srcset || isPicture)){\n\t\t\t\t\tupdatePolyfill(elem, {src: src});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(elem._lazyRace){\n\t\t\t\tdelete elem._lazyRace;\n\t\t\t}\n\t\t\tremoveClass(elem, lazySizesCfg.lazyClass);\n\n\t\t\trAF(function(){\n\t\t\t\t// Part of this can be removed as soon as this fix is older: https://bugs.chromium.org/p/chromium/issues/detail?id=7731 (2015)\n\t\t\t\tvar isLoaded = elem.complete && elem.naturalWidth > 1;\n\n\t\t\t\tif( !firesLoad || isLoaded){\n\t\t\t\t\tif (isLoaded) {\n\t\t\t\t\t\taddClass(elem, lazySizesCfg.fastLoadedClass);\n\t\t\t\t\t}\n\t\t\t\t\tswitchLoadingClass(event);\n\t\t\t\t\telem._lazyCache = true;\n\t\t\t\t\tsetTimeout(function(){\n\t\t\t\t\t\tif ('_lazyCache' in elem) {\n\t\t\t\t\t\t\tdelete elem._lazyCache;\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 9);\n\t\t\t\t}\n\t\t\t\tif (elem.loading == 'lazy') {\n\t\t\t\t\tisLoading--;\n\t\t\t\t}\n\t\t\t}, true);\n\t\t});\n\n\t\t/**\n\t\t *\n\t\t * @param elem { Element }\n\t\t */\n\t\tvar unveilElement = function (elem){\n\t\t\tif (elem._lazyRace) {return;}\n\t\t\tvar detail;\n\n\t\t\tvar isImg = regImg.test(elem.nodeName);\n\n\t\t\t//allow using sizes=\"auto\", but don't use. it's invalid. Use data-sizes=\"auto\" or a valid value for sizes instead (i.e.: sizes=\"80vw\")\n\t\t\tvar sizes = isImg && (elem[_getAttribute](lazySizesCfg.sizesAttr) || elem[_getAttribute]('sizes'));\n\t\t\tvar isAuto = sizes == 'auto';\n\n\t\t\tif( (isAuto || !isCompleted) && isImg && (elem[_getAttribute]('src') || elem.srcset) && !elem.complete && !hasClass(elem, lazySizesCfg.errorClass) && hasClass(elem, lazySizesCfg.lazyClass)){return;}\n\n\t\t\tdetail = triggerEvent(elem, 'lazyunveilread').detail;\n\n\t\t\tif(isAuto){\n\t\t\t\t autoSizer.updateElem(elem, true, elem.offsetWidth);\n\t\t\t}\n\n\t\t\telem._lazyRace = true;\n\t\t\tisLoading++;\n\n\t\t\tlazyUnveil(elem, detail, isAuto, sizes, isImg);\n\t\t};\n\n\t\tvar afterScroll = debounce(function(){\n\t\t\tlazySizesCfg.loadMode = 3;\n\t\t\tthrottledCheckElements();\n\t\t});\n\n\t\tvar altLoadmodeScrollListner = function(){\n\t\t\tif(lazySizesCfg.loadMode == 3){\n\t\t\t\tlazySizesCfg.loadMode = 2;\n\t\t\t}\n\t\t\tafterScroll();\n\t\t};\n\n\t\tvar onload = function(){\n\t\t\tif(isCompleted){return;}\n\t\t\tif(Date.now() - started < 999){\n\t\t\t\tsetTimeout(onload, 999);\n\t\t\t\treturn;\n\t\t\t}\n\n\n\t\t\tisCompleted = true;\n\n\t\t\tlazySizesCfg.loadMode = 3;\n\n\t\t\tthrottledCheckElements();\n\n\t\t\taddEventListener('scroll', altLoadmodeScrollListner, true);\n\t\t};\n\n\t\treturn {\n\t\t\t_: function(){\n\t\t\t\tstarted = Date.now();\n\n\t\t\t\tlazysizes.elements = document.getElementsByClassName(lazySizesCfg.lazyClass);\n\t\t\t\tpreloadElems = document.getElementsByClassName(lazySizesCfg.lazyClass + ' ' + lazySizesCfg.preloadClass);\n\n\t\t\t\taddEventListener('scroll', throttledCheckElements, true);\n\n\t\t\t\taddEventListener('resize', throttledCheckElements, true);\n\n\t\t\t\taddEventListener('pageshow', function (e) {\n\t\t\t\t\tif (e.persisted) {\n\t\t\t\t\t\tvar loadingElements = document.querySelectorAll('.' + lazySizesCfg.loadingClass);\n\n\t\t\t\t\t\tif (loadingElements.length && loadingElements.forEach) {\n\t\t\t\t\t\t\trequestAnimationFrame(function () {\n\t\t\t\t\t\t\t\tloadingElements.forEach( function (img) {\n\t\t\t\t\t\t\t\t\tif (img.complete) {\n\t\t\t\t\t\t\t\t\t\tunveilElement(img);\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}\n\t\t\t\t});\n\n\t\t\t\tif(window.MutationObserver){\n\t\t\t\t\tnew MutationObserver( throttledCheckElements ).observe( docElem, {childList: true, subtree: true, attributes: true} );\n\t\t\t\t} else {\n\t\t\t\t\tdocElem[_addEventListener]('DOMNodeInserted', throttledCheckElements, true);\n\t\t\t\t\tdocElem[_addEventListener]('DOMAttrModified', throttledCheckElements, true);\n\t\t\t\t\tsetInterval(throttledCheckElements, 999);\n\t\t\t\t}\n\n\t\t\t\taddEventListener('hashchange', throttledCheckElements, true);\n\n\t\t\t\t//, 'fullscreenchange'\n\t\t\t\t['focus', 'mouseover', 'click', 'load', 'transitionend', 'animationend'].forEach(function(name){\n\t\t\t\t\tdocument[_addEventListener](name, throttledCheckElements, true);\n\t\t\t\t});\n\n\t\t\t\tif((/d$|^c/.test(document.readyState))){\n\t\t\t\t\tonload();\n\t\t\t\t} else {\n\t\t\t\t\taddEventListener('load', onload);\n\t\t\t\t\tdocument[_addEventListener]('DOMContentLoaded', throttledCheckElements);\n\t\t\t\t\tsetTimeout(onload, 20000);\n\t\t\t\t}\n\n\t\t\t\tif(lazysizes.elements.length){\n\t\t\t\t\tcheckElements();\n\t\t\t\t\trAF._lsFlush();\n\t\t\t\t} else {\n\t\t\t\t\tthrottledCheckElements();\n\t\t\t\t}\n\t\t\t},\n\t\t\tcheckElems: throttledCheckElements,\n\t\t\tunveil: unveilElement,\n\t\t\t_aLSL: altLoadmodeScrollListner,\n\t\t};\n\t})();\n\n\n\tvar autoSizer = (function(){\n\t\tvar autosizesElems;\n\n\t\tvar sizeElement = rAFIt(function(elem, parent, event, width){\n\t\t\tvar sources, i, len;\n\t\t\telem._lazysizesWidth = width;\n\t\t\twidth += 'px';\n\n\t\t\telem.setAttribute('sizes', width);\n\n\t\t\tif(regPicture.test(parent.nodeName || '')){\n\t\t\t\tsources = parent.getElementsByTagName('source');\n\t\t\t\tfor(i = 0, len = sources.length; i < len; i++){\n\t\t\t\t\tsources[i].setAttribute('sizes', width);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!event.detail.dataAttr){\n\t\t\t\tupdatePolyfill(elem, event.detail);\n\t\t\t}\n\t\t});\n\t\t/**\n\t\t *\n\t\t * @param elem {Element}\n\t\t * @param dataAttr\n\t\t * @param [width] { number }\n\t\t */\n\t\tvar getSizeElement = function (elem, dataAttr, width){\n\t\t\tvar event;\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif(parent){\n\t\t\t\twidth = getWidth(elem, parent, width);\n\t\t\t\tevent = triggerEvent(elem, 'lazybeforesizes', {width: width, dataAttr: !!dataAttr});\n\n\t\t\t\tif(!event.defaultPrevented){\n\t\t\t\t\twidth = event.detail.width;\n\n\t\t\t\t\tif(width && width !== elem._lazysizesWidth){\n\t\t\t\t\t\tsizeElement(elem, parent, event, width);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar updateElementsSizes = function(){\n\t\t\tvar i;\n\t\t\tvar len = autosizesElems.length;\n\t\t\tif(len){\n\t\t\t\ti = 0;\n\n\t\t\t\tfor(; i < len; i++){\n\t\t\t\t\tgetSizeElement(autosizesElems[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar debouncedUpdateElementsSizes = debounce(updateElementsSizes);\n\n\t\treturn {\n\t\t\t_: function(){\n\t\t\t\tautosizesElems = document.getElementsByClassName(lazySizesCfg.autosizesClass);\n\t\t\t\taddEventListener('resize', debouncedUpdateElementsSizes);\n\t\t\t},\n\t\t\tcheckElems: debouncedUpdateElementsSizes,\n\t\t\tupdateElem: getSizeElement\n\t\t};\n\t})();\n\n\tvar init = function(){\n\t\tif(!init.i && document.getElementsByClassName){\n\t\t\tinit.i = true;\n\t\t\tautoSizer._();\n\t\t\tloader._();\n\t\t}\n\t};\n\n\tsetTimeout(function(){\n\t\tif(lazySizesCfg.init){\n\t\t\tinit();\n\t\t}\n\t});\n\n\tlazysizes = {\n\t\t/**\n\t\t * @type { LazySizesConfigPartial }\n\t\t */\n\t\tcfg: lazySizesCfg,\n\t\tautoSizer: autoSizer,\n\t\tloader: loader,\n\t\tinit: init,\n\t\tuP: updatePolyfill,\n\t\taC: addClass,\n\t\trC: removeClass,\n\t\thC: hasClass,\n\t\tfire: triggerEvent,\n\t\tgW: getWidth,\n\t\trAF: rAF,\n\t};\n\n\treturn lazysizes;\n}\n));\n", "(function (root) {/*global exports, Intl*/\n/**\n * This script gives you the zone info key representing your device's time zone setting.\n *\n * @name jsTimezoneDetect\n * @version 1.0.6\n * @author Jon Nylander\n * @license MIT License - https://bitbucket.org/pellepim/jstimezonedetect/src/default/LICENCE.txt\n *\n * For usage and examples, visit:\n * http://pellepim.bitbucket.org/jstz/\n *\n * Copyright (c) Jon Nylander\n */\n\n\n/**\n * Namespace to hold all the code for timezone detection.\n */\nvar jstz = (function () {\n    'use strict';\n    var HEMISPHERE_SOUTH = 's',\n\n        consts = {\n            DAY: 86400000,\n            HOUR: 3600000,\n            MINUTE: 60000,\n            SECOND: 1000,\n            BASELINE_YEAR: 2014,\n            MAX_SCORE: 864000000, // 10 days\n            AMBIGUITIES: {\n                'America/Denver':       ['America/Mazatlan'],\n                'Europe/London':        ['Africa/Casablanca'],\n                'America/Chicago':      ['America/Mexico_City'],\n                'America/Asuncion':     ['America/Campo_Grande', 'America/Santiago'],\n                'America/Montevideo':   ['America/Sao_Paulo', 'America/Santiago'],\n                // Europe/Minsk should not be in this list... but Windows.\n                'Asia/Beirut':          ['Asia/Amman', 'Asia/Jerusalem', 'Europe/Helsinki', 'Asia/Damascus', 'Africa/Cairo', 'Asia/Gaza', 'Europe/Minsk'],\n                'Pacific/Auckland':     ['Pacific/Fiji'],\n                'America/Los_Angeles':  ['America/Santa_Isabel'],\n                'America/New_York':     ['America/Havana'],\n                'America/Halifax':      ['America/Goose_Bay'],\n                'America/Godthab':      ['America/Miquelon'],\n                'Asia/Dubai':           ['Asia/Yerevan'],\n                'Asia/Jakarta':         ['Asia/Krasnoyarsk'],\n                'Asia/Shanghai':        ['Asia/Irkutsk', 'Australia/Perth'],\n                'Australia/Sydney':     ['Australia/Lord_Howe'],\n                'Asia/Tokyo':           ['Asia/Yakutsk'],\n                'Asia/Dhaka':           ['Asia/Omsk'],\n                // In the real world Yerevan is not ambigous for Baku... but Windows.\n                'Asia/Baku':            ['Asia/Yerevan'],\n                'Australia/Brisbane':   ['Asia/Vladivostok'],\n                'Pacific/Noumea':       ['Asia/Vladivostok'],\n                'Pacific/Majuro':       ['Asia/Kamchatka', 'Pacific/Fiji'],\n                'Pacific/Tongatapu':    ['Pacific/Apia'],\n                'Asia/Baghdad':         ['Europe/Minsk', 'Europe/Moscow'],\n                'Asia/Karachi':         ['Asia/Yekaterinburg'],\n                'Africa/Johannesburg':  ['Asia/Gaza', 'Africa/Cairo']\n            }\n        },\n\n        /**\n         * Gets the offset in minutes from UTC for a certain date.\n         * @param {Date} date\n         * @returns {Number}\n         */\n        get_date_offset = function get_date_offset(date) {\n            var offset = -date.getTimezoneOffset();\n            return (offset !== null ? offset : 0);\n        },\n\n        /**\n         * This function does some basic calculations to create information about\n         * the user's timezone. It uses REFERENCE_YEAR as a solid year for which\n         * the script has been tested rather than depend on the year set by the\n         * client device.\n         *\n         * Returns a key that can be used to do lookups in jstz.olson.timezones.\n         * eg: \"720,1,2\".\n         *\n         * @returns {String}\n         */\n        lookup_key = function lookup_key() {\n            var january_offset = get_date_offset(new Date(consts.BASELINE_YEAR, 0, 2)),\n                june_offset = get_date_offset(new Date(consts.BASELINE_YEAR, 5, 2)),\n                diff = january_offset - june_offset;\n\n            if (diff < 0) {\n                return january_offset + \",1\";\n            } else if (diff > 0) {\n                return june_offset + \",1,\" + HEMISPHERE_SOUTH;\n            }\n\n            return january_offset + \",0\";\n        },\n\n\n        /**\n         * Tries to get the time zone key directly from the operating system for those\n         * environments that support the ECMAScript Internationalization API.\n         */\n        get_from_internationalization_api = function get_from_internationalization_api() {\n            var format, timezone;\n            if (typeof Intl === \"undefined\" || typeof Intl.DateTimeFormat === \"undefined\") {\n                return;\n            }\n            format = Intl.DateTimeFormat();\n            if (typeof format === \"undefined\" || typeof format.resolvedOptions === \"undefined\") {\n                return;\n            }\n            timezone = format.resolvedOptions().timeZone;\n            if (timezone && (timezone.indexOf(\"/\") > -1 || timezone === 'UTC') && timezone.indexOf(\"Etc\") != 0) {\n                return timezone;\n            }\n        },\n\n        /**\n         * Starting point for getting all the DST rules for a specific year\n         * for the current timezone (as described by the client system).\n         *\n         * Returns an object with start and end attributes, or false if no\n         * DST rules were found for the year.\n         *\n         * @param year\n         * @returns {Object} || {Boolean}\n         */\n        dst_dates = function dst_dates(year) {\n            var yearstart = new Date(year, 0, 1, 0, 0, 1, 0).getTime();\n            var yearend = new Date(year, 12, 31, 23, 59, 59).getTime();\n            var current = yearstart;\n            var offset = (new Date(current)).getTimezoneOffset();\n            var dst_start = null;\n            var dst_end = null;\n\n            while (current < yearend - 86400000) {\n                var dateToCheck = new Date(current);\n                var dateToCheckOffset = dateToCheck.getTimezoneOffset();\n\n                if (dateToCheckOffset !== offset) {\n                    if (dateToCheckOffset < offset) {\n                        dst_start = dateToCheck;\n                    }\n                    if (dateToCheckOffset > offset) {\n                        dst_end = dateToCheck;\n                    }\n                    offset = dateToCheckOffset;\n                }\n\n                current += 86400000;\n            }\n\n            if (dst_start && dst_end) {\n                return {\n                    s: find_dst_fold(dst_start).getTime(),\n                    e: find_dst_fold(dst_end).getTime()\n                };\n            }\n\n            return false;\n        },\n\n        /**\n         * Probably completely unnecessary function that recursively finds the\n         * exact (to the second) time when a DST rule was changed.\n         *\n         * @param a_date - The candidate Date.\n         * @param padding - integer specifying the padding to allow around the candidate\n         *                  date for finding the fold.\n         * @param iterator - integer specifying how many milliseconds to iterate while\n         *                   searching for the fold.\n         *\n         * @returns {Date}\n         */\n        find_dst_fold = function find_dst_fold(a_date, padding, iterator) {\n            if (typeof padding === 'undefined') {\n                padding = consts.DAY;\n                iterator = consts.HOUR;\n            }\n\n            var date_start = new Date(a_date.getTime() - padding).getTime();\n            var date_end = a_date.getTime() + padding;\n            var offset = new Date(date_start).getTimezoneOffset();\n\n            var current = date_start;\n\n            var dst_change = null;\n            while (current < date_end - iterator) {\n                var dateToCheck = new Date(current);\n                var dateToCheckOffset = dateToCheck.getTimezoneOffset();\n\n                if (dateToCheckOffset !== offset) {\n                    dst_change = dateToCheck;\n                    break;\n                }\n                current += iterator;\n            }\n\n            if (padding === consts.DAY) {\n                return find_dst_fold(dst_change, consts.HOUR, consts.MINUTE);\n            }\n\n            if (padding === consts.HOUR) {\n                return find_dst_fold(dst_change, consts.MINUTE, consts.SECOND);\n            }\n\n            return dst_change;\n        },\n\n        windows7_adaptations = function windows7_adaptions(rule_list, preliminary_timezone, score, sample) {\n            if (score !== 'N/A') {\n                return score;\n            }\n            if (preliminary_timezone === 'Asia/Beirut') {\n                if (sample.name === 'Africa/Cairo') {\n                    if (rule_list[6].s === 1398376800000 && rule_list[6].e === 1411678800000) {\n                        return 0;\n                    }\n                }\n                if (sample.name === 'Asia/Jerusalem') {\n                    if (rule_list[6].s === 1395964800000 && rule_list[6].e === 1411858800000) {\n                        return 0;\n                }\n            }\n            } else if (preliminary_timezone === 'America/Santiago') {\n                if (sample.name === 'America/Asuncion') {\n                    if (rule_list[6].s === 1412481600000 && rule_list[6].e === 1397358000000) {\n                        return 0;\n                    }\n                }\n                if (sample.name === 'America/Campo_Grande') {\n                    if (rule_list[6].s === 1413691200000 && rule_list[6].e === 1392519600000) {\n                        return 0;\n                    }\n                }\n            } else if (preliminary_timezone === 'America/Montevideo') {\n                if (sample.name === 'America/Sao_Paulo') {\n                    if (rule_list[6].s === 1413687600000 && rule_list[6].e === 1392516000000) {\n                        return 0;\n                    }\n                }\n            } else if (preliminary_timezone === 'Pacific/Auckland') {\n                if (sample.name === 'Pacific/Fiji') {\n                    if (rule_list[6].s === 1414245600000 && rule_list[6].e === 1396101600000) {\n                        return 0;\n                    }\n                }\n            }\n\n            return score;\n        },\n\n        /**\n         * Takes the DST rules for the current timezone, and proceeds to find matches\n         * in the jstz.olson.dst_rules.zones array.\n         *\n         * Compares samples to the current timezone on a scoring basis.\n         *\n         * Candidates are ruled immediately if either the candidate or the current zone\n         * has a DST rule where the other does not.\n         *\n         * Candidates are ruled out immediately if the current zone has a rule that is\n         * outside the DST scope of the candidate.\n         *\n         * Candidates are included for scoring if the current zones rules fall within the\n         * span of the samples rules.\n         *\n         * Low score is best, the score is calculated by summing up the differences in DST\n         * rules and if the consts.MAX_SCORE is overreached the candidate is ruled out.\n         *\n         * Yah follow? :)\n         *\n         * @param rule_list\n         * @param preliminary_timezone\n         * @returns {*}\n         */\n        best_dst_match = function best_dst_match(rule_list, preliminary_timezone) {\n            var score_sample = function score_sample(sample) {\n                var score = 0;\n\n                for (var j = 0; j < rule_list.length; j++) {\n\n                    // Both sample and current time zone report DST during the year.\n                    if (!!sample.rules[j] && !!rule_list[j]) {\n\n                        // The current time zone's DST rules are inside the sample's. Include.\n                        if (rule_list[j].s >= sample.rules[j].s && rule_list[j].e <= sample.rules[j].e) {\n                            score = 0;\n                            score += Math.abs(rule_list[j].s - sample.rules[j].s);\n                            score += Math.abs(sample.rules[j].e - rule_list[j].e);\n\n                        // The current time zone's DST rules are outside the sample's. Discard.\n                        } else {\n                            score = 'N/A';\n                            break;\n                        }\n\n                        // The max score has been reached. Discard.\n                        if (score > consts.MAX_SCORE) {\n                            score = 'N/A';\n                            break;\n                        }\n                    }\n                }\n\n                score = windows7_adaptations(rule_list, preliminary_timezone, score, sample);\n\n                return score;\n            };\n            var scoreboard = {};\n            var dst_zones = jstz.olson.dst_rules.zones;\n            var dst_zones_length = dst_zones.length;\n            var ambiguities = consts.AMBIGUITIES[preliminary_timezone];\n\n            for (var i = 0; i < dst_zones_length; i++) {\n                var sample = dst_zones[i];\n                var score = score_sample(dst_zones[i]);\n\n                if (score !== 'N/A') {\n                    scoreboard[sample.name] = score;\n                }\n            }\n\n            for (var tz in scoreboard) {\n                if (scoreboard.hasOwnProperty(tz)) {\n                    for (var j = 0; j < ambiguities.length; j++) {\n                        if (ambiguities[j] === tz) {\n                        return tz;\n                        }\n                    }\n                }\n            }\n\n            return preliminary_timezone;\n        },\n\n        /**\n         * Takes the preliminary_timezone as detected by lookup_key().\n         *\n         * Builds up the current timezones DST rules for the years defined\n         * in the jstz.olson.dst_rules.years array.\n         *\n         * If there are no DST occurences for those years, immediately returns\n         * the preliminary timezone. Otherwise proceeds and tries to solve\n         * ambiguities.\n         *\n         * @param preliminary_timezone\n         * @returns {String} timezone_name\n         */\n        get_by_dst = function get_by_dst(preliminary_timezone) {\n            var get_rules = function get_rules() {\n                var rule_list = [];\n                for (var i = 0; i < jstz.olson.dst_rules.years.length; i++) {\n                    var year_rules = dst_dates(jstz.olson.dst_rules.years[i]);\n                    rule_list.push(year_rules);\n                }\n                return rule_list;\n            };\n            var check_has_dst = function check_has_dst(rules) {\n                for (var i = 0; i < rules.length; i++) {\n                    if (rules[i] !== false) {\n                        return true;\n                    }\n                }\n                return false;\n            };\n            var rules = get_rules();\n            var has_dst = check_has_dst(rules);\n\n            if (has_dst) {\n                return best_dst_match(rules, preliminary_timezone);\n            }\n\n            return preliminary_timezone;\n        },\n\n        /**\n         * Uses get_timezone_info() to formulate a key to use in the olson.timezones dictionary.\n         *\n         * Returns an object with one function \".name()\"\n         *\n         * @returns Object\n         */\n        determine = function determine() {\n            var preliminary_tz = get_from_internationalization_api();\n\n            if (!preliminary_tz) {\n                preliminary_tz = jstz.olson.timezones[lookup_key()];\n\n                if (typeof consts.AMBIGUITIES[preliminary_tz] !== 'undefined') {\n                    preliminary_tz = get_by_dst(preliminary_tz);\n                }\n            }\n\n            return {\n                name: function () {\n                    return preliminary_tz;\n                },\n                stdTimezoneOffset : function () {\n                    // negative to match what (new Date).getTimezoneOffset() will return\n                    return -lookup_key().split(',')[0];\n                },\n                timezoneOffset : function () {\n                    // negative to match what (new Date).getTimezoneOffset() will return\n                    return -get_date_offset(new Date())\n                }\n            };\n        };\n\n    return {\n        determine: determine\n    };\n}());\n\n\njstz.olson = jstz.olson || {};\n\n/**\n * The keys in this dictionary are comma separated as such:\n *\n * First the offset compared to UTC time in minutes.\n *\n * Then a flag which is 0 if the timezone does not take daylight savings into account and 1 if it\n * does.\n *\n * Thirdly an optional 's' signifies that the timezone is in the southern hemisphere,\n * only interesting for timezones with DST.\n *\n * The mapped arrays is used for constructing the jstz.TimeZone object from within\n * jstz.determine();\n */\njstz.olson.timezones = {\n    '-720,0': 'Etc/GMT+12',\n    '-660,0': 'Pacific/Pago_Pago',\n    '-660,1,s': 'Pacific/Apia', // Why? Because windows... cry!\n    '-600,1': 'America/Adak',\n    '-600,0': 'Pacific/Honolulu',\n    '-570,0': 'Pacific/Marquesas',\n    '-540,0': 'Pacific/Gambier',\n    '-540,1': 'America/Anchorage',\n    '-480,1': 'America/Los_Angeles',\n    '-480,0': 'Pacific/Pitcairn',\n    '-420,0': 'America/Phoenix',\n    '-420,1': 'America/Denver',\n    '-360,0': 'America/Guatemala',\n    '-360,1': 'America/Chicago',\n    '-360,1,s': 'Pacific/Easter',\n    '-300,0': 'America/Bogota',\n    '-300,1': 'America/New_York',\n    '-270,0': 'America/Caracas',\n    '-240,1': 'America/Halifax',\n    '-240,0': 'America/Santo_Domingo',\n    '-240,1,s': 'America/Asuncion',\n    '-210,1': 'America/St_Johns',\n    '-180,1': 'America/Godthab',\n    '-180,0': 'America/Argentina/Buenos_Aires',\n    '-180,1,s': 'America/Montevideo',\n    '-120,0': 'America/Noronha',\n    '-120,1': 'America/Noronha',\n    '-60,1': 'Atlantic/Azores',\n    '-60,0': 'Atlantic/Cape_Verde',\n    '0,0': 'UTC',\n    '0,1': 'Europe/London',\n    '60,1': 'Europe/Berlin',\n    '60,0': 'Africa/Lagos',\n    '60,1,s': 'Africa/Windhoek',\n    '120,1': 'Asia/Beirut',\n    '120,0': 'Africa/Johannesburg',\n    '180,0': 'Asia/Baghdad',\n    '180,1': 'Europe/Moscow',\n    '210,1': 'Asia/Tehran',\n    '240,0': 'Asia/Dubai',\n    '240,1': 'Asia/Baku',\n    '270,0': 'Asia/Kabul',\n    '300,1': 'Asia/Yekaterinburg',\n    '300,0': 'Asia/Karachi',\n    '330,0': 'Asia/Kolkata',\n    '345,0': 'Asia/Kathmandu',\n    '360,0': 'Asia/Dhaka',\n    '360,1': 'Asia/Omsk',\n    '390,0': 'Asia/Rangoon',\n    '420,1': 'Asia/Krasnoyarsk',\n    '420,0': 'Asia/Jakarta',\n    '480,0': 'Asia/Shanghai',\n    '480,1': 'Asia/Irkutsk',\n    '525,0': 'Australia/Eucla',\n    '525,1,s': 'Australia/Eucla',\n    '540,1': 'Asia/Yakutsk',\n    '540,0': 'Asia/Tokyo',\n    '570,0': 'Australia/Darwin',\n    '570,1,s': 'Australia/Adelaide',\n    '600,0': 'Australia/Brisbane',\n    '600,1': 'Asia/Vladivostok',\n    '600,1,s': 'Australia/Sydney',\n    '630,1,s': 'Australia/Lord_Howe',\n    '660,1': 'Asia/Kamchatka',\n    '660,0': 'Pacific/Noumea',\n    '690,0': 'Pacific/Norfolk',\n    '720,1,s': 'Pacific/Auckland',\n    '720,0': 'Pacific/Majuro',\n    '765,1,s': 'Pacific/Chatham',\n    '780,0': 'Pacific/Tongatapu',\n    '780,1,s': 'Pacific/Apia',\n    '840,0': 'Pacific/Kiritimati'\n};\n\n/* Build time: 2015-11-02 13:01:00Z Build by invoking python utilities/dst.py generate */\njstz.olson.dst_rules = {\n    \"years\": [\n        2008,\n        2009,\n        2010,\n        2011,\n        2012,\n        2013,\n        2014\n    ],\n    \"zones\": [\n        {\n            \"name\": \"Africa/Cairo\",\n            \"rules\": [\n                {\n                    \"e\": 1219957200000,\n                    \"s\": 1209074400000\n                },\n                {\n                    \"e\": 1250802000000,\n                    \"s\": 1240524000000\n                },\n                {\n                    \"e\": 1285880400000,\n                    \"s\": 1284069600000\n                },\n                false,\n                false,\n                false,\n                {\n                    \"e\": 1411678800000,\n                    \"s\": 1406844000000\n                }\n            ]\n        },\n        {\n            \"name\": \"Africa/Casablanca\",\n            \"rules\": [\n                {\n                    \"e\": 1220223600000,\n                    \"s\": 1212278400000\n                },\n                {\n                    \"e\": 1250809200000,\n                    \"s\": 1243814400000\n                },\n                {\n                    \"e\": 1281222000000,\n                    \"s\": 1272758400000\n                },\n                {\n                    \"e\": 1312066800000,\n                    \"s\": 1301788800000\n                },\n                {\n                    \"e\": 1348970400000,\n                    \"s\": 1345428000000\n                },\n                {\n                    \"e\": 1382839200000,\n                    \"s\": 1376100000000\n                },\n                {\n                    \"e\": 1414288800000,\n                    \"s\": 1406944800000\n                }\n            ]\n        },\n        {\n            \"name\": \"America/Asuncion\",\n            \"rules\": [\n                {\n                    \"e\": 1205031600000,\n                    \"s\": 1224388800000\n                },\n                {\n                    \"e\": 1236481200000,\n                    \"s\": 1255838400000\n                },\n                {\n                    \"e\": 1270954800000,\n                    \"s\": 1286078400000\n                },\n                {\n                    \"e\": 1302404400000,\n                    \"s\": 1317528000000\n                },\n                {\n                    \"e\": 1333854000000,\n                    \"s\": 1349582400000\n                },\n                {\n                    \"e\": 1364094000000,\n                    \"s\": 1381032000000\n                },\n                {\n                    \"e\": 1395543600000,\n                    \"s\": 1412481600000\n                }\n            ]\n        },\n        {\n            \"name\": \"America/Campo_Grande\",\n            \"rules\": [\n                {\n                    \"e\": 1203217200000,\n                    \"s\": 1224388800000\n                },\n                {\n                    \"e\": 1234666800000,\n                    \"s\": 1255838400000\n                },\n                {\n                    \"e\": 1266721200000,\n                    \"s\": 1287288000000\n                },\n                {\n                    \"e\": 1298170800000,\n                    \"s\": 1318737600000\n                },\n                {\n                    \"e\": 1330225200000,\n                    \"s\": 1350792000000\n                },\n                {\n                    \"e\": 1361070000000,\n                    \"s\": 1382241600000\n                },\n                {\n                    \"e\": 1392519600000,\n                    \"s\": 1413691200000\n                }\n            ]\n        },\n        {\n            \"name\": \"America/Goose_Bay\",\n            \"rules\": [\n                {\n                    \"e\": 1225594860000,\n                    \"s\": 1205035260000\n                },\n                {\n                    \"e\": 1257044460000,\n                    \"s\": 1236484860000\n                },\n                {\n                    \"e\": 1289098860000,\n                    \"s\": 1268539260000\n                },\n                {\n                    \"e\": 1320555600000,\n                    \"s\": 1299988860000\n                },\n                {\n                    \"e\": 1352005200000,\n                    \"s\": 1331445600000\n                },\n                {\n                    \"e\": 1383454800000,\n                    \"s\": 1362895200000\n                },\n                {\n                    \"e\": 1414904400000,\n                    \"s\": 1394344800000\n                }\n            ]\n        },\n        {\n            \"name\": \"America/Havana\",\n            \"rules\": [\n                {\n                    \"e\": 1224997200000,\n                    \"s\": 1205643600000\n                },\n                {\n                    \"e\": 1256446800000,\n                    \"s\": 1236488400000\n                },\n                {\n                    \"e\": 1288501200000,\n                    \"s\": 1268542800000\n                },\n                {\n                    \"e\": 1321160400000,\n                    \"s\": 1300597200000\n                },\n                {\n                    \"e\": 1352005200000,\n                    \"s\": 1333256400000\n                },\n                {\n                    \"e\": 1383454800000,\n                    \"s\": 1362891600000\n                },\n                {\n                    \"e\": 1414904400000,\n                    \"s\": 1394341200000\n                }\n            ]\n        },\n        {\n            \"name\": \"America/Mazatlan\",\n            \"rules\": [\n                {\n                    \"e\": 1225008000000,\n                    \"s\": 1207472400000\n                },\n                {\n                    \"e\": 1256457600000,\n                    \"s\": 1238922000000\n                },\n                {\n                    \"e\": 1288512000000,\n                    \"s\": 1270371600000\n                },\n                {\n                    \"e\": 1319961600000,\n                    \"s\": 1301821200000\n                },\n                {\n                    \"e\": 1351411200000,\n                    \"s\": 1333270800000\n                },\n                {\n                    \"e\": 1382860800000,\n                    \"s\": 1365325200000\n                },\n                {\n                    \"e\": 1414310400000,\n                    \"s\": 1396774800000\n                }\n            ]\n        },\n        {\n            \"name\": \"America/Mexico_City\",\n            \"rules\": [\n                {\n                    \"e\": 1225004400000,\n                    \"s\": 1207468800000\n                },\n                {\n                    \"e\": 1256454000000,\n                    \"s\": 1238918400000\n                },\n                {\n                    \"e\": 1288508400000,\n                    \"s\": 1270368000000\n                },\n                {\n                    \"e\": 1319958000000,\n                    \"s\": 1301817600000\n                },\n                {\n                    \"e\": 1351407600000,\n                    \"s\": 1333267200000\n                },\n                {\n                    \"e\": 1382857200000,\n                    \"s\": 1365321600000\n                },\n                {\n                    \"e\": 1414306800000,\n                    \"s\": 1396771200000\n                }\n            ]\n        },\n        {\n            \"name\": \"America/Miquelon\",\n            \"rules\": [\n                {\n                    \"e\": 1225598400000,\n                    \"s\": 1205038800000\n                },\n                {\n                    \"e\": 1257048000000,\n                    \"s\": 1236488400000\n                },\n                {\n                    \"e\": 1289102400000,\n                    \"s\": 1268542800000\n                },\n                {\n                    \"e\": 1320552000000,\n                    \"s\": 1299992400000\n                },\n                {\n                    \"e\": 1352001600000,\n                    \"s\": 1331442000000\n                },\n                {\n                    \"e\": 1383451200000,\n                    \"s\": 1362891600000\n                },\n                {\n                    \"e\": 1414900800000,\n                    \"s\": 1394341200000\n                }\n            ]\n        },\n        {\n            \"name\": \"America/Santa_Isabel\",\n            \"rules\": [\n                {\n                    \"e\": 1225011600000,\n                    \"s\": 1207476000000\n                },\n                {\n                    \"e\": 1256461200000,\n                    \"s\": 1238925600000\n                },\n                {\n                    \"e\": 1288515600000,\n                    \"s\": 1270375200000\n                },\n                {\n                    \"e\": 1319965200000,\n                    \"s\": 1301824800000\n                },\n                {\n                    \"e\": 1351414800000,\n                    \"s\": 1333274400000\n                },\n                {\n                    \"e\": 1382864400000,\n                    \"s\": 1365328800000\n                },\n                {\n                    \"e\": 1414314000000,\n                    \"s\": 1396778400000\n                }\n            ]\n        },\n        {\n            \"name\": \"America/Santiago\",\n            \"rules\": [\n                {\n                    \"e\": 1206846000000,\n                    \"s\": 1223784000000\n                },\n                {\n                    \"e\": 1237086000000,\n                    \"s\": 1255233600000\n                },\n                {\n                    \"e\": 1270350000000,\n                    \"s\": 1286683200000\n                },\n                {\n                    \"e\": 1304823600000,\n                    \"s\": 1313899200000\n                },\n                {\n                    \"e\": 1335668400000,\n                    \"s\": 1346558400000\n                },\n                {\n                    \"e\": 1367118000000,\n                    \"s\": 1378612800000\n                },\n                {\n                    \"e\": 1398567600000,\n                    \"s\": 1410062400000\n                }\n            ]\n        },\n        {\n            \"name\": \"America/Sao_Paulo\",\n            \"rules\": [\n                {\n                    \"e\": 1203213600000,\n                    \"s\": 1224385200000\n                },\n                {\n                    \"e\": 1234663200000,\n                    \"s\": 1255834800000\n                },\n                {\n                    \"e\": 1266717600000,\n                    \"s\": 1287284400000\n                },\n                {\n                    \"e\": 1298167200000,\n                    \"s\": 1318734000000\n                },\n                {\n                    \"e\": 1330221600000,\n                    \"s\": 1350788400000\n                },\n                {\n                    \"e\": 1361066400000,\n                    \"s\": 1382238000000\n                },\n                {\n                    \"e\": 1392516000000,\n                    \"s\": 1413687600000\n                }\n            ]\n        },\n        {\n            \"name\": \"Asia/Amman\",\n            \"rules\": [\n                {\n                    \"e\": 1225404000000,\n                    \"s\": 1206655200000\n                },\n                {\n                    \"e\": 1256853600000,\n                    \"s\": 1238104800000\n                },\n                {\n                    \"e\": 1288303200000,\n                    \"s\": 1269554400000\n                },\n                {\n                    \"e\": 1319752800000,\n                    \"s\": 1301608800000\n                },\n                false,\n                false,\n                {\n                    \"e\": 1414706400000,\n                    \"s\": 1395957600000\n                }\n            ]\n        },\n        {\n            \"name\": \"Asia/Damascus\",\n            \"rules\": [\n                {\n                    \"e\": 1225486800000,\n                    \"s\": 1207260000000\n                },\n                {\n                    \"e\": 1256850000000,\n                    \"s\": 1238104800000\n                },\n                {\n                    \"e\": 1288299600000,\n                    \"s\": 1270159200000\n                },\n                {\n                    \"e\": 1319749200000,\n                    \"s\": 1301608800000\n                },\n                {\n                    \"e\": 1351198800000,\n                    \"s\": 1333058400000\n                },\n                {\n                    \"e\": 1382648400000,\n                    \"s\": 1364508000000\n                },\n                {\n                    \"e\": 1414702800000,\n                    \"s\": 1395957600000\n                }\n            ]\n        },\n        {\n            \"name\": \"Asia/Dubai\",\n            \"rules\": [\n                false,\n                false,\n                false,\n                false,\n                false,\n                false,\n                false\n            ]\n        },\n        {\n            \"name\": \"Asia/Gaza\",\n            \"rules\": [\n                {\n                    \"e\": 1219957200000,\n                    \"s\": 1206655200000\n                },\n                {\n                    \"e\": 1252015200000,\n                    \"s\": 1238104800000\n                },\n                {\n                    \"e\": 1281474000000,\n                    \"s\": 1269640860000\n                },\n                {\n                    \"e\": 1312146000000,\n                    \"s\": 1301608860000\n                },\n                {\n                    \"e\": 1348178400000,\n                    \"s\": 1333058400000\n                },\n                {\n                    \"e\": 1380229200000,\n                    \"s\": 1364508000000\n                },\n                {\n                    \"e\": 1414098000000,\n                    \"s\": 1395957600000\n                }\n            ]\n        },\n        {\n            \"name\": \"Asia/Irkutsk\",\n            \"rules\": [\n                {\n                    \"e\": 1224957600000,\n                    \"s\": 1206813600000\n                },\n                {\n                    \"e\": 1256407200000,\n                    \"s\": 1238263200000\n                },\n                {\n                    \"e\": 1288461600000,\n                    \"s\": 1269712800000\n                },\n                false,\n                false,\n                false,\n                false\n            ]\n        },\n        {\n            \"name\": \"Asia/Jerusalem\",\n            \"rules\": [\n                {\n                    \"e\": 1223161200000,\n                    \"s\": 1206662400000\n                },\n                {\n                    \"e\": 1254006000000,\n                    \"s\": 1238112000000\n                },\n                {\n                    \"e\": 1284246000000,\n                    \"s\": 1269561600000\n                },\n                {\n                    \"e\": 1317510000000,\n                    \"s\": 1301616000000\n                },\n                {\n                    \"e\": 1348354800000,\n                    \"s\": 1333065600000\n                },\n                {\n                    \"e\": 1382828400000,\n                    \"s\": 1364515200000\n                },\n                {\n                    \"e\": 1414278000000,\n                    \"s\": 1395964800000\n                }\n            ]\n        },\n        {\n            \"name\": \"Asia/Kamchatka\",\n            \"rules\": [\n                {\n                    \"e\": 1224943200000,\n                    \"s\": 1206799200000\n                },\n                {\n                    \"e\": 1256392800000,\n                    \"s\": 1238248800000\n                },\n                {\n                    \"e\": 1288450800000,\n                    \"s\": 1269698400000\n                },\n                false,\n                false,\n                false,\n                false\n            ]\n        },\n        {\n            \"name\": \"Asia/Krasnoyarsk\",\n            \"rules\": [\n                {\n                    \"e\": 1224961200000,\n                    \"s\": 1206817200000\n                },\n                {\n                    \"e\": 1256410800000,\n                    \"s\": 1238266800000\n                },\n                {\n                    \"e\": 1288465200000,\n                    \"s\": 1269716400000\n                },\n                false,\n                false,\n                false,\n                false\n            ]\n        },\n        {\n            \"name\": \"Asia/Omsk\",\n            \"rules\": [\n                {\n                    \"e\": 1224964800000,\n                    \"s\": 1206820800000\n                },\n                {\n                    \"e\": 1256414400000,\n                    \"s\": 1238270400000\n                },\n                {\n                    \"e\": 1288468800000,\n                    \"s\": 1269720000000\n                },\n                false,\n                false,\n                false,\n                false\n            ]\n        },\n        {\n            \"name\": \"Asia/Vladivostok\",\n            \"rules\": [\n                {\n                    \"e\": 1224950400000,\n                    \"s\": 1206806400000\n                },\n                {\n                    \"e\": 1256400000000,\n                    \"s\": 1238256000000\n                },\n                {\n                    \"e\": 1288454400000,\n                    \"s\": 1269705600000\n                },\n                false,\n                false,\n                false,\n                false\n            ]\n        },\n        {\n            \"name\": \"Asia/Yakutsk\",\n            \"rules\": [\n                {\n                    \"e\": 1224954000000,\n                    \"s\": 1206810000000\n                },\n                {\n                    \"e\": 1256403600000,\n                    \"s\": 1238259600000\n                },\n                {\n                    \"e\": 1288458000000,\n                    \"s\": 1269709200000\n                },\n                false,\n                false,\n                false,\n                false\n            ]\n        },\n        {\n            \"name\": \"Asia/Yekaterinburg\",\n            \"rules\": [\n                {\n                    \"e\": 1224968400000,\n                    \"s\": 1206824400000\n                },\n                {\n                    \"e\": 1256418000000,\n                    \"s\": 1238274000000\n                },\n                {\n                    \"e\": 1288472400000,\n                    \"s\": 1269723600000\n                },\n                false,\n                false,\n                false,\n                false\n            ]\n        },\n        {\n            \"name\": \"Asia/Yerevan\",\n            \"rules\": [\n                {\n                    \"e\": 1224972000000,\n                    \"s\": 1206828000000\n                },\n                {\n                    \"e\": 1256421600000,\n                    \"s\": 1238277600000\n                },\n                {\n                    \"e\": 1288476000000,\n                    \"s\": 1269727200000\n                },\n                {\n                    \"e\": 1319925600000,\n                    \"s\": 1301176800000\n                },\n                false,\n                false,\n                false\n            ]\n        },\n        {\n            \"name\": \"Australia/Lord_Howe\",\n            \"rules\": [\n                {\n                    \"e\": 1207407600000,\n                    \"s\": 1223134200000\n                },\n                {\n                    \"e\": 1238857200000,\n                    \"s\": 1254583800000\n                },\n                {\n                    \"e\": 1270306800000,\n                    \"s\": 1286033400000\n                },\n                {\n                    \"e\": 1301756400000,\n                    \"s\": 1317483000000\n                },\n                {\n                    \"e\": 1333206000000,\n                    \"s\": 1349537400000\n                },\n                {\n                    \"e\": 1365260400000,\n                    \"s\": 1380987000000\n                },\n                {\n                    \"e\": 1396710000000,\n                    \"s\": 1412436600000\n                }\n            ]\n        },\n        {\n            \"name\": \"Australia/Perth\",\n            \"rules\": [\n                {\n                    \"e\": 1206813600000,\n                    \"s\": 1224957600000\n                },\n                false,\n                false,\n                false,\n                false,\n                false,\n                false\n            ]\n        },\n        {\n            \"name\": \"Europe/Helsinki\",\n            \"rules\": [\n                {\n                    \"e\": 1224982800000,\n                    \"s\": 1206838800000\n                },\n                {\n                    \"e\": 1256432400000,\n                    \"s\": 1238288400000\n                },\n                {\n                    \"e\": 1288486800000,\n                    \"s\": 1269738000000\n                },\n                {\n                    \"e\": 1319936400000,\n                    \"s\": 1301187600000\n                },\n                {\n                    \"e\": 1351386000000,\n                    \"s\": 1332637200000\n                },\n                {\n                    \"e\": 1382835600000,\n                    \"s\": 1364691600000\n                },\n                {\n                    \"e\": 1414285200000,\n                    \"s\": 1396141200000\n                }\n            ]\n        },\n        {\n            \"name\": \"Europe/Minsk\",\n            \"rules\": [\n                {\n                    \"e\": 1224979200000,\n                    \"s\": 1206835200000\n                },\n                {\n                    \"e\": 1256428800000,\n                    \"s\": 1238284800000\n                },\n                {\n                    \"e\": 1288483200000,\n                    \"s\": 1269734400000\n                },\n                false,\n                false,\n                false,\n                false\n            ]\n        },\n        {\n            \"name\": \"Europe/Moscow\",\n            \"rules\": [\n                {\n                    \"e\": 1224975600000,\n                    \"s\": 1206831600000\n                },\n                {\n                    \"e\": 1256425200000,\n                    \"s\": 1238281200000\n                },\n                {\n                    \"e\": 1288479600000,\n                    \"s\": 1269730800000\n                },\n                false,\n                false,\n                false,\n                false\n            ]\n        },\n        {\n            \"name\": \"Pacific/Apia\",\n            \"rules\": [\n                false,\n                false,\n                false,\n                {\n                    \"e\": 1301752800000,\n                    \"s\": 1316872800000\n                },\n                {\n                    \"e\": 1333202400000,\n                    \"s\": 1348927200000\n                },\n                {\n                    \"e\": 1365256800000,\n                    \"s\": 1380376800000\n                },\n                {\n                    \"e\": 1396706400000,\n                    \"s\": 1411826400000\n                }\n            ]\n        },\n        {\n            \"name\": \"Pacific/Fiji\",\n            \"rules\": [\n                false,\n                false,\n                {\n                    \"e\": 1269698400000,\n                    \"s\": 1287842400000\n                },\n                {\n                    \"e\": 1327154400000,\n                    \"s\": 1319292000000\n                },\n                {\n                    \"e\": 1358604000000,\n                    \"s\": 1350741600000\n                },\n                {\n                    \"e\": 1390050000000,\n                    \"s\": 1382796000000\n                },\n                {\n                    \"e\": 1421503200000,\n                    \"s\": 1414850400000\n                }\n            ]\n        },\n        {\n            \"name\": \"Europe/London\",\n            \"rules\": [\n                {\n                    \"e\": 1224982800000,\n                    \"s\": 1206838800000\n                },\n                {\n                    \"e\": 1256432400000,\n                    \"s\": 1238288400000\n                },\n                {\n                    \"e\": 1288486800000,\n                    \"s\": 1269738000000\n                },\n                {\n                    \"e\": 1319936400000,\n                    \"s\": 1301187600000\n                },\n                {\n                    \"e\": 1351386000000,\n                    \"s\": 1332637200000\n                },\n                {\n                    \"e\": 1382835600000,\n                    \"s\": 1364691600000\n                },\n                {\n                    \"e\": 1414285200000,\n                    \"s\": 1396141200000\n                }\n            ]\n        }\n    ]\n};\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n    module.exports = jstz;\n} else if ((typeof define !== 'undefined' && define !== null) && (define.amd != null)) {\n    define([], function() {\n        return jstz;\n    });\n} else {\n    if (typeof root === 'undefined') {\n        window.jstz = jstz;\n    } else {\n        root.jstz = jstz;\n    }\n}\n}());\n", "module.exports = require('./dist/jstz.js');\n", "import '../../customer_center/application'\nimport '../../stylesheets/customer_center/application.css'\n\n// Navigate to a URL via Turbo.visit(). In Hotwire Native:\n// - External URLs open in SFSafariViewController automatically\n// - Same-origin URLs matched by path config \"browser\" rule also open in SFSafariViewController\nwindow.Turbo.StreamActions.redirect = function () {\n  window.Turbo.visit(this.getAttribute('url'))\n}\n", "import '../jquery.js'\nimport Rails from '@rails/ujs'\nimport CableReady from 'cable_ready'\nimport '@hotwired/turbo'\nimport { encodeMethodIntoRequestBody } from '@hotwired/turbo-rails/app/javascript/turbo/fetch_requests'\nimport 'form-request-submit-polyfill'\nimport '@ungap/custom-elements'\nimport * as ActiveStorage from '@rails/activestorage'\nimport consumer from 'cf-utils/application_cable'\nimport { start } from '@anycable/turbo-stream'\nimport '../channels/index.js'\nimport './controllers/index.js'\nimport './trix_editor.js'\nimport '../turbo_boost/index.js'\nimport '../account/rails_ujs_overrides.js'\nimport '../account/turbo_confirm.js'\n\nRails.start()\nActiveStorage.start()\nstart(consumer.cable)\n\nCableReady.initialize({ consumer })\n\nimport 'lazysizes'\n\nimport debounced from 'debounced'\ndebounced.initialize()\n\nimport jstz from 'jstz'\nglobal.jstz = jstz\nwindow.jstz = jstz\n\n// NOTE: Always show the progress bar in tests as the `wait_for_turbo_frame` helper relies on it.\nwindow.Turbo.config.drive.progressBarDelay = process.env.RAILS_ENV === 'test' ? 0 : 500\n\ndocument.addEventListener('turbo:submit-end', (e) => {\n  // on a failed form submission, scroll the form to the top\n  if (e.detail.success === false) {\n    e.target.scrollIntoView(true)\n  }\n})\n\n// TODO: upstream this generic Turbo shim from the integration package into AnyCable.\naddEventListener('turbo:before-fetch-request', encodeMethodIntoRequestBody)\n", "import morphdom from \"morphdom\";\n\nvar name = \"cable_ready\";\n\nvar version = \"5.0.3\";\n\nvar description = \"CableReady helps you create great real-time user experiences by making it simple to trigger client-side DOM changes from server-side Ruby.\";\n\nvar keywords = [ \"ruby\", \"rails\", \"websockets\", \"actioncable\", \"cable\", \"ssr\", \"stimulus_reflex\", \"client-side\", \"dom\" ];\n\nvar homepage = \"https://cableready.stimulusreflex.com\";\n\nvar bugs = \"https://github.com/stimulusreflex/cable_ready/issues\";\n\nvar repository = \"https://github.com/stimulusreflex/cable_ready\";\n\nvar license = \"MIT\";\n\nvar author = \"Nathan Hopkins <natehop@gmail.com>\";\n\nvar contributors = [ \"Andrew Mason <andrewmcodes@protonmail.com>\", \"Julian Rubisch <julian@julianrubisch.at>\", \"Marco Roth <marco.roth@intergga.ch>\", \"Nathan Hopkins <natehop@gmail.com>\" ];\n\nvar main = \"./dist/cable_ready.js\";\n\nvar module = \"./dist/cable_ready.js\";\n\nvar browser = \"./dist/cable_ready.js\";\n\nvar unpkg = \"./dist/cable_ready.umd.js\";\n\nvar umd = \"./dist/cable_ready.umd.js\";\n\nvar files = [ \"dist/*\", \"javascript/*\" ];\n\nvar scripts = {\n  lint: \"yarn run format --check\",\n  format: \"yarn run prettier-standard ./javascript/**/*.js rollup.config.mjs\",\n  build: \"yarn rollup -c\",\n  watch: \"yarn rollup -wc\",\n  test: \"web-test-runner javascript/test/**/*.test.js\",\n  \"docs:dev\": \"vitepress dev docs\",\n  \"docs:build\": \"vitepress build docs && cp ./docs/_redirects ./docs/.vitepress/dist\",\n  \"docs:preview\": \"vitepress preview docs\"\n};\n\nvar dependencies = {\n  morphdom: \"2.6.1\"\n};\n\nvar devDependencies = {\n  \"@open-wc/testing\": \"^3.1.7\",\n  \"@rollup/plugin-json\": \"^6.0.0\",\n  \"@rollup/plugin-node-resolve\": \"^15.0.1\",\n  \"@rollup/plugin-terser\": \"^0.4.0\",\n  \"@web/dev-server-esbuild\": \"^0.3.3\",\n  \"@web/dev-server-rollup\": \"^0.3.21\",\n  \"@web/test-runner\": \"^0.15.1\",\n  \"prettier-standard\": \"^16.4.1\",\n  rollup: \"^3.19.1\",\n  sinon: \"^15.0.2\",\n  vite: \"^4.1.4\",\n  vitepress: \"^1.0.0-beta.1\",\n  \"vitepress-plugin-search\": \"^1.0.4-alpha.19\"\n};\n\nvar packageInfo = {\n  name: name,\n  version: version,\n  description: description,\n  keywords: keywords,\n  homepage: homepage,\n  bugs: bugs,\n  repository: repository,\n  license: license,\n  author: author,\n  contributors: contributors,\n  main: main,\n  module: module,\n  browser: browser,\n  import: \"./dist/cable_ready.js\",\n  unpkg: unpkg,\n  umd: umd,\n  files: files,\n  scripts: scripts,\n  dependencies: dependencies,\n  devDependencies: devDependencies\n};\n\nconst inputTags = {\n  INPUT: true,\n  TEXTAREA: true,\n  SELECT: true\n};\n\nconst mutableTags = {\n  INPUT: true,\n  TEXTAREA: true,\n  OPTION: true\n};\n\nconst textInputTypes = {\n  \"datetime-local\": true,\n  \"select-multiple\": true,\n  \"select-one\": true,\n  color: true,\n  date: true,\n  datetime: true,\n  email: true,\n  month: true,\n  number: true,\n  password: true,\n  range: true,\n  search: true,\n  tel: true,\n  text: true,\n  textarea: true,\n  time: true,\n  url: true,\n  week: true\n};\n\nlet activeElement;\n\nvar ActiveElement = {\n  get element() {\n    return activeElement;\n  },\n  set(element) {\n    activeElement = element;\n  }\n};\n\n// Indicates if the passed element is considered a text input.\n\nconst isTextInput = element => inputTags[element.tagName] && textInputTypes[element.type];\n\n// Assigns focus to the appropriate element... preferring the explicitly passed selector\n\n// * selector - a CSS selector for the element that should have focus\n\nconst assignFocus = selector => {\n  const element = selector && selector.nodeType === Node.ELEMENT_NODE ? selector : document.querySelector(selector);\n  const focusElement = element || ActiveElement.element;\n  if (focusElement && focusElement.focus) focusElement.focus();\n};\n\n// Dispatches an event on the passed element\n\n// * element - the element\n// * name - the name of the event\n// * detail - the event detail\n\nconst dispatch = (element, name, detail = {}) => {\n  const init = {\n    bubbles: true,\n    cancelable: true,\n    detail: detail\n  };\n  const event = new CustomEvent(name, init);\n  element.dispatchEvent(event);\n  if (window.jQuery) window.jQuery(element).trigger(name, detail);\n};\n\n// Accepts an xPath query and returns the element found at that position in the DOM\n\nconst xpathToElement = xpath => document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;\n\n// Accepts an xPath query and returns all matching elements in the DOM\n\nconst xpathToElementArray = (xpath, reverse = false) => {\n  const snapshotList = document.evaluate(xpath, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);\n  const snapshots = [];\n  for (let i = 0; i < snapshotList.snapshotLength; i++) {\n    snapshots.push(snapshotList.snapshotItem(i));\n  }\n  return reverse ? snapshots.reverse() : snapshots;\n};\n\n// Return an array with the class names to be used\n\n// * names - could be a string or an array of strings for multiple classes.\n\nconst getClassNames = names => Array.from(names).flat()\n// Perform operation for either the first or all of the elements returned by CSS selector\n\n// * operation - the instruction payload from perform\n// * callback - the operation function to run for each element\n\n;\n\nconst processElements = (operation, callback) => {\n  Array.from(operation.selectAll ? operation.element : [ operation.element ]).forEach(callback);\n};\n\n// convert string to kebab-case\n// most other implementations (lodash) are focused on camelCase to kebab-case\n// instead, this uses word token boundaries to produce readable URL slugs and keys\n// this implementation will not support Emoji or other non-ASCII characters\n\nconst kebabize = createCompounder((function(result, word, index) {\n  return result + (index ? \"-\" : \"\") + word.toLowerCase();\n}));\n\nfunction createCompounder(callback) {\n  return function(str) {\n    return words(str).reduce(callback, \"\");\n  };\n}\n\nconst words = str => {\n  str = str == null ? \"\" : str;\n  return str.match(/([A-Z]{2,}|[0-9]+|[A-Z]?[a-z]+|[A-Z])/g) || [];\n};\n\n// Provide a standardized pipeline of checks and modifications to all operations based on provided options\n// Currently skips execution if cancelled and implements an optional delay\n\nconst operate = (operation, callback) => {\n  if (!operation.cancel) {\n    operation.delay ? setTimeout(callback, operation.delay) : callback();\n    return true;\n  }\n  return false;\n};\n\n// Dispatch life-cycle events with standardized naming\nconst before = (target, operation) => dispatch(target, `cable-ready:before-${kebabize(operation.operation)}`, operation);\n\nconst after = (target, operation) => dispatch(target, `cable-ready:after-${kebabize(operation.operation)}`, operation);\n\nfunction debounce(fn, delay = 250) {\n  let timer;\n  return (...args) => {\n    const callback = () => fn.apply(this, args);\n    if (timer) clearTimeout(timer);\n    timer = setTimeout(callback, delay);\n  };\n}\n\nfunction handleErrors(response) {\n  if (!response.ok) throw Error(response.statusText);\n  return response;\n}\n\nfunction safeScalar(val) {\n  if (val !== undefined && ![ \"string\", \"number\", \"boolean\" ].includes(typeof val)) console.warn(`Operation expects a string, number or boolean, but got ${val} (${typeof val})`);\n  return val != null ? val : \"\";\n}\n\nfunction safeString(str) {\n  if (str !== undefined && typeof str !== \"string\") console.warn(`Operation expects a string, but got ${str} (${typeof str})`);\n  return str != null ? String(str) : \"\";\n}\n\nfunction safeArray(arr) {\n  if (arr !== undefined && !Array.isArray(arr)) console.warn(`Operation expects an array, but got ${arr} (${typeof arr})`);\n  return arr != null ? Array.from(arr) : [];\n}\n\nfunction safeObject(obj) {\n  if (obj !== undefined && typeof obj !== \"object\") console.warn(`Operation expects an object, but got ${obj} (${typeof obj})`);\n  return obj != null ? Object(obj) : {};\n}\n\nfunction safeStringOrArray(elem) {\n  if (elem !== undefined && !Array.isArray(elem) && typeof elem !== \"string\") console.warn(`Operation expects an Array or a String, but got ${elem} (${typeof elem})`);\n  return elem == null ? \"\" : Array.isArray(elem) ? Array.from(elem) : String(elem);\n}\n\nfunction fragmentToString(fragment) {\n  return (new XMLSerializer).serializeToString(fragment);\n}\n\n// A proxy method to wrap a fetch call in error handling\n\n// * url - the URL to fetch\n// * additionalHeaders - an object of additional headers passed to fetch\n\nasync function graciouslyFetch(url, additionalHeaders) {\n  try {\n    const response = await fetch(url, {\n      headers: {\n        \"X-REQUESTED-WITH\": \"XmlHttpRequest\",\n        ...additionalHeaders\n      }\n    });\n    if (response == undefined) return;\n    handleErrors(response);\n    return response;\n  } catch (e) {\n    console.error(`Could not fetch ${url}`);\n  }\n}\n\nclass BoundedQueue {\n  constructor(maxSize) {\n    this.maxSize = maxSize;\n    this.queue = [];\n  }\n  push(item) {\n    if (this.isFull()) {\n      // Remove the oldest item to make space for the new one\n      this.shift();\n    }\n    this.queue.push(item);\n  }\n  shift() {\n    return this.queue.shift();\n  }\n  isFull() {\n    return this.queue.length === this.maxSize;\n  }\n}\n\nvar utils =  Object.freeze({\n  __proto__: null,\n  BoundedQueue: BoundedQueue,\n  after: after,\n  assignFocus: assignFocus,\n  before: before,\n  debounce: debounce,\n  dispatch: dispatch,\n  fragmentToString: fragmentToString,\n  getClassNames: getClassNames,\n  graciouslyFetch: graciouslyFetch,\n  handleErrors: handleErrors,\n  isTextInput: isTextInput,\n  kebabize: kebabize,\n  operate: operate,\n  processElements: processElements,\n  safeArray: safeArray,\n  safeObject: safeObject,\n  safeScalar: safeScalar,\n  safeString: safeString,\n  safeStringOrArray: safeStringOrArray,\n  xpathToElement: xpathToElement,\n  xpathToElementArray: xpathToElementArray\n});\n\n// Indicates whether or not we should morph an element via onBeforeElUpdated callback\n// SEE: https://github.com/patrick-steele-idem/morphdom#morphdomfromnode-tonode-options--node\n\nconst shouldMorph = operation => (fromEl, toEl) => !shouldMorphCallbacks.map((callback => typeof callback === \"function\" ? callback(operation, fromEl, toEl) : true)).includes(false)\n// Execute any pluggable functions that modify elements after morphing via onElUpdated callback\n\n;\n\nconst didMorph = operation => el => {\n  didMorphCallbacks.forEach((callback => {\n    if (typeof callback === \"function\") callback(operation, el);\n  }));\n};\n\nconst verifyNotMutable = (detail, fromEl, toEl) => {\n  // Skip nodes that are equal:\n  // https://github.com/patrick-steele-idem/morphdom#can-i-make-morphdom-blaze-through-the-dom-tree-even-faster-yes\n  if (!mutableTags[fromEl.tagName] && fromEl.isEqualNode(toEl)) return false;\n  return true;\n};\n\nconst verifyNotContentEditable = (detail, fromEl, toEl) => {\n  if (fromEl === ActiveElement.element && fromEl.isContentEditable) return false;\n  return true;\n};\n\nconst verifyNotPermanent = (detail, fromEl, toEl) => {\n  const {permanentAttributeName: permanentAttributeName} = detail;\n  if (!permanentAttributeName) return true;\n  const permanent = fromEl.closest(`[${permanentAttributeName}]`);\n  // only morph attributes on the active non-permanent text input\n    if (!permanent && fromEl === ActiveElement.element && isTextInput(fromEl)) {\n    const ignore = {\n      value: true\n    };\n    Array.from(toEl.attributes).forEach((attribute => {\n      if (!ignore[attribute.name]) fromEl.setAttribute(attribute.name, attribute.value);\n    }));\n    return false;\n  }\n  return !permanent;\n};\n\nconst shouldMorphCallbacks = [ verifyNotMutable, verifyNotPermanent, verifyNotContentEditable ];\n\nconst didMorphCallbacks = [];\n\nvar morph_callbacks =  Object.freeze({\n  __proto__: null,\n  didMorph: didMorph,\n  didMorphCallbacks: didMorphCallbacks,\n  shouldMorph: shouldMorph,\n  shouldMorphCallbacks: shouldMorphCallbacks,\n  verifyNotContentEditable: verifyNotContentEditable,\n  verifyNotMutable: verifyNotMutable,\n  verifyNotPermanent: verifyNotPermanent\n});\n\nvar Operations = {\n  // DOM Mutations\n  append: operation => {\n    processElements(operation, (element => {\n      before(element, operation);\n      operate(operation, (() => {\n        const {html: html, focusSelector: focusSelector} = operation;\n        element.insertAdjacentHTML(\"beforeend\", safeScalar(html));\n        assignFocus(focusSelector);\n      }));\n      after(element, operation);\n    }));\n  },\n  graft: operation => {\n    processElements(operation, (element => {\n      before(element, operation);\n      operate(operation, (() => {\n        const {parent: parent, focusSelector: focusSelector} = operation;\n        const parentElement = document.querySelector(parent);\n        if (parentElement) {\n          parentElement.appendChild(element);\n          assignFocus(focusSelector);\n        }\n      }));\n      after(element, operation);\n    }));\n  },\n  innerHtml: operation => {\n    processElements(operation, (element => {\n      before(element, operation);\n      operate(operation, (() => {\n        const {html: html, focusSelector: focusSelector} = operation;\n        element.innerHTML = safeScalar(html);\n        assignFocus(focusSelector);\n      }));\n      after(element, operation);\n    }));\n  },\n  insertAdjacentHtml: operation => {\n    processElements(operation, (element => {\n      before(element, operation);\n      operate(operation, (() => {\n        const {html: html, position: position, focusSelector: focusSelector} = operation;\n        element.insertAdjacentHTML(position || \"beforeend\", safeScalar(html));\n        assignFocus(focusSelector);\n      }));\n      after(element, operation);\n    }));\n  },\n  insertAdjacentText: operation => {\n    processElements(operation, (element => {\n      before(element, operation);\n      operate(operation, (() => {\n        const {text: text, position: position, focusSelector: focusSelector} = operation;\n        element.insertAdjacentText(position || \"beforeend\", safeScalar(text));\n        assignFocus(focusSelector);\n      }));\n      after(element, operation);\n    }));\n  },\n  outerHtml: operation => {\n    processElements(operation, (element => {\n      const parent = element.parentElement;\n      const idx = parent && Array.from(parent.children).indexOf(element);\n      before(element, operation);\n      operate(operation, (() => {\n        const {html: html, focusSelector: focusSelector} = operation;\n        element.outerHTML = safeScalar(html);\n        assignFocus(focusSelector);\n      }));\n      after(parent ? parent.children[idx] : document.documentElement, operation);\n    }));\n  },\n  prepend: operation => {\n    processElements(operation, (element => {\n      before(element, operation);\n      operate(operation, (() => {\n        const {html: html, focusSelector: focusSelector} = operation;\n        element.insertAdjacentHTML(\"afterbegin\", safeScalar(html));\n        assignFocus(focusSelector);\n      }));\n      after(element, operation);\n    }));\n  },\n  remove: operation => {\n    processElements(operation, (element => {\n      before(element, operation);\n      operate(operation, (() => {\n        const {focusSelector: focusSelector} = operation;\n        element.remove();\n        assignFocus(focusSelector);\n      }));\n      after(document, operation);\n    }));\n  },\n  replace: operation => {\n    processElements(operation, (element => {\n      const parent = element.parentElement;\n      const idx = parent && Array.from(parent.children).indexOf(element);\n      before(element, operation);\n      operate(operation, (() => {\n        const {html: html, focusSelector: focusSelector} = operation;\n        element.outerHTML = safeScalar(html);\n        assignFocus(focusSelector);\n      }));\n      after(parent ? parent.children[idx] : document.documentElement, operation);\n    }));\n  },\n  textContent: operation => {\n    processElements(operation, (element => {\n      before(element, operation);\n      operate(operation, (() => {\n        const {text: text, focusSelector: focusSelector} = operation;\n        element.textContent = safeScalar(text);\n        assignFocus(focusSelector);\n      }));\n      after(element, operation);\n    }));\n  },\n  // Element Property Mutations\n  addCssClass: operation => {\n    processElements(operation, (element => {\n      before(element, operation);\n      operate(operation, (() => {\n        const {name: name} = operation;\n        element.classList.add(...getClassNames([ safeStringOrArray(name) ]));\n      }));\n      after(element, operation);\n    }));\n  },\n  removeAttribute: operation => {\n    processElements(operation, (element => {\n      before(element, operation);\n      operate(operation, (() => {\n        const {name: name} = operation;\n        element.removeAttribute(safeString(name));\n      }));\n      after(element, operation);\n    }));\n  },\n  removeCssClass: operation => {\n    processElements(operation, (element => {\n      before(element, operation);\n      operate(operation, (() => {\n        const {name: name} = operation;\n        element.classList.remove(...getClassNames([ safeStringOrArray(name) ]));\n        if (element.classList.length === 0) element.removeAttribute(\"class\");\n      }));\n      after(element, operation);\n    }));\n  },\n  setAttribute: operation => {\n    processElements(operation, (element => {\n      before(element, operation);\n      operate(operation, (() => {\n        const {name: name, value: value} = operation;\n        element.setAttribute(safeString(name), safeScalar(value));\n      }));\n      after(element, operation);\n    }));\n  },\n  setDatasetProperty: operation => {\n    processElements(operation, (element => {\n      before(element, operation);\n      operate(operation, (() => {\n        const {name: name, value: value} = operation;\n        element.dataset[safeString(name)] = safeScalar(value);\n      }));\n      after(element, operation);\n    }));\n  },\n  setProperty: operation => {\n    processElements(operation, (element => {\n      before(element, operation);\n      operate(operation, (() => {\n        const {name: name, value: value} = operation;\n        if (name in element) element[safeString(name)] = safeScalar(value);\n      }));\n      after(element, operation);\n    }));\n  },\n  setStyle: operation => {\n    processElements(operation, (element => {\n      before(element, operation);\n      operate(operation, (() => {\n        const {name: name, value: value} = operation;\n        element.style[safeString(name)] = safeScalar(value);\n      }));\n      after(element, operation);\n    }));\n  },\n  setStyles: operation => {\n    processElements(operation, (element => {\n      before(element, operation);\n      operate(operation, (() => {\n        const {styles: styles} = operation;\n        for (let [name, value] of Object.entries(styles)) element.style[safeString(name)] = safeScalar(value);\n      }));\n      after(element, operation);\n    }));\n  },\n  setValue: operation => {\n    processElements(operation, (element => {\n      before(element, operation);\n      operate(operation, (() => {\n        const {value: value} = operation;\n        element.value = safeScalar(value);\n      }));\n      after(element, operation);\n    }));\n  },\n  // DOM Events and Meta-Operations\n  dispatchEvent: operation => {\n    processElements(operation, (element => {\n      before(element, operation);\n      operate(operation, (() => {\n        const {name: name, detail: detail} = operation;\n        dispatch(element, safeString(name), safeObject(detail));\n      }));\n      after(element, operation);\n    }));\n  },\n  setMeta: operation => {\n    before(document, operation);\n    operate(operation, (() => {\n      const {name: name, content: content} = operation;\n      let meta = document.head.querySelector(`meta[name='${name}']`);\n      if (!meta) {\n        meta = document.createElement(\"meta\");\n        meta.name = safeString(name);\n        document.head.appendChild(meta);\n      }\n      meta.content = safeScalar(content);\n    }));\n    after(document, operation);\n  },\n  setTitle: operation => {\n    before(document, operation);\n    operate(operation, (() => {\n      const {title: title} = operation;\n      document.title = safeScalar(title);\n    }));\n    after(document, operation);\n  },\n  // Browser Manipulations\n  clearStorage: operation => {\n    before(document, operation);\n    operate(operation, (() => {\n      const {type: type} = operation;\n      const storage = type === \"session\" ? sessionStorage : localStorage;\n      storage.clear();\n    }));\n    after(document, operation);\n  },\n  go: operation => {\n    before(window, operation);\n    operate(operation, (() => {\n      const {delta: delta} = operation;\n      history.go(delta);\n    }));\n    after(window, operation);\n  },\n  pushState: operation => {\n    before(window, operation);\n    operate(operation, (() => {\n      const {state: state, title: title, url: url} = operation;\n      history.pushState(safeObject(state), safeString(title), safeString(url));\n    }));\n    after(window, operation);\n  },\n  redirectTo: operation => {\n    before(window, operation);\n    operate(operation, (() => {\n      let {url: url, action: action, turbo: turbo} = operation;\n      action = action || \"advance\";\n      url = safeString(url);\n      if (turbo === undefined) turbo = true;\n      if (turbo) {\n        if (window.Turbo) window.Turbo.visit(url, {\n          action: action\n        });\n        if (window.Turbolinks) window.Turbolinks.visit(url, {\n          action: action\n        });\n        if (!window.Turbo && !window.Turbolinks) window.location.href = url;\n      } else {\n        window.location.href = url;\n      }\n    }));\n    after(window, operation);\n  },\n  reload: operation => {\n    before(window, operation);\n    operate(operation, (() => {\n      window.location.reload();\n    }));\n    after(window, operation);\n  },\n  removeStorageItem: operation => {\n    before(document, operation);\n    operate(operation, (() => {\n      const {key: key, type: type} = operation;\n      const storage = type === \"session\" ? sessionStorage : localStorage;\n      storage.removeItem(safeString(key));\n    }));\n    after(document, operation);\n  },\n  replaceState: operation => {\n    before(window, operation);\n    operate(operation, (() => {\n      const {state: state, title: title, url: url} = operation;\n      history.replaceState(safeObject(state), safeString(title), safeString(url));\n    }));\n    after(window, operation);\n  },\n  scrollIntoView: operation => {\n    const {element: element} = operation;\n    before(element, operation);\n    operate(operation, (() => {\n      element.scrollIntoView(operation);\n    }));\n    after(element, operation);\n  },\n  setCookie: operation => {\n    before(document, operation);\n    operate(operation, (() => {\n      const {cookie: cookie} = operation;\n      document.cookie = safeScalar(cookie);\n    }));\n    after(document, operation);\n  },\n  setFocus: operation => {\n    const {element: element} = operation;\n    before(element, operation);\n    operate(operation, (() => {\n      assignFocus(element);\n    }));\n    after(element, operation);\n  },\n  setStorageItem: operation => {\n    before(document, operation);\n    operate(operation, (() => {\n      const {key: key, value: value, type: type} = operation;\n      const storage = type === \"session\" ? sessionStorage : localStorage;\n      storage.setItem(safeString(key), safeScalar(value));\n    }));\n    after(document, operation);\n  },\n  // Notifications\n  consoleLog: operation => {\n    before(document, operation);\n    operate(operation, (() => {\n      const {message: message, level: level} = operation;\n      level && [ \"warn\", \"info\", \"error\" ].includes(level) ? console[level](message) : console.log(message);\n    }));\n    after(document, operation);\n  },\n  consoleTable: operation => {\n    before(document, operation);\n    operate(operation, (() => {\n      const {data: data, columns: columns} = operation;\n      console.table(data, safeArray(columns));\n    }));\n    after(document, operation);\n  },\n  notification: operation => {\n    before(document, operation);\n    operate(operation, (() => {\n      const {title: title, options: options} = operation;\n      Notification.requestPermission().then((result => {\n        operation.permission = result;\n        if (result === \"granted\") new Notification(safeString(title), safeObject(options));\n      }));\n    }));\n    after(document, operation);\n  },\n  // Morph operations\n  morph: operation => {\n    processElements(operation, (element => {\n      const {html: html} = operation;\n      const template = document.createElement(\"template\");\n      template.innerHTML = String(safeScalar(html)).trim();\n      operation.content = template.content;\n      const parent = element.parentElement;\n      const idx = parent && Array.from(parent.children).indexOf(element);\n      before(element, operation);\n      operate(operation, (() => {\n        const {childrenOnly: childrenOnly, focusSelector: focusSelector} = operation;\n        morphdom(element, childrenOnly ? template.content : template.innerHTML, {\n          childrenOnly: !!childrenOnly,\n          onBeforeElUpdated: shouldMorph(operation),\n          onElUpdated: didMorph(operation)\n        });\n        assignFocus(focusSelector);\n      }));\n      after(parent ? parent.children[idx] : document.documentElement, operation);\n    }));\n  }\n};\n\nlet operations = Operations;\n\nconst add = newOperations => {\n  operations = {\n    ...operations,\n    ...newOperations\n  };\n};\n\nconst addOperations = operations => {\n  add(operations);\n};\n\nconst addOperation = (name, operation) => {\n  const operations = {};\n  operations[name] = operation;\n  add(operations);\n};\n\nvar OperationStore = {\n  get all() {\n    return operations;\n  }\n};\n\nlet missingElement = \"warn\";\n\nvar MissingElement$1 = {\n  get behavior() {\n    return missingElement;\n  },\n  set(value) {\n    if ([ \"warn\", \"ignore\", \"event\", \"exception\" ].includes(value)) missingElement = value; else console.warn(\"Invalid 'onMissingElement' option. Defaulting to 'warn'.\");\n  }\n};\n\nconst perform = (operations, options = {\n  onMissingElement: MissingElement$1.behavior\n}) => {\n  const batches = {};\n  operations.forEach((operation => {\n    if (!!operation.batch) batches[operation.batch] = batches[operation.batch] ? ++batches[operation.batch] : 1;\n  }));\n  operations.forEach((operation => {\n    const name = operation.operation;\n    try {\n      if (operation.selector) {\n        if (operation.xpath) {\n          operation.element = operation.selectAll ? xpathToElementArray(operation.selector) : xpathToElement(operation.selector);\n        } else {\n          operation.element = operation.selectAll ? document.querySelectorAll(operation.selector) : document.querySelector(operation.selector);\n        }\n      } else {\n        operation.element = document;\n      }\n      if (operation.element || options.onMissingElement !== \"ignore\") {\n        ActiveElement.set(document.activeElement);\n        const cableReadyOperation = OperationStore.all[name];\n        if (cableReadyOperation) {\n          cableReadyOperation(operation);\n          if (!!operation.batch && --batches[operation.batch] === 0) dispatch(document, \"cable-ready:batch-complete\", {\n            batch: operation.batch\n          });\n        } else {\n          console.error(`CableReady couldn't find the \"${name}\" operation. Make sure you use the camelized form when calling an operation method.`);\n        }\n      }\n    } catch (e) {\n      if (operation.element) {\n        console.error(`CableReady detected an error in ${name || \"operation\"}: ${e.message}. If you need to support older browsers make sure you've included the corresponding polyfills. https://docs.stimulusreflex.com/setup#polyfills-for-ie11.`);\n        console.error(e);\n      } else {\n        const warning = `CableReady ${name || \"\"} operation failed due to missing DOM element for selector: '${operation.selector}'`;\n        switch (options.onMissingElement) {\n         case \"ignore\":\n          break;\n\n         case \"event\":\n          dispatch(document, \"cable-ready:missing-element\", {\n            warning: warning,\n            operation: operation\n          });\n          break;\n\n         case \"exception\":\n          throw warning;\n\n         default:\n          console.warn(warning);\n        }\n      }\n    }\n  }));\n};\n\nconst performAsync = (operations, options = {\n  onMissingElement: MissingElement$1.behavior\n}) => new Promise(((resolve, reject) => {\n  try {\n    resolve(perform(operations, options));\n  } catch (err) {\n    reject(err);\n  }\n}));\n\nclass SubscribingElement extends HTMLElement {\n  static get tagName() {\n    throw new Error(\"Implement the tagName() getter in the inheriting class\");\n  }\n  static define() {\n    if (!customElements.get(this.tagName)) {\n      customElements.define(this.tagName, this);\n    }\n  }\n  disconnectedCallback() {\n    if (this.channel) this.channel.unsubscribe();\n  }\n  createSubscription(consumer, channel, receivedCallback) {\n    this.channel = consumer.subscriptions.create({\n      channel: channel,\n      identifier: this.identifier\n    }, {\n      received: receivedCallback\n    });\n  }\n  get preview() {\n    return document.documentElement.hasAttribute(\"data-turbolinks-preview\") || document.documentElement.hasAttribute(\"data-turbo-preview\");\n  }\n  get identifier() {\n    return this.getAttribute(\"identifier\");\n  }\n}\n\nlet consumer;\n\nconst BACKOFF = [ 25, 50, 75, 100, 200, 250, 500, 800, 1e3, 2e3 ];\n\nconst wait = ms => new Promise((resolve => setTimeout(resolve, ms)));\n\nconst getConsumerWithRetry = async (retry = 0) => {\n  if (consumer) return consumer;\n  if (retry >= BACKOFF.length) {\n    throw new Error(\"Couldn't obtain a Action Cable consumer within 5s\");\n  }\n  await wait(BACKOFF[retry]);\n  return await getConsumerWithRetry(retry + 1);\n};\n\nvar CableConsumer = {\n  setConsumer(value) {\n    consumer = value;\n  },\n  get consumer() {\n    return consumer;\n  },\n  async getConsumer() {\n    return await getConsumerWithRetry();\n  }\n};\n\nclass StreamFromElement extends SubscribingElement {\n  static get tagName() {\n    return \"cable-ready-stream-from\";\n  }\n  async connectedCallback() {\n    if (this.preview) return;\n    const consumer = await CableConsumer.getConsumer();\n    if (consumer) {\n      this.createSubscription(consumer, \"CableReady::Stream\", this.performOperations.bind(this));\n    } else {\n      console.error(\"The `cable_ready_stream_from` helper cannot connect. You must initialize CableReady with an Action Cable consumer.\");\n    }\n  }\n  performOperations(data) {\n    if (data.cableReady) perform(data.operations, {\n      onMissingElement: this.onMissingElement\n    });\n  }\n  get onMissingElement() {\n    const value = this.getAttribute(\"missing\") || MissingElement$1.behavior;\n    // stream_from does not support raising exceptions on missing elements because there's no way to catch them\n        if ([ \"warn\", \"ignore\", \"event\" ].includes(value)) return value; else {\n      console.warn(\"Invalid 'missing' attribute. Defaulting to 'warn'.\");\n      return \"warn\";\n    }\n  }\n}\n\nlet debugging = false;\n\nvar Debug = {\n  get enabled() {\n    return debugging;\n  },\n  get disabled() {\n    return !debugging;\n  },\n  get value() {\n    return debugging;\n  },\n  set(value) {\n    debugging = !!value;\n  },\n  set debug(value) {\n    debugging = !!value;\n  }\n};\n\nconst request = (data, blocks) => {\n  if (Debug.disabled) return;\n  const message = `\u2191 Updatable request affecting ${blocks.length} element(s): `;\n  console.log(message, {\n    elements: blocks.map((b => b.element)),\n    identifiers: blocks.map((b => b.element.getAttribute(\"identifier\"))),\n    data: data\n  });\n  return message;\n};\n\nconst cancel = (timestamp, reason) => {\n  if (Debug.disabled) return;\n  const duration = new Date - timestamp;\n  const message = `\u274C Updatable request canceled after ${duration}ms: ${reason}`;\n  console.log(message);\n  return message;\n};\n\nconst response = (timestamp, element, urls) => {\n  if (Debug.disabled) return;\n  const duration = new Date - timestamp;\n  const message = `\u2193 Updatable response: All URLs fetched in ${duration}ms`;\n  console.log(message, {\n    element: element,\n    urls: urls\n  });\n  return message;\n};\n\nconst morphStart = (timestamp, element) => {\n  if (Debug.disabled) return;\n  const duration = new Date - timestamp;\n  const message = `\u21BB Updatable morph: starting after ${duration}ms`;\n  console.log(message, {\n    element: element\n  });\n  return message;\n};\n\nconst morphEnd = (timestamp, element) => {\n  if (Debug.disabled) return;\n  const duration = new Date - timestamp;\n  const message = `\u21BA Updatable morph: completed after ${duration}ms`;\n  console.log(message, {\n    element: element\n  });\n  return message;\n};\n\nvar Log = {\n  request: request,\n  cancel: cancel,\n  response: response,\n  morphStart: morphStart,\n  morphEnd: morphEnd\n};\n\nclass AppearanceObserver {\n  constructor(delegate, element = null) {\n    this.delegate = delegate;\n    this.element = element || delegate;\n    this.started = false;\n    this.intersecting = false;\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      this.observeVisibility();\n    }\n  }\n  stop() {\n    if (this.started) {\n      this.started = false;\n      this.intersectionObserver.unobserve(this.element);\n      this.unobserveVisibility();\n    }\n  }\n  observeVisibility=() => {\n    document.addEventListener(\"visibilitychange\", this.handleVisibilityChange);\n  };\n  unobserveVisibility=() => {\n    document.removeEventListener(\"visibilitychange\", this.handleVisibilityChange);\n  };\n  intersect=entries => {\n    entries.forEach((entry => {\n      if (entry.target === this.element) {\n        if (entry.isIntersecting && document.visibilityState === \"visible\") {\n          this.intersecting = true;\n          this.delegate.appearedInViewport();\n        } else {\n          this.intersecting = false;\n          this.delegate.disappearedFromViewport();\n        }\n      }\n    }));\n  };\n  handleVisibilityChange=event => {\n    if (document.visibilityState === \"visible\" && this.intersecting) {\n      this.delegate.appearedInViewport();\n    } else {\n      this.delegate.disappearedFromViewport();\n    }\n  };\n}\n\nconst template = `\\n<style>\\n  :host {\\n    display: block;\\n  }\\n</style>\\n<slot></slot>\\n`;\n\nclass UpdatesForElement extends SubscribingElement {\n  static get tagName() {\n    return \"cable-ready-updates-for\";\n  }\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow({\n      mode: \"open\"\n    });\n    shadowRoot.innerHTML = template;\n    this.triggerElementLog = new BoundedQueue(10);\n    this.targetElementLog = new BoundedQueue(10);\n    this.appearanceObserver = new AppearanceObserver(this);\n    this.visible = false;\n    this.didTransitionToVisible = false;\n  }\n  async connectedCallback() {\n    if (this.preview) return;\n    this.update = debounce(this.update.bind(this), this.debounce);\n    const consumer = await CableConsumer.getConsumer();\n    if (consumer) {\n      this.createSubscription(consumer, \"CableReady::Stream\", this.update);\n    } else {\n      console.error(\"The `cable_ready_updates_for` helper cannot connect. You must initialize CableReady with an Action Cable consumer.\");\n    }\n    if (this.observeAppearance) {\n      this.appearanceObserver.start();\n    }\n  }\n  disconnectedCallback() {\n    if (this.observeAppearance) {\n      this.appearanceObserver.stop();\n    }\n  }\n  async update(data) {\n    this.lastUpdateTimestamp = new Date;\n    const blocks = Array.from(document.querySelectorAll(this.query), (element => new Block(element))).filter((block => block.shouldUpdate(data)));\n    this.triggerElementLog.push(`${(new Date).toLocaleString()}: ${Log.request(data, blocks)}`);\n    if (blocks.length === 0) {\n      this.triggerElementLog.push(`${(new Date).toLocaleString()}: ${Log.cancel(this.lastUpdateTimestamp, \"All elements filtered out\")}`);\n      return;\n    }\n    // first <cable-ready-updates-for> element in the DOM *at any given moment* updates all of the others\n    // if the element becomes visible though, we have to overrule and load it\n        if (blocks[0].element !== this && !this.didTransitionToVisible) {\n      this.triggerElementLog.push(`${(new Date).toLocaleString()}: ${Log.cancel(this.lastUpdateTimestamp, \"Update already requested\")}`);\n      return;\n    }\n    // hold a reference to the active element so that it can be restored after the morph\n        ActiveElement.set(document.activeElement);\n    // store all retrieved HTML in an object keyed by URL to minimize fetch calls\n        this.html = {};\n    const uniqueUrls = [ ...new Set(blocks.map((block => block.url))) ];\n    await Promise.all(uniqueUrls.map((async url => {\n      if (!this.html.hasOwnProperty(url)) {\n        const response = await graciouslyFetch(url, {\n          \"X-Cable-Ready\": \"update\"\n        });\n        this.html[url] = await response.text();\n      }\n    })));\n    this.triggerElementLog.push(`${(new Date).toLocaleString()}: ${Log.response(this.lastUpdateTimestamp, this, uniqueUrls)}`);\n    // track current block index for each URL; referred to as fragments\n        this.index = {};\n    blocks.forEach((block => {\n      // if the block's URL is not in the index, initialize it to 0; otherwise, increment it\n      this.index.hasOwnProperty(block.url) ? this.index[block.url]++ : this.index[block.url] = 0;\n      block.process(data, this.html, this.index, this.lastUpdateTimestamp);\n    }));\n  }\n  appearedInViewport() {\n    if (!this.visible) {\n      // transition from invisible to visible forces update\n      this.didTransitionToVisible = true;\n      this.update({});\n    }\n    this.visible = true;\n  }\n  disappearedFromViewport() {\n    this.visible = false;\n  }\n  get query() {\n    return `${this.tagName}[identifier=\"${this.identifier}\"]`;\n  }\n  get identifier() {\n    return this.getAttribute(\"identifier\");\n  }\n  get debounce() {\n    return this.hasAttribute(\"debounce\") ? parseInt(this.getAttribute(\"debounce\")) : 20;\n  }\n  get observeAppearance() {\n    return this.hasAttribute(\"observe-appearance\");\n  }\n}\n\nclass Block {\n  constructor(element) {\n    this.element = element;\n  }\n  async process(data, html, fragmentsIndex, startTimestamp) {\n    const blockIndex = fragmentsIndex[this.url];\n    const template = document.createElement(\"template\");\n    this.element.setAttribute(\"updating\", \"updating\");\n    template.innerHTML = String(html[this.url]).trim();\n    await this.resolveTurboFrames(template.content);\n    const fragments = template.content.querySelectorAll(this.query);\n    if (fragments.length <= blockIndex) {\n      console.warn(`Update aborted due to insufficient number of elements. The offending url is ${this.url}, the offending element is:`, this.element);\n      return;\n    }\n    const operation = {\n      element: this.element,\n      html: fragments[blockIndex],\n      permanentAttributeName: \"data-ignore-updates\"\n    };\n    dispatch(this.element, \"cable-ready:before-update\", operation);\n    this.element.targetElementLog.push(`${(new Date).toLocaleString()}: ${Log.morphStart(startTimestamp, this.element)}`);\n    morphdom(this.element, fragments[blockIndex], {\n      childrenOnly: true,\n      onBeforeElUpdated: shouldMorph(operation),\n      onElUpdated: _ => {\n        this.element.removeAttribute(\"updating\");\n        this.element.didTransitionToVisible = false;\n        dispatch(this.element, \"cable-ready:after-update\", operation);\n        assignFocus(operation.focusSelector);\n      }\n    });\n    this.element.targetElementLog.push(`${(new Date).toLocaleString()}: ${Log.morphEnd(startTimestamp, this.element)}`);\n  }\n  async resolveTurboFrames(documentFragment) {\n    const reloadingTurboFrames = [ ...documentFragment.querySelectorAll('turbo-frame[src]:not([loading=\"lazy\"])') ];\n    return Promise.all(reloadingTurboFrames.map((frame => new Promise((async resolve => {\n      const frameResponse = await graciouslyFetch(frame.getAttribute(\"src\"), {\n        \"Turbo-Frame\": frame.id,\n        \"X-Cable-Ready\": \"update\"\n      });\n      const frameTemplate = document.createElement(\"template\");\n      frameTemplate.innerHTML = await frameResponse.text();\n      // recurse here to get all nested eager loaded frames\n            await this.resolveTurboFrames(frameTemplate.content);\n      const selector = `turbo-frame#${frame.id}`;\n      const frameContent = frameTemplate.content.querySelector(selector);\n      const content = frameContent ? frameContent.innerHTML.trim() : \"\";\n      documentFragment.querySelector(selector).innerHTML = content;\n      resolve();\n    })))));\n  }\n  shouldUpdate(data) {\n    // if everything that could prevent an update is false, update this block\n    return !this.ignoresInnerUpdates && this.hasChangesSelectedForUpdate(data) && (!this.observeAppearance || this.visible);\n  }\n  hasChangesSelectedForUpdate(data) {\n    // if there's an only attribute, only update if at least one of the attributes changed is in the allow list\n    const only = this.element.getAttribute(\"only\");\n    return !(only && data.changed && !only.split(\" \").some((attribute => data.changed.includes(attribute))));\n  }\n  get ignoresInnerUpdates() {\n    // don't update during a Reflex or Turbolinks redraw\n    return this.element.hasAttribute(\"ignore-inner-updates\") && this.element.hasAttribute(\"performing-inner-update\");\n  }\n  get url() {\n    return this.element.hasAttribute(\"url\") ? this.element.getAttribute(\"url\") : location.href;\n  }\n  get identifier() {\n    return this.element.identifier;\n  }\n  get query() {\n    return this.element.query;\n  }\n  get visible() {\n    return this.element.visible;\n  }\n  get observeAppearance() {\n    return this.element.observeAppearance;\n  }\n}\n\nconst registerInnerUpdates = () => {\n  document.addEventListener(\"stimulus-reflex:before\", (event => {\n    recursiveMarkUpdatesForElements(event.detail.element);\n  }));\n  document.addEventListener(\"stimulus-reflex:after\", (event => {\n    setTimeout((() => {\n      recursiveUnmarkUpdatesForElements(event.detail.element);\n    }));\n  }));\n  document.addEventListener(\"turbo:submit-start\", (event => {\n    recursiveMarkUpdatesForElements(event.target);\n  }));\n  document.addEventListener(\"turbo:submit-end\", (event => {\n    setTimeout((() => {\n      recursiveUnmarkUpdatesForElements(event.target);\n    }));\n  }));\n  document.addEventListener(\"turbo-boost:command:start\", (event => {\n    recursiveMarkUpdatesForElements(event.target);\n  }));\n  document.addEventListener(\"turbo-boost:command:finish\", (event => {\n    setTimeout((() => {\n      recursiveUnmarkUpdatesForElements(event.target);\n    }));\n  }));\n  document.addEventListener(\"turbo-boost:command:error\", (event => {\n    setTimeout((() => {\n      recursiveUnmarkUpdatesForElements(event.target);\n    }));\n  }));\n};\n\nconst recursiveMarkUpdatesForElements = leaf => {\n  const closestUpdatesFor = leaf && leaf.parentElement && leaf.parentElement.closest(\"cable-ready-updates-for\");\n  if (closestUpdatesFor) {\n    closestUpdatesFor.setAttribute(\"performing-inner-update\", \"\");\n    recursiveMarkUpdatesForElements(closestUpdatesFor);\n  }\n};\n\nconst recursiveUnmarkUpdatesForElements = leaf => {\n  const closestUpdatesFor = leaf && leaf.parentElement && leaf.parentElement.closest(\"cable-ready-updates-for\");\n  if (closestUpdatesFor) {\n    closestUpdatesFor.removeAttribute(\"performing-inner-update\");\n    recursiveUnmarkUpdatesForElements(closestUpdatesFor);\n  }\n};\n\nconst defineElements = () => {\n  registerInnerUpdates();\n  StreamFromElement.define();\n  UpdatesForElement.define();\n};\n\nconst initialize = (initializeOptions = {}) => {\n  const {consumer: consumer, onMissingElement: onMissingElement, debug: debug} = initializeOptions;\n  Debug.set(!!debug);\n  if (consumer) {\n    CableConsumer.setConsumer(consumer);\n  } else {\n    console.error(\"CableReady requires a reference to your Action Cable `consumer` for its helpers to function.\\nEnsure that you have imported the `CableReady` package as well as `consumer` from your `channels` folder, then call `CableReady.initialize({ consumer })`.\");\n  }\n  if (onMissingElement) {\n    MissingElement.set(onMissingElement);\n  }\n  defineElements();\n};\n\nconst global = {\n  perform: perform,\n  performAsync: performAsync,\n  shouldMorphCallbacks: shouldMorphCallbacks,\n  didMorphCallbacks: didMorphCallbacks,\n  initialize: initialize,\n  addOperation: addOperation,\n  addOperations: addOperations,\n  version: packageInfo.version,\n  cable: CableConsumer,\n  get DOMOperations() {\n    console.warn(\"DEPRECATED: Please use `CableReady.operations` instead of `CableReady.DOMOperations`\");\n    return OperationStore.all;\n  },\n  get operations() {\n    return OperationStore.all;\n  },\n  get consumer() {\n    return CableConsumer.consumer;\n  }\n};\n\nwindow.CableReady = global;\n\nexport { morph_callbacks as MorphCallbacks, StreamFromElement, SubscribingElement, UpdatesForElement, utils as Utils, global as default };\n", "var DOCUMENT_FRAGMENT_NODE = 11;\n\nfunction morphAttrs(fromNode, toNode) {\n    var toNodeAttrs = toNode.attributes;\n    var attr;\n    var attrName;\n    var attrNamespaceURI;\n    var attrValue;\n    var fromValue;\n\n    // document-fragments dont have attributes so lets not do anything\n    if (toNode.nodeType === DOCUMENT_FRAGMENT_NODE || fromNode.nodeType === DOCUMENT_FRAGMENT_NODE) {\n      return;\n    }\n\n    // update attributes on original DOM element\n    for (var i = toNodeAttrs.length - 1; i >= 0; i--) {\n        attr = toNodeAttrs[i];\n        attrName = attr.name;\n        attrNamespaceURI = attr.namespaceURI;\n        attrValue = attr.value;\n\n        if (attrNamespaceURI) {\n            attrName = attr.localName || attrName;\n            fromValue = fromNode.getAttributeNS(attrNamespaceURI, attrName);\n\n            if (fromValue !== attrValue) {\n                if (attr.prefix === 'xmlns'){\n                    attrName = attr.name; // It's not allowed to set an attribute with the XMLNS namespace without specifying the `xmlns` prefix\n                }\n                fromNode.setAttributeNS(attrNamespaceURI, attrName, attrValue);\n            }\n        } else {\n            fromValue = fromNode.getAttribute(attrName);\n\n            if (fromValue !== attrValue) {\n                fromNode.setAttribute(attrName, attrValue);\n            }\n        }\n    }\n\n    // Remove any extra attributes found on the original DOM element that\n    // weren't found on the target element.\n    var fromNodeAttrs = fromNode.attributes;\n\n    for (var d = fromNodeAttrs.length - 1; d >= 0; d--) {\n        attr = fromNodeAttrs[d];\n        attrName = attr.name;\n        attrNamespaceURI = attr.namespaceURI;\n\n        if (attrNamespaceURI) {\n            attrName = attr.localName || attrName;\n\n            if (!toNode.hasAttributeNS(attrNamespaceURI, attrName)) {\n                fromNode.removeAttributeNS(attrNamespaceURI, attrName);\n            }\n        } else {\n            if (!toNode.hasAttribute(attrName)) {\n                fromNode.removeAttribute(attrName);\n            }\n        }\n    }\n}\n\nvar range; // Create a range object for efficently rendering strings to elements.\nvar NS_XHTML = 'http://www.w3.org/1999/xhtml';\n\nvar doc = typeof document === 'undefined' ? undefined : document;\nvar HAS_TEMPLATE_SUPPORT = !!doc && 'content' in doc.createElement('template');\nvar HAS_RANGE_SUPPORT = !!doc && doc.createRange && 'createContextualFragment' in doc.createRange();\n\nfunction createFragmentFromTemplate(str) {\n    var template = doc.createElement('template');\n    template.innerHTML = str;\n    return template.content.childNodes[0];\n}\n\nfunction createFragmentFromRange(str) {\n    if (!range) {\n        range = doc.createRange();\n        range.selectNode(doc.body);\n    }\n\n    var fragment = range.createContextualFragment(str);\n    return fragment.childNodes[0];\n}\n\nfunction createFragmentFromWrap(str) {\n    var fragment = doc.createElement('body');\n    fragment.innerHTML = str;\n    return fragment.childNodes[0];\n}\n\n/**\n * This is about the same\n * var html = new DOMParser().parseFromString(str, 'text/html');\n * return html.body.firstChild;\n *\n * @method toElement\n * @param {String} str\n */\nfunction toElement(str) {\n    str = str.trim();\n    if (HAS_TEMPLATE_SUPPORT) {\n      // avoid restrictions on content for things like `<tr><th>Hi</th></tr>` which\n      // createContextualFragment doesn't support\n      // <template> support not available in IE\n      return createFragmentFromTemplate(str);\n    } else if (HAS_RANGE_SUPPORT) {\n      return createFragmentFromRange(str);\n    }\n\n    return createFragmentFromWrap(str);\n}\n\n/**\n * Returns true if two node's names are the same.\n *\n * NOTE: We don't bother checking `namespaceURI` because you will never find two HTML elements with the same\n *       nodeName and different namespace URIs.\n *\n * @param {Element} a\n * @param {Element} b The target element\n * @return {boolean}\n */\nfunction compareNodeNames(fromEl, toEl) {\n    var fromNodeName = fromEl.nodeName;\n    var toNodeName = toEl.nodeName;\n    var fromCodeStart, toCodeStart;\n\n    if (fromNodeName === toNodeName) {\n        return true;\n    }\n\n    fromCodeStart = fromNodeName.charCodeAt(0);\n    toCodeStart = toNodeName.charCodeAt(0);\n\n    // If the target element is a virtual DOM node or SVG node then we may\n    // need to normalize the tag name before comparing. Normal HTML elements that are\n    // in the \"http://www.w3.org/1999/xhtml\"\n    // are converted to upper case\n    if (fromCodeStart <= 90 && toCodeStart >= 97) { // from is upper and to is lower\n        return fromNodeName === toNodeName.toUpperCase();\n    } else if (toCodeStart <= 90 && fromCodeStart >= 97) { // to is upper and from is lower\n        return toNodeName === fromNodeName.toUpperCase();\n    } else {\n        return false;\n    }\n}\n\n/**\n * Create an element, optionally with a known namespace URI.\n *\n * @param {string} name the element name, e.g. 'div' or 'svg'\n * @param {string} [namespaceURI] the element's namespace URI, i.e. the value of\n * its `xmlns` attribute or its inferred namespace.\n *\n * @return {Element}\n */\nfunction createElementNS(name, namespaceURI) {\n    return !namespaceURI || namespaceURI === NS_XHTML ?\n        doc.createElement(name) :\n        doc.createElementNS(namespaceURI, name);\n}\n\n/**\n * Copies the children of one DOM element to another DOM element\n */\nfunction moveChildren(fromEl, toEl) {\n    var curChild = fromEl.firstChild;\n    while (curChild) {\n        var nextChild = curChild.nextSibling;\n        toEl.appendChild(curChild);\n        curChild = nextChild;\n    }\n    return toEl;\n}\n\nfunction syncBooleanAttrProp(fromEl, toEl, name) {\n    if (fromEl[name] !== toEl[name]) {\n        fromEl[name] = toEl[name];\n        if (fromEl[name]) {\n            fromEl.setAttribute(name, '');\n        } else {\n            fromEl.removeAttribute(name);\n        }\n    }\n}\n\nvar specialElHandlers = {\n    OPTION: function(fromEl, toEl) {\n        var parentNode = fromEl.parentNode;\n        if (parentNode) {\n            var parentName = parentNode.nodeName.toUpperCase();\n            if (parentName === 'OPTGROUP') {\n                parentNode = parentNode.parentNode;\n                parentName = parentNode && parentNode.nodeName.toUpperCase();\n            }\n            if (parentName === 'SELECT' && !parentNode.hasAttribute('multiple')) {\n                if (fromEl.hasAttribute('selected') && !toEl.selected) {\n                    // Workaround for MS Edge bug where the 'selected' attribute can only be\n                    // removed if set to a non-empty value:\n                    // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12087679/\n                    fromEl.setAttribute('selected', 'selected');\n                    fromEl.removeAttribute('selected');\n                }\n                // We have to reset select element's selectedIndex to -1, otherwise setting\n                // fromEl.selected using the syncBooleanAttrProp below has no effect.\n                // The correct selectedIndex will be set in the SELECT special handler below.\n                parentNode.selectedIndex = -1;\n            }\n        }\n        syncBooleanAttrProp(fromEl, toEl, 'selected');\n    },\n    /**\n     * The \"value\" attribute is special for the <input> element since it sets\n     * the initial value. Changing the \"value\" attribute without changing the\n     * \"value\" property will have no effect since it is only used to the set the\n     * initial value.  Similar for the \"checked\" attribute, and \"disabled\".\n     */\n    INPUT: function(fromEl, toEl) {\n        syncBooleanAttrProp(fromEl, toEl, 'checked');\n        syncBooleanAttrProp(fromEl, toEl, 'disabled');\n\n        if (fromEl.value !== toEl.value) {\n            fromEl.value = toEl.value;\n        }\n\n        if (!toEl.hasAttribute('value')) {\n            fromEl.removeAttribute('value');\n        }\n    },\n\n    TEXTAREA: function(fromEl, toEl) {\n        var newValue = toEl.value;\n        if (fromEl.value !== newValue) {\n            fromEl.value = newValue;\n        }\n\n        var firstChild = fromEl.firstChild;\n        if (firstChild) {\n            // Needed for IE. Apparently IE sets the placeholder as the\n            // node value and vise versa. This ignores an empty update.\n            var oldValue = firstChild.nodeValue;\n\n            if (oldValue == newValue || (!newValue && oldValue == fromEl.placeholder)) {\n                return;\n            }\n\n            firstChild.nodeValue = newValue;\n        }\n    },\n    SELECT: function(fromEl, toEl) {\n        if (!toEl.hasAttribute('multiple')) {\n            var selectedIndex = -1;\n            var i = 0;\n            // We have to loop through children of fromEl, not toEl since nodes can be moved\n            // from toEl to fromEl directly when morphing.\n            // At the time this special handler is invoked, all children have already been morphed\n            // and appended to / removed from fromEl, so using fromEl here is safe and correct.\n            var curChild = fromEl.firstChild;\n            var optgroup;\n            var nodeName;\n            while(curChild) {\n                nodeName = curChild.nodeName && curChild.nodeName.toUpperCase();\n                if (nodeName === 'OPTGROUP') {\n                    optgroup = curChild;\n                    curChild = optgroup.firstChild;\n                } else {\n                    if (nodeName === 'OPTION') {\n                        if (curChild.hasAttribute('selected')) {\n                            selectedIndex = i;\n                            break;\n                        }\n                        i++;\n                    }\n                    curChild = curChild.nextSibling;\n                    if (!curChild && optgroup) {\n                        curChild = optgroup.nextSibling;\n                        optgroup = null;\n                    }\n                }\n            }\n\n            fromEl.selectedIndex = selectedIndex;\n        }\n    }\n};\n\nvar ELEMENT_NODE = 1;\nvar DOCUMENT_FRAGMENT_NODE$1 = 11;\nvar TEXT_NODE = 3;\nvar COMMENT_NODE = 8;\n\nfunction noop() {}\n\nfunction defaultGetNodeKey(node) {\n  if (node) {\n      return (node.getAttribute && node.getAttribute('id')) || node.id;\n  }\n}\n\nfunction morphdomFactory(morphAttrs) {\n\n    return function morphdom(fromNode, toNode, options) {\n        if (!options) {\n            options = {};\n        }\n\n        if (typeof toNode === 'string') {\n            if (fromNode.nodeName === '#document' || fromNode.nodeName === 'HTML' || fromNode.nodeName === 'BODY') {\n                var toNodeHtml = toNode;\n                toNode = doc.createElement('html');\n                toNode.innerHTML = toNodeHtml;\n            } else {\n                toNode = toElement(toNode);\n            }\n        }\n\n        var getNodeKey = options.getNodeKey || defaultGetNodeKey;\n        var onBeforeNodeAdded = options.onBeforeNodeAdded || noop;\n        var onNodeAdded = options.onNodeAdded || noop;\n        var onBeforeElUpdated = options.onBeforeElUpdated || noop;\n        var onElUpdated = options.onElUpdated || noop;\n        var onBeforeNodeDiscarded = options.onBeforeNodeDiscarded || noop;\n        var onNodeDiscarded = options.onNodeDiscarded || noop;\n        var onBeforeElChildrenUpdated = options.onBeforeElChildrenUpdated || noop;\n        var childrenOnly = options.childrenOnly === true;\n\n        // This object is used as a lookup to quickly find all keyed elements in the original DOM tree.\n        var fromNodesLookup = Object.create(null);\n        var keyedRemovalList = [];\n\n        function addKeyedRemoval(key) {\n            keyedRemovalList.push(key);\n        }\n\n        function walkDiscardedChildNodes(node, skipKeyedNodes) {\n            if (node.nodeType === ELEMENT_NODE) {\n                var curChild = node.firstChild;\n                while (curChild) {\n\n                    var key = undefined;\n\n                    if (skipKeyedNodes && (key = getNodeKey(curChild))) {\n                        // If we are skipping keyed nodes then we add the key\n                        // to a list so that it can be handled at the very end.\n                        addKeyedRemoval(key);\n                    } else {\n                        // Only report the node as discarded if it is not keyed. We do this because\n                        // at the end we loop through all keyed elements that were unmatched\n                        // and then discard them in one final pass.\n                        onNodeDiscarded(curChild);\n                        if (curChild.firstChild) {\n                            walkDiscardedChildNodes(curChild, skipKeyedNodes);\n                        }\n                    }\n\n                    curChild = curChild.nextSibling;\n                }\n            }\n        }\n\n        /**\n         * Removes a DOM node out of the original DOM\n         *\n         * @param  {Node} node The node to remove\n         * @param  {Node} parentNode The nodes parent\n         * @param  {Boolean} skipKeyedNodes If true then elements with keys will be skipped and not discarded.\n         * @return {undefined}\n         */\n        function removeNode(node, parentNode, skipKeyedNodes) {\n            if (onBeforeNodeDiscarded(node) === false) {\n                return;\n            }\n\n            if (parentNode) {\n                parentNode.removeChild(node);\n            }\n\n            onNodeDiscarded(node);\n            walkDiscardedChildNodes(node, skipKeyedNodes);\n        }\n\n        // // TreeWalker implementation is no faster, but keeping this around in case this changes in the future\n        // function indexTree(root) {\n        //     var treeWalker = document.createTreeWalker(\n        //         root,\n        //         NodeFilter.SHOW_ELEMENT);\n        //\n        //     var el;\n        //     while((el = treeWalker.nextNode())) {\n        //         var key = getNodeKey(el);\n        //         if (key) {\n        //             fromNodesLookup[key] = el;\n        //         }\n        //     }\n        // }\n\n        // // NodeIterator implementation is no faster, but keeping this around in case this changes in the future\n        //\n        // function indexTree(node) {\n        //     var nodeIterator = document.createNodeIterator(node, NodeFilter.SHOW_ELEMENT);\n        //     var el;\n        //     while((el = nodeIterator.nextNode())) {\n        //         var key = getNodeKey(el);\n        //         if (key) {\n        //             fromNodesLookup[key] = el;\n        //         }\n        //     }\n        // }\n\n        function indexTree(node) {\n            if (node.nodeType === ELEMENT_NODE || node.nodeType === DOCUMENT_FRAGMENT_NODE$1) {\n                var curChild = node.firstChild;\n                while (curChild) {\n                    var key = getNodeKey(curChild);\n                    if (key) {\n                        fromNodesLookup[key] = curChild;\n                    }\n\n                    // Walk recursively\n                    indexTree(curChild);\n\n                    curChild = curChild.nextSibling;\n                }\n            }\n        }\n\n        indexTree(fromNode);\n\n        function handleNodeAdded(el) {\n            onNodeAdded(el);\n\n            var curChild = el.firstChild;\n            while (curChild) {\n                var nextSibling = curChild.nextSibling;\n\n                var key = getNodeKey(curChild);\n                if (key) {\n                    var unmatchedFromEl = fromNodesLookup[key];\n                    // if we find a duplicate #id node in cache, replace `el` with cache value\n                    // and morph it to the child node.\n                    if (unmatchedFromEl && compareNodeNames(curChild, unmatchedFromEl)) {\n                        curChild.parentNode.replaceChild(unmatchedFromEl, curChild);\n                        morphEl(unmatchedFromEl, curChild);\n                    } else {\n                      handleNodeAdded(curChild);\n                    }\n                } else {\n                  // recursively call for curChild and it's children to see if we find something in\n                  // fromNodesLookup\n                  handleNodeAdded(curChild);\n                }\n\n                curChild = nextSibling;\n            }\n        }\n\n        function cleanupFromEl(fromEl, curFromNodeChild, curFromNodeKey) {\n            // We have processed all of the \"to nodes\". If curFromNodeChild is\n            // non-null then we still have some from nodes left over that need\n            // to be removed\n            while (curFromNodeChild) {\n                var fromNextSibling = curFromNodeChild.nextSibling;\n                if ((curFromNodeKey = getNodeKey(curFromNodeChild))) {\n                    // Since the node is keyed it might be matched up later so we defer\n                    // the actual removal to later\n                    addKeyedRemoval(curFromNodeKey);\n                } else {\n                    // NOTE: we skip nested keyed nodes from being removed since there is\n                    //       still a chance they will be matched up later\n                    removeNode(curFromNodeChild, fromEl, true /* skip keyed nodes */);\n                }\n                curFromNodeChild = fromNextSibling;\n            }\n        }\n\n        function morphEl(fromEl, toEl, childrenOnly) {\n            var toElKey = getNodeKey(toEl);\n\n            if (toElKey) {\n                // If an element with an ID is being morphed then it will be in the final\n                // DOM so clear it out of the saved elements collection\n                delete fromNodesLookup[toElKey];\n            }\n\n            if (!childrenOnly) {\n                // optional\n                if (onBeforeElUpdated(fromEl, toEl) === false) {\n                    return;\n                }\n\n                // update attributes on original DOM element first\n                morphAttrs(fromEl, toEl);\n                // optional\n                onElUpdated(fromEl);\n\n                if (onBeforeElChildrenUpdated(fromEl, toEl) === false) {\n                    return;\n                }\n            }\n\n            if (fromEl.nodeName !== 'TEXTAREA') {\n              morphChildren(fromEl, toEl);\n            } else {\n              specialElHandlers.TEXTAREA(fromEl, toEl);\n            }\n        }\n\n        function morphChildren(fromEl, toEl) {\n            var curToNodeChild = toEl.firstChild;\n            var curFromNodeChild = fromEl.firstChild;\n            var curToNodeKey;\n            var curFromNodeKey;\n\n            var fromNextSibling;\n            var toNextSibling;\n            var matchingFromEl;\n\n            // walk the children\n            outer: while (curToNodeChild) {\n                toNextSibling = curToNodeChild.nextSibling;\n                curToNodeKey = getNodeKey(curToNodeChild);\n\n                // walk the fromNode children all the way through\n                while (curFromNodeChild) {\n                    fromNextSibling = curFromNodeChild.nextSibling;\n\n                    if (curToNodeChild.isSameNode && curToNodeChild.isSameNode(curFromNodeChild)) {\n                        curToNodeChild = toNextSibling;\n                        curFromNodeChild = fromNextSibling;\n                        continue outer;\n                    }\n\n                    curFromNodeKey = getNodeKey(curFromNodeChild);\n\n                    var curFromNodeType = curFromNodeChild.nodeType;\n\n                    // this means if the curFromNodeChild doesnt have a match with the curToNodeChild\n                    var isCompatible = undefined;\n\n                    if (curFromNodeType === curToNodeChild.nodeType) {\n                        if (curFromNodeType === ELEMENT_NODE) {\n                            // Both nodes being compared are Element nodes\n\n                            if (curToNodeKey) {\n                                // The target node has a key so we want to match it up with the correct element\n                                // in the original DOM tree\n                                if (curToNodeKey !== curFromNodeKey) {\n                                    // The current element in the original DOM tree does not have a matching key so\n                                    // let's check our lookup to see if there is a matching element in the original\n                                    // DOM tree\n                                    if ((matchingFromEl = fromNodesLookup[curToNodeKey])) {\n                                        if (fromNextSibling === matchingFromEl) {\n                                            // Special case for single element removals. To avoid removing the original\n                                            // DOM node out of the tree (since that can break CSS transitions, etc.),\n                                            // we will instead discard the current node and wait until the next\n                                            // iteration to properly match up the keyed target element with its matching\n                                            // element in the original tree\n                                            isCompatible = false;\n                                        } else {\n                                            // We found a matching keyed element somewhere in the original DOM tree.\n                                            // Let's move the original DOM node into the current position and morph\n                                            // it.\n\n                                            // NOTE: We use insertBefore instead of replaceChild because we want to go through\n                                            // the `removeNode()` function for the node that is being discarded so that\n                                            // all lifecycle hooks are correctly invoked\n                                            fromEl.insertBefore(matchingFromEl, curFromNodeChild);\n\n                                            // fromNextSibling = curFromNodeChild.nextSibling;\n\n                                            if (curFromNodeKey) {\n                                                // Since the node is keyed it might be matched up later so we defer\n                                                // the actual removal to later\n                                                addKeyedRemoval(curFromNodeKey);\n                                            } else {\n                                                // NOTE: we skip nested keyed nodes from being removed since there is\n                                                //       still a chance they will be matched up later\n                                                removeNode(curFromNodeChild, fromEl, true /* skip keyed nodes */);\n                                            }\n\n                                            curFromNodeChild = matchingFromEl;\n                                        }\n                                    } else {\n                                        // The nodes are not compatible since the \"to\" node has a key and there\n                                        // is no matching keyed node in the source tree\n                                        isCompatible = false;\n                                    }\n                                }\n                            } else if (curFromNodeKey) {\n                                // The original has a key\n                                isCompatible = false;\n                            }\n\n                            isCompatible = isCompatible !== false && compareNodeNames(curFromNodeChild, curToNodeChild);\n                            if (isCompatible) {\n                                // We found compatible DOM elements so transform\n                                // the current \"from\" node to match the current\n                                // target DOM node.\n                                // MORPH\n                                morphEl(curFromNodeChild, curToNodeChild);\n                            }\n\n                        } else if (curFromNodeType === TEXT_NODE || curFromNodeType == COMMENT_NODE) {\n                            // Both nodes being compared are Text or Comment nodes\n                            isCompatible = true;\n                            // Simply update nodeValue on the original node to\n                            // change the text value\n                            if (curFromNodeChild.nodeValue !== curToNodeChild.nodeValue) {\n                                curFromNodeChild.nodeValue = curToNodeChild.nodeValue;\n                            }\n\n                        }\n                    }\n\n                    if (isCompatible) {\n                        // Advance both the \"to\" child and the \"from\" child since we found a match\n                        // Nothing else to do as we already recursively called morphChildren above\n                        curToNodeChild = toNextSibling;\n                        curFromNodeChild = fromNextSibling;\n                        continue outer;\n                    }\n\n                    // No compatible match so remove the old node from the DOM and continue trying to find a\n                    // match in the original DOM. However, we only do this if the from node is not keyed\n                    // since it is possible that a keyed node might match up with a node somewhere else in the\n                    // target tree and we don't want to discard it just yet since it still might find a\n                    // home in the final DOM tree. After everything is done we will remove any keyed nodes\n                    // that didn't find a home\n                    if (curFromNodeKey) {\n                        // Since the node is keyed it might be matched up later so we defer\n                        // the actual removal to later\n                        addKeyedRemoval(curFromNodeKey);\n                    } else {\n                        // NOTE: we skip nested keyed nodes from being removed since there is\n                        //       still a chance they will be matched up later\n                        removeNode(curFromNodeChild, fromEl, true /* skip keyed nodes */);\n                    }\n\n                    curFromNodeChild = fromNextSibling;\n                } // END: while(curFromNodeChild) {}\n\n                // If we got this far then we did not find a candidate match for\n                // our \"to node\" and we exhausted all of the children \"from\"\n                // nodes. Therefore, we will just append the current \"to\" node\n                // to the end\n                if (curToNodeKey && (matchingFromEl = fromNodesLookup[curToNodeKey]) && compareNodeNames(matchingFromEl, curToNodeChild)) {\n                    fromEl.appendChild(matchingFromEl);\n                    // MORPH\n                    morphEl(matchingFromEl, curToNodeChild);\n                } else {\n                    var onBeforeNodeAddedResult = onBeforeNodeAdded(curToNodeChild);\n                    if (onBeforeNodeAddedResult !== false) {\n                        if (onBeforeNodeAddedResult) {\n                            curToNodeChild = onBeforeNodeAddedResult;\n                        }\n\n                        if (curToNodeChild.actualize) {\n                            curToNodeChild = curToNodeChild.actualize(fromEl.ownerDocument || doc);\n                        }\n                        fromEl.appendChild(curToNodeChild);\n                        handleNodeAdded(curToNodeChild);\n                    }\n                }\n\n                curToNodeChild = toNextSibling;\n                curFromNodeChild = fromNextSibling;\n            }\n\n            cleanupFromEl(fromEl, curFromNodeChild, curFromNodeKey);\n\n            var specialElHandler = specialElHandlers[fromEl.nodeName];\n            if (specialElHandler) {\n                specialElHandler(fromEl, toEl);\n            }\n        } // END: morphChildren(...)\n\n        var morphedNode = fromNode;\n        var morphedNodeType = morphedNode.nodeType;\n        var toNodeType = toNode.nodeType;\n\n        if (!childrenOnly) {\n            // Handle the case where we are given two DOM nodes that are not\n            // compatible (e.g. <div> --> <span> or <div> --> TEXT)\n            if (morphedNodeType === ELEMENT_NODE) {\n                if (toNodeType === ELEMENT_NODE) {\n                    if (!compareNodeNames(fromNode, toNode)) {\n                        onNodeDiscarded(fromNode);\n                        morphedNode = moveChildren(fromNode, createElementNS(toNode.nodeName, toNode.namespaceURI));\n                    }\n                } else {\n                    // Going from an element node to a text node\n                    morphedNode = toNode;\n                }\n            } else if (morphedNodeType === TEXT_NODE || morphedNodeType === COMMENT_NODE) { // Text or comment node\n                if (toNodeType === morphedNodeType) {\n                    if (morphedNode.nodeValue !== toNode.nodeValue) {\n                        morphedNode.nodeValue = toNode.nodeValue;\n                    }\n\n                    return morphedNode;\n                } else {\n                    // Text node to something else\n                    morphedNode = toNode;\n                }\n            }\n        }\n\n        if (morphedNode === toNode) {\n            // The \"to node\" was not compatible with the \"from node\" so we had to\n            // toss out the \"from node\" and use the \"to node\"\n            onNodeDiscarded(fromNode);\n        } else {\n            if (toNode.isSameNode && toNode.isSameNode(morphedNode)) {\n                return;\n            }\n\n            morphEl(morphedNode, toNode, childrenOnly);\n\n            // We now need to loop over any keyed nodes that might need to be\n            // removed. We only do the removal if we know that the keyed node\n            // never found a match. When a keyed node is matched up we remove\n            // it out of fromNodesLookup and we use fromNodesLookup to determine\n            // if a keyed node has been matched up or not\n            if (keyedRemovalList) {\n                for (var i=0, len=keyedRemovalList.length; i<len; i++) {\n                    var elToRemove = fromNodesLookup[keyedRemovalList[i]];\n                    if (elToRemove) {\n                        removeNode(elToRemove, elToRemove.parentNode, false);\n                    }\n                }\n            }\n        }\n\n        if (!childrenOnly && morphedNode !== fromNode && fromNode.parentNode) {\n            if (morphedNode.actualize) {\n                morphedNode = morphedNode.actualize(fromNode.ownerDocument || doc);\n            }\n            // If we had to swap out the from node with a new node because the old\n            // node was not compatible with the target node then we need to\n            // replace the old DOM node in the original DOM tree. This is only\n            // possible if the original DOM node was part of a DOM tree which\n            // we know is the case if it has a parent node.\n            fromNode.parentNode.replaceChild(morphedNode, fromNode);\n        }\n\n        return morphedNode;\n    };\n}\n\nvar morphdom = morphdomFactory(morphAttrs);\n\nexport default morphdom;\n", "/*!\nTurbo 8.0.21\nCopyright \u00A9 2026 37signals LLC\n */\nconst FrameLoadingStyle = {\n  eager: \"eager\",\n  lazy: \"lazy\"\n};\n\n/**\n * Contains a fragment of HTML which is updated based on navigation within\n * it (e.g. via links or form submissions).\n *\n * @customElement turbo-frame\n * @example\n *   <turbo-frame id=\"messages\">\n *     <a href=\"/messages/expanded\">\n *       Show all expanded messages in this frame.\n *     </a>\n *\n *     <form action=\"/messages\">\n *       Show response from this form within this frame.\n *     </form>\n *   </turbo-frame>\n */\nclass FrameElement extends HTMLElement {\n  static delegateConstructor = undefined\n\n  loaded = Promise.resolve()\n\n  static get observedAttributes() {\n    return [\"disabled\", \"loading\", \"src\"]\n  }\n\n  constructor() {\n    super();\n    this.delegate = new FrameElement.delegateConstructor(this);\n  }\n\n  connectedCallback() {\n    this.delegate.connect();\n  }\n\n  disconnectedCallback() {\n    this.delegate.disconnect();\n  }\n\n  reload() {\n    return this.delegate.sourceURLReloaded()\n  }\n\n  attributeChangedCallback(name) {\n    if (name == \"loading\") {\n      this.delegate.loadingStyleChanged();\n    } else if (name == \"src\") {\n      this.delegate.sourceURLChanged();\n    } else if (name == \"disabled\") {\n      this.delegate.disabledChanged();\n    }\n  }\n\n  /**\n   * Gets the URL to lazily load source HTML from\n   */\n  get src() {\n    return this.getAttribute(\"src\")\n  }\n\n  /**\n   * Sets the URL to lazily load source HTML from\n   */\n  set src(value) {\n    if (value) {\n      this.setAttribute(\"src\", value);\n    } else {\n      this.removeAttribute(\"src\");\n    }\n  }\n\n  /**\n   * Gets the refresh mode for the frame.\n   */\n  get refresh() {\n    return this.getAttribute(\"refresh\")\n  }\n\n  /**\n   * Sets the refresh mode for the frame.\n   */\n  set refresh(value) {\n    if (value) {\n      this.setAttribute(\"refresh\", value);\n    } else {\n      this.removeAttribute(\"refresh\");\n    }\n  }\n\n  get shouldReloadWithMorph() {\n    return this.src && this.refresh === \"morph\"\n  }\n\n  /**\n   * Determines if the element is loading\n   */\n  get loading() {\n    return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\")\n  }\n\n  /**\n   * Sets the value of if the element is loading\n   */\n  set loading(value) {\n    if (value) {\n      this.setAttribute(\"loading\", value);\n    } else {\n      this.removeAttribute(\"loading\");\n    }\n  }\n\n  /**\n   * Gets the disabled state of the frame.\n   *\n   * If disabled, no requests will be intercepted by the frame.\n   */\n  get disabled() {\n    return this.hasAttribute(\"disabled\")\n  }\n\n  /**\n   * Sets the disabled state of the frame.\n   *\n   * If disabled, no requests will be intercepted by the frame.\n   */\n  set disabled(value) {\n    if (value) {\n      this.setAttribute(\"disabled\", \"\");\n    } else {\n      this.removeAttribute(\"disabled\");\n    }\n  }\n\n  /**\n   * Gets the autoscroll state of the frame.\n   *\n   * If true, the frame will be scrolled into view automatically on update.\n   */\n  get autoscroll() {\n    return this.hasAttribute(\"autoscroll\")\n  }\n\n  /**\n   * Sets the autoscroll state of the frame.\n   *\n   * If true, the frame will be scrolled into view automatically on update.\n   */\n  set autoscroll(value) {\n    if (value) {\n      this.setAttribute(\"autoscroll\", \"\");\n    } else {\n      this.removeAttribute(\"autoscroll\");\n    }\n  }\n\n  /**\n   * Determines if the element has finished loading\n   */\n  get complete() {\n    return !this.delegate.isLoading\n  }\n\n  /**\n   * Gets the active state of the frame.\n   *\n   * If inactive, source changes will not be observed.\n   */\n  get isActive() {\n    return this.ownerDocument === document && !this.isPreview\n  }\n\n  /**\n   * Sets the active state of the frame.\n   *\n   * If inactive, source changes will not be observed.\n   */\n  get isPreview() {\n    return this.ownerDocument?.documentElement?.hasAttribute(\"data-turbo-preview\")\n  }\n}\n\nfunction frameLoadingStyleFromString(style) {\n  switch (style.toLowerCase()) {\n    case \"lazy\":\n      return FrameLoadingStyle.lazy\n    default:\n      return FrameLoadingStyle.eager\n  }\n}\n\nconst drive = {\n  enabled: true,\n  progressBarDelay: 500,\n  unvisitableExtensions: new Set(\n    [\n      \".7z\", \".aac\", \".apk\", \".avi\", \".bmp\", \".bz2\", \".css\", \".csv\", \".deb\", \".dmg\", \".doc\",\n      \".docx\", \".exe\", \".gif\", \".gz\", \".heic\", \".heif\", \".ico\", \".iso\", \".jpeg\", \".jpg\",\n      \".js\", \".json\", \".m4a\", \".mkv\", \".mov\", \".mp3\", \".mp4\", \".mpeg\", \".mpg\", \".msi\",\n      \".ogg\", \".ogv\", \".pdf\", \".pkg\", \".png\", \".ppt\", \".pptx\", \".rar\", \".rtf\",\n      \".svg\", \".tar\", \".tif\", \".tiff\", \".txt\", \".wav\", \".webm\", \".webp\", \".wma\", \".wmv\",\n      \".xls\", \".xlsx\", \".xml\", \".zip\"\n    ]\n  )\n};\n\nfunction activateScriptElement(element) {\n  if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n    return element\n  } else {\n    const createdScriptElement = document.createElement(\"script\");\n    const cspNonce = getCspNonce();\n    if (cspNonce) {\n      createdScriptElement.nonce = cspNonce;\n    }\n    createdScriptElement.textContent = element.textContent;\n    createdScriptElement.async = false;\n    copyElementAttributes(createdScriptElement, element);\n    return createdScriptElement\n  }\n}\n\nfunction copyElementAttributes(destinationElement, sourceElement) {\n  for (const { name, value } of sourceElement.attributes) {\n    destinationElement.setAttribute(name, value);\n  }\n}\n\nfunction createDocumentFragment(html) {\n  const template = document.createElement(\"template\");\n  template.innerHTML = html;\n  return template.content\n}\n\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n  const event = new CustomEvent(eventName, {\n    cancelable,\n    bubbles: true,\n    composed: true,\n    detail\n  });\n\n  if (target && target.isConnected) {\n    target.dispatchEvent(event);\n  } else {\n    document.documentElement.dispatchEvent(event);\n  }\n\n  return event\n}\n\nfunction cancelEvent(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n\nfunction nextRepaint() {\n  if (document.visibilityState === \"hidden\") {\n    return nextEventLoopTick()\n  } else {\n    return nextAnimationFrame()\n  }\n}\n\nfunction nextAnimationFrame() {\n  return new Promise((resolve) => requestAnimationFrame(() => resolve()))\n}\n\nfunction nextEventLoopTick() {\n  return new Promise((resolve) => setTimeout(() => resolve(), 0))\n}\n\nfunction parseHTMLDocument(html = \"\") {\n  return new DOMParser().parseFromString(html, \"text/html\")\n}\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}\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}\n\nfunction uuid() {\n  return Array.from({ length: 36 })\n    .map((_, i) => {\n      if (i == 8 || i == 13 || i == 18 || i == 23) {\n        return \"-\"\n      } else if (i == 14) {\n        return \"4\"\n      } else if (i == 19) {\n        return (Math.floor(Math.random() * 4) + 8).toString(16)\n      } else {\n        return Math.floor(Math.random() * 16).toString(16)\n      }\n    })\n    .join(\"\")\n}\n\nfunction getAttribute(attributeName, ...elements) {\n  for (const value of elements.map((element) => element?.getAttribute(attributeName))) {\n    if (typeof value == \"string\") return value\n  }\n\n  return null\n}\n\nfunction hasAttribute(attributeName, ...elements) {\n  return elements.some((element) => element && element.hasAttribute(attributeName))\n}\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}\n\nfunction clearBusyState(...elements) {\n  for (const element of elements) {\n    if (element.localName == \"turbo-frame\") {\n      element.removeAttribute(\"busy\");\n    }\n\n    element.removeAttribute(\"aria-busy\");\n  }\n}\n\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n  return new Promise((resolve) => {\n    const onComplete = () => {\n      element.removeEventListener(\"error\", onComplete);\n      element.removeEventListener(\"load\", onComplete);\n      resolve();\n    };\n\n    element.addEventListener(\"load\", onComplete, { once: true });\n    element.addEventListener(\"error\", onComplete, { once: true });\n    setTimeout(resolve, timeoutInMilliseconds);\n  })\n}\n\nfunction getHistoryMethodForAction(action) {\n  switch (action) {\n    case \"replace\":\n      return history.replaceState\n    case \"advance\":\n    case \"restore\":\n      return history.pushState\n  }\n}\n\nfunction isAction(action) {\n  return action == \"advance\" || action == \"replace\" || action == \"restore\"\n}\n\nfunction getVisitAction(...elements) {\n  const action = getAttribute(\"data-turbo-action\", ...elements);\n\n  return isAction(action) ? action : null\n}\n\nfunction getMetaElement(name) {\n  return document.querySelector(`meta[name=\"${name}\"]`)\n}\n\nfunction getMetaContent(name) {\n  const element = getMetaElement(name);\n  return element && element.content\n}\n\nfunction getCspNonce() {\n  const element = getMetaElement(\"csp-nonce\");\n\n  if (element) {\n    const { nonce, content } = element;\n    return nonce == \"\" ? content : nonce\n  }\n}\n\nfunction setMetaContent(name, content) {\n  let element = getMetaElement(name);\n\n  if (!element) {\n    element = document.createElement(\"meta\");\n    element.setAttribute(\"name\", name);\n\n    document.head.appendChild(element);\n  }\n\n  element.setAttribute(\"content\", content);\n\n  return element\n}\n\nfunction findClosestRecursively(element, selector) {\n  if (element instanceof Element) {\n    return (\n      element.closest(selector) || findClosestRecursively(element.assignedSlot || element.getRootNode()?.host, selector)\n    )\n  }\n}\n\nfunction elementIsFocusable(element) {\n  const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n\n  return !!element && element.closest(inertDisabledOrHidden) == null && typeof element.focus == \"function\"\n}\n\nfunction queryAutofocusableElement(elementOrDocumentFragment) {\n  return Array.from(elementOrDocumentFragment.querySelectorAll(\"[autofocus]\")).find(elementIsFocusable)\n}\n\nasync function around(callback, reader) {\n  const before = reader();\n\n  callback();\n\n  await nextAnimationFrame();\n\n  const after = reader();\n\n  return [before, after]\n}\n\nfunction doesNotTargetIFrame(name) {\n  if (name === \"_blank\") {\n    return false\n  } else if (name) {\n    for (const element of document.getElementsByName(name)) {\n      if (element instanceof HTMLIFrameElement) return false\n    }\n\n    return true\n  } else {\n    return true\n  }\n}\n\nfunction findLinkFromClickTarget(target) {\n  const link = findClosestRecursively(target, \"a[href], a[xlink\\\\:href]\");\n\n  if (!link) return null\n  if (link.href.startsWith(\"#\")) return null\n  if (link.hasAttribute(\"download\")) return null\n\n  const linkTarget = link.getAttribute(\"target\");\n  if (linkTarget && linkTarget !== \"_self\") return null\n\n  return link\n}\n\nfunction debounce(fn, delay) {\n  let timeoutId = null;\n\n  return (...args) => {\n    const callback = () => fn.apply(this, args);\n    clearTimeout(timeoutId);\n    timeoutId = setTimeout(callback, delay);\n  }\n}\n\nconst submitter = {\n  \"aria-disabled\": {\n    beforeSubmit: submitter => {\n      submitter.setAttribute(\"aria-disabled\", \"true\");\n      submitter.addEventListener(\"click\", cancelEvent);\n    },\n\n    afterSubmit: submitter => {\n      submitter.removeAttribute(\"aria-disabled\");\n      submitter.removeEventListener(\"click\", cancelEvent);\n    }\n  },\n\n  \"disabled\": {\n    beforeSubmit: submitter => submitter.disabled = true,\n    afterSubmit: submitter => submitter.disabled = false\n  }\n};\n\nclass Config {\n  #submitter = null\n\n  constructor(config) {\n    Object.assign(this, config);\n  }\n\n  get submitter() {\n    return this.#submitter\n  }\n\n  set submitter(value) {\n    this.#submitter = submitter[value] || value;\n  }\n}\n\nconst forms = new Config({\n  mode: \"on\",\n  submitter: \"disabled\"\n});\n\nconst config = {\n  drive,\n  forms\n};\n\nfunction expandURL(locatable) {\n  return new URL(locatable.toString(), document.baseURI)\n}\n\nfunction getAnchor(url) {\n  let anchorMatch;\n  if (url.hash) {\n    return url.hash.slice(1)\n    // eslint-disable-next-line no-cond-assign\n  } else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n    return anchorMatch[1]\n  }\n}\n\nfunction getAction$1(form, submitter) {\n  const action = submitter?.getAttribute(\"formaction\") || form.getAttribute(\"action\") || form.action;\n\n  return expandURL(action)\n}\n\nfunction getExtension(url) {\n  return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\"\n}\n\nfunction isPrefixedBy(baseURL, url) {\n  const prefix = addTrailingSlash(url.origin + url.pathname);\n  return addTrailingSlash(baseURL.href) === prefix || baseURL.href.startsWith(prefix)\n}\n\nfunction locationIsVisitable(location, rootLocation) {\n  return isPrefixedBy(location, rootLocation) && !config.drive.unvisitableExtensions.has(getExtension(location))\n}\n\nfunction getLocationForLink(link) {\n  return expandURL(link.getAttribute(\"href\") || \"\")\n}\n\nfunction getRequestURL(url) {\n  const anchor = getAnchor(url);\n  return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href\n}\n\nfunction toCacheKey(url) {\n  return getRequestURL(url)\n}\n\nfunction urlsAreEqual(left, right) {\n  return expandURL(left).href == expandURL(right).href\n}\n\nfunction getPathComponents(url) {\n  return url.pathname.split(\"/\").slice(1)\n}\n\nfunction getLastPathComponent(url) {\n  return getPathComponents(url).slice(-1)[0]\n}\n\nfunction addTrailingSlash(value) {\n  return value.endsWith(\"/\") ? value : value + \"/\"\n}\n\nclass FetchResponse {\n  constructor(response) {\n    this.response = response;\n  }\n\n  get succeeded() {\n    return this.response.ok\n  }\n\n  get failed() {\n    return !this.succeeded\n  }\n\n  get clientError() {\n    return this.statusCode >= 400 && this.statusCode <= 499\n  }\n\n  get serverError() {\n    return this.statusCode >= 500 && this.statusCode <= 599\n  }\n\n  get redirected() {\n    return this.response.redirected\n  }\n\n  get location() {\n    return expandURL(this.response.url)\n  }\n\n  get isHTML() {\n    return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/)\n  }\n\n  get statusCode() {\n    return this.response.status\n  }\n\n  get contentType() {\n    return this.header(\"Content-Type\")\n  }\n\n  get responseText() {\n    return this.response.clone().text()\n  }\n\n  get responseHTML() {\n    if (this.isHTML) {\n      return this.response.clone().text()\n    } else {\n      return Promise.resolve(undefined)\n    }\n  }\n\n  header(name) {\n    return this.response.headers.get(name)\n  }\n}\n\nclass LimitedSet extends Set {\n  constructor(maxSize) {\n    super();\n    this.maxSize = maxSize;\n  }\n\n  add(value) {\n    if (this.size >= this.maxSize) {\n      const iterator = this.values();\n      const oldestValue = iterator.next().value;\n      this.delete(oldestValue);\n    }\n    super.add(value);\n  }\n}\n\nconst recentRequests = new LimitedSet(20);\n\nfunction fetchWithTurboHeaders(url, options = {}) {\n  const modifiedHeaders = new Headers(options.headers || {});\n  const requestUID = uuid();\n  recentRequests.add(requestUID);\n  modifiedHeaders.append(\"X-Turbo-Request-Id\", requestUID);\n\n  return window.fetch(url, {\n    ...options,\n    headers: modifiedHeaders\n  })\n}\n\nfunction fetchMethodFromString(method) {\n  switch (method.toLowerCase()) {\n    case \"get\":\n      return FetchMethod.get\n    case \"post\":\n      return FetchMethod.post\n    case \"put\":\n      return FetchMethod.put\n    case \"patch\":\n      return FetchMethod.patch\n    case \"delete\":\n      return FetchMethod.delete\n  }\n}\n\nconst FetchMethod = {\n  get: \"get\",\n  post: \"post\",\n  put: \"put\",\n  patch: \"patch\",\n  delete: \"delete\"\n};\n\nfunction fetchEnctypeFromString(encoding) {\n  switch (encoding.toLowerCase()) {\n    case FetchEnctype.multipart:\n      return FetchEnctype.multipart\n    case FetchEnctype.plain:\n      return FetchEnctype.plain\n    default:\n      return FetchEnctype.urlEncoded\n  }\n}\n\nconst FetchEnctype = {\n  urlEncoded: \"application/x-www-form-urlencoded\",\n  multipart: \"multipart/form-data\",\n  plain: \"text/plain\"\n};\n\nclass FetchRequest {\n  abortController = new AbortController()\n  #resolveRequestPromise = (_value) => {}\n\n  constructor(delegate, method, location, requestBody = new URLSearchParams(), target = null, enctype = FetchEnctype.urlEncoded) {\n    const [url, body] = buildResourceAndBody(expandURL(location), method, requestBody, enctype);\n\n    this.delegate = delegate;\n    this.url = url;\n    this.target = target;\n    this.fetchOptions = {\n      credentials: \"same-origin\",\n      redirect: \"follow\",\n      method: method.toUpperCase(),\n      headers: { ...this.defaultHeaders },\n      body: body,\n      signal: this.abortSignal,\n      referrer: this.delegate.referrer?.href\n    };\n    this.enctype = enctype;\n  }\n\n  get method() {\n    return this.fetchOptions.method\n  }\n\n  set method(value) {\n    const fetchBody = this.isSafe ? this.url.searchParams : this.fetchOptions.body || new FormData();\n    const fetchMethod = fetchMethodFromString(value) || FetchMethod.get;\n\n    this.url.search = \"\";\n\n    const [url, body] = buildResourceAndBody(this.url, fetchMethod, fetchBody, this.enctype);\n\n    this.url = url;\n    this.fetchOptions.body = body;\n    this.fetchOptions.method = fetchMethod.toUpperCase();\n  }\n\n  get headers() {\n    return this.fetchOptions.headers\n  }\n\n  set headers(value) {\n    this.fetchOptions.headers = value;\n  }\n\n  get body() {\n    if (this.isSafe) {\n      return this.url.searchParams\n    } else {\n      return this.fetchOptions.body\n    }\n  }\n\n  set body(value) {\n    this.fetchOptions.body = value;\n  }\n\n  get location() {\n    return this.url\n  }\n\n  get params() {\n    return this.url.searchParams\n  }\n\n  get entries() {\n    return this.body ? Array.from(this.body.entries()) : []\n  }\n\n  cancel() {\n    this.abortController.abort();\n  }\n\n  async perform() {\n    const { fetchOptions } = this;\n    this.delegate.prepareRequest(this);\n    const event = await this.#allowRequestToBeIntercepted(fetchOptions);\n    try {\n      this.delegate.requestStarted(this);\n\n      if (event.detail.fetchRequest) {\n        this.response = event.detail.fetchRequest.response;\n      } else {\n        this.response = fetchWithTurboHeaders(this.url.href, fetchOptions);\n      }\n\n      const response = await this.response;\n      return await this.receive(response)\n    } catch (error) {\n      if (error.name !== \"AbortError\") {\n        if (this.#willDelegateErrorHandling(error)) {\n          this.delegate.requestErrored(this, error);\n        }\n        throw error\n      }\n    } finally {\n      this.delegate.requestFinished(this);\n    }\n  }\n\n  async receive(response) {\n    const fetchResponse = new FetchResponse(response);\n    const event = dispatch(\"turbo:before-fetch-response\", {\n      cancelable: true,\n      detail: { fetchResponse },\n      target: this.target\n    });\n    if (event.defaultPrevented) {\n      this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n    } else if (fetchResponse.succeeded) {\n      this.delegate.requestSucceededWithResponse(this, fetchResponse);\n    } else {\n      this.delegate.requestFailedWithResponse(this, fetchResponse);\n    }\n    return fetchResponse\n  }\n\n  get defaultHeaders() {\n    return {\n      Accept: \"text/html, application/xhtml+xml\"\n    }\n  }\n\n  get isSafe() {\n    return isSafe(this.method)\n  }\n\n  get abortSignal() {\n    return this.abortController.signal\n  }\n\n  acceptResponseType(mimeType) {\n    this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n  }\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    this.url = event.detail.url;\n    if (event.defaultPrevented) await requestInterception;\n\n    return event\n  }\n\n  #willDelegateErrorHandling(error) {\n    const event = dispatch(\"turbo:fetch-request-error\", {\n      target: this.target,\n      cancelable: true,\n      detail: { request: this, error: error }\n    });\n\n    return !event.defaultPrevented\n  }\n}\n\nfunction isSafe(fetchMethod) {\n  return fetchMethodFromString(fetchMethod) == FetchMethod.get\n}\n\nfunction buildResourceAndBody(resource, method, requestBody, enctype) {\n  const searchParams =\n    Array.from(requestBody).length > 0 ? new URLSearchParams(entriesExcludingFiles(requestBody)) : resource.searchParams;\n\n  if (isSafe(method)) {\n    return [mergeIntoURLSearchParams(resource, searchParams), null]\n  } else if (enctype == FetchEnctype.urlEncoded) {\n    return [resource, searchParams]\n  } else {\n    return [resource, requestBody]\n  }\n}\n\nfunction entriesExcludingFiles(requestBody) {\n  const entries = [];\n\n  for (const [name, value] of requestBody) {\n    if (value instanceof File) continue\n    else entries.push([name, value]);\n  }\n\n  return entries\n}\n\nfunction mergeIntoURLSearchParams(url, requestBody) {\n  const searchParams = new URLSearchParams(entriesExcludingFiles(requestBody));\n\n  url.search = searchParams.toString();\n\n  return url\n}\n\nclass AppearanceObserver {\n  started = false\n\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n    this.intersectionObserver = new IntersectionObserver(this.intersect);\n  }\n\n  start() {\n    if (!this.started) {\n      this.started = true;\n      this.intersectionObserver.observe(this.element);\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.started = false;\n      this.intersectionObserver.unobserve(this.element);\n    }\n  }\n\n  intersect = (entries) => {\n    const lastEntry = entries.slice(-1)[0];\n    if (lastEntry?.isIntersecting) {\n      this.delegate.elementAppearedInViewport(this.element);\n    }\n  }\n}\n\nclass StreamMessage {\n  static contentType = \"text/vnd.turbo-stream.html\"\n\n  static wrap(message) {\n    if (typeof message == \"string\") {\n      return new this(createDocumentFragment(message))\n    } else {\n      return message\n    }\n  }\n\n  constructor(fragment) {\n    this.fragment = importStreamElements(fragment);\n  }\n}\n\nfunction importStreamElements(fragment) {\n  for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n    const streamElement = document.importNode(element, true);\n\n    for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n      inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n    }\n\n    element.replaceWith(streamElement);\n  }\n\n  return fragment\n}\n\nconst identity = key => key;\n\nclass LRUCache {\n  keys = []\n  entries = {}\n  #toCacheKey\n\n  constructor(size, toCacheKey = identity) {\n    this.size = size;\n    this.#toCacheKey = toCacheKey;\n  }\n\n  has(key) {\n    return this.#toCacheKey(key) in this.entries\n  }\n\n  get(key) {\n    if (this.has(key)) {\n      const entry = this.read(key);\n      this.touch(key);\n      return entry\n    }\n  }\n\n  put(key, entry) {\n    this.write(key, entry);\n    this.touch(key);\n    return entry\n  }\n\n  clear() {\n    for (const key of Object.keys(this.entries)) {\n      this.evict(key);\n    }\n  }\n\n  // Private\n\n  read(key) {\n    return this.entries[this.#toCacheKey(key)]\n  }\n\n  write(key, entry) {\n    this.entries[this.#toCacheKey(key)] = entry;\n  }\n\n  touch(key) {\n    key = this.#toCacheKey(key);\n    const index = this.keys.indexOf(key);\n    if (index > -1) this.keys.splice(index, 1);\n    this.keys.unshift(key);\n    this.trim();\n  }\n\n  trim() {\n    for (const key of this.keys.splice(this.size)) {\n      this.evict(key);\n    }\n  }\n\n  evict(key) {\n    delete this.entries[key];\n  }\n}\n\nconst PREFETCH_DELAY = 100;\n\nclass PrefetchCache extends LRUCache {\n  #prefetchTimeout = null\n  #maxAges = {}\n\n  constructor(size = 1, prefetchDelay = PREFETCH_DELAY) {\n    super(size, toCacheKey);\n    this.prefetchDelay = prefetchDelay;\n  }\n\n  putLater(url, request, ttl) {\n    this.#prefetchTimeout = setTimeout(() => {\n      request.perform();\n      this.put(url, request, ttl);\n      this.#prefetchTimeout = null;\n    }, this.prefetchDelay);\n  }\n\n  put(url, request, ttl = cacheTtl) {\n    super.put(url, request);\n    this.#maxAges[toCacheKey(url)] = new Date(new Date().getTime() + ttl);\n  }\n\n  clear() {\n    super.clear();\n    if (this.#prefetchTimeout) clearTimeout(this.#prefetchTimeout);\n  }\n\n  evict(key) {\n    super.evict(key);\n    delete this.#maxAges[key];\n  }\n\n  has(key) {\n    if (super.has(key)) {\n      const maxAge = this.#maxAges[toCacheKey(key)];\n\n      return maxAge && maxAge > Date.now()\n    } else {\n      return false\n    }\n  }\n}\n\nconst cacheTtl = 10 * 1000;\nconst prefetchCache = new PrefetchCache();\n\nconst FormSubmissionState = {\n  initialized: \"initialized\",\n  requesting: \"requesting\",\n  waiting: \"waiting\",\n  receiving: \"receiving\",\n  stopping: \"stopping\",\n  stopped: \"stopped\"\n};\n\nclass FormSubmission {\n  state = FormSubmissionState.initialized\n\n  static confirmMethod(message) {\n    return Promise.resolve(confirm(message))\n  }\n\n  constructor(delegate, formElement, submitter, mustRedirect = false) {\n    const method = getMethod(formElement, submitter);\n    const action = getAction(getFormAction(formElement, submitter), method);\n    const body = buildFormData(formElement, submitter);\n    const enctype = getEnctype(formElement, submitter);\n\n    this.delegate = delegate;\n    this.formElement = formElement;\n    this.submitter = submitter;\n    this.fetchRequest = new FetchRequest(this, method, action, body, formElement, enctype);\n    this.mustRedirect = mustRedirect;\n  }\n\n  get method() {\n    return this.fetchRequest.method\n  }\n\n  set method(value) {\n    this.fetchRequest.method = value;\n  }\n\n  get action() {\n    return this.fetchRequest.url.toString()\n  }\n\n  set action(value) {\n    this.fetchRequest.url = expandURL(value);\n  }\n\n  get body() {\n    return this.fetchRequest.body\n  }\n\n  get enctype() {\n    return this.fetchRequest.enctype\n  }\n\n  get isSafe() {\n    return this.fetchRequest.isSafe\n  }\n\n  get location() {\n    return this.fetchRequest.url\n  }\n\n  // The submission process\n\n  async start() {\n    const { initialized, requesting } = FormSubmissionState;\n    const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n\n    if (typeof confirmationMessage === \"string\") {\n      const confirmMethod = typeof config.forms.confirm === \"function\" ?\n        config.forms.confirm :\n        FormSubmission.confirmMethod;\n\n      const answer = await confirmMethod(confirmationMessage, this.formElement, this.submitter);\n      if (!answer) {\n        return\n      }\n    }\n\n    if (this.state == initialized) {\n      this.state = requesting;\n      return this.fetchRequest.perform()\n    }\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\n  // Fetch request delegate\n\n  prepareRequest(request) {\n    if (!request.isSafe) {\n      const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n      if (token) {\n        request.headers[\"X-CSRF-Token\"] = token;\n      }\n    }\n\n    if (this.requestAcceptsTurboStreamResponse(request)) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted(_request) {\n    this.state = FormSubmissionState.waiting;\n    if (this.submitter) config.forms.submitter.beforeSubmit(this.submitter);\n    this.setSubmitsWith();\n    markAsBusy(this.formElement);\n    dispatch(\"turbo:submit-start\", {\n      target: this.formElement,\n      detail: { formSubmission: this }\n    });\n    this.delegate.formSubmissionStarted(this);\n  }\n\n  requestPreventedHandlingResponse(request, response) {\n    prefetchCache.clear();\n\n    this.result = { success: response.succeeded, fetchResponse: response };\n  }\n\n  requestSucceededWithResponse(request, response) {\n    if (response.clientError || response.serverError) {\n      this.delegate.formSubmissionFailedWithResponse(this, response);\n      return\n    }\n\n    prefetchCache.clear();\n\n    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    } else {\n      this.state = FormSubmissionState.receiving;\n      this.result = { success: true, fetchResponse: response };\n      this.delegate.formSubmissionSucceededWithResponse(this, response);\n    }\n  }\n\n  requestFailedWithResponse(request, response) {\n    this.result = { success: false, fetchResponse: response };\n    this.delegate.formSubmissionFailedWithResponse(this, response);\n  }\n\n  requestErrored(request, error) {\n    this.result = { success: false, error };\n    this.delegate.formSubmissionErrored(this, error);\n  }\n\n  requestFinished(_request) {\n    this.state = FormSubmissionState.stopped;\n    if (this.submitter) config.forms.submitter.afterSubmit(this.submitter);\n    this.resetSubmitterText();\n    clearBusyState(this.formElement);\n    dispatch(\"turbo:submit-end\", {\n      target: this.formElement,\n      detail: { formSubmission: this, ...this.result }\n    });\n    this.delegate.formSubmissionFinished(this);\n  }\n\n  // Private\n\n  setSubmitsWith() {\n    if (!this.submitter || !this.submitsWith) return\n\n    if (this.submitter.matches(\"button\")) {\n      this.originalSubmitText = this.submitter.innerHTML;\n      this.submitter.innerHTML = this.submitsWith;\n    } else if (this.submitter.matches(\"input\")) {\n      const input = this.submitter;\n      this.originalSubmitText = input.value;\n      input.value = this.submitsWith;\n    }\n  }\n\n  resetSubmitterText() {\n    if (!this.submitter || !this.originalSubmitText) return\n\n    if (this.submitter.matches(\"button\")) {\n      this.submitter.innerHTML = this.originalSubmitText;\n    } else if (this.submitter.matches(\"input\")) {\n      const input = this.submitter;\n      input.value = this.originalSubmitText;\n    }\n  }\n\n  requestMustRedirect(request) {\n    return !request.isSafe && this.mustRedirect\n  }\n\n  requestAcceptsTurboStreamResponse(request) {\n    return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement)\n  }\n\n  get submitsWith() {\n    return this.submitter?.getAttribute(\"data-turbo-submits-with\")\n  }\n}\n\nfunction buildFormData(formElement, submitter) {\n  const formData = new FormData(formElement);\n  const name = submitter?.getAttribute(\"name\");\n  const value = submitter?.getAttribute(\"value\");\n\n  if (name) {\n    formData.append(name, value || \"\");\n  }\n\n  return formData\n}\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}\n\nfunction responseSucceededWithoutRedirect(response) {\n  return response.statusCode == 200 && !response.redirected\n}\n\nfunction getFormAction(formElement, submitter) {\n  const formElementAction = typeof formElement.action === \"string\" ? formElement.action : null;\n\n  if (submitter?.hasAttribute(\"formaction\")) {\n    return submitter.getAttribute(\"formaction\") || \"\"\n  } else {\n    return formElement.getAttribute(\"action\") || formElementAction || \"\"\n  }\n}\n\nfunction getAction(formAction, fetchMethod) {\n  const action = expandURL(formAction);\n\n  if (isSafe(fetchMethod)) {\n    action.search = \"\";\n  }\n\n  return action\n}\n\nfunction getMethod(formElement, submitter) {\n  const method = submitter?.getAttribute(\"formmethod\") || formElement.getAttribute(\"method\") || \"\";\n  return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get\n}\n\nfunction getEnctype(formElement, submitter) {\n  return fetchEnctypeFromString(submitter?.getAttribute(\"formenctype\") || formElement.enctype)\n}\n\nclass Snapshot {\n  constructor(element) {\n    this.element = element;\n  }\n\n  get activeElement() {\n    return this.element.ownerDocument.activeElement\n  }\n\n  get children() {\n    return [...this.element.children]\n  }\n\n  hasAnchor(anchor) {\n    return this.getElementForAnchor(anchor) != null\n  }\n\n  getElementForAnchor(anchor) {\n    return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null\n  }\n\n  get isConnected() {\n    return this.element.isConnected\n  }\n\n  get firstAutofocusableElement() {\n    return queryAutofocusableElement(this.element)\n  }\n\n  get permanentElements() {\n    return queryPermanentElementsAll(this.element)\n  }\n\n  getPermanentElementById(id) {\n    return getPermanentElementById(this.element, id)\n  }\n\n  getPermanentElementMapForSnapshot(snapshot) {\n    const permanentElementMap = {};\n\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\n    return permanentElementMap\n  }\n}\n\nfunction getPermanentElementById(node, id) {\n  return node.querySelector(`#${id}[data-turbo-permanent]`)\n}\n\nfunction queryPermanentElementsAll(node) {\n  return node.querySelectorAll(\"[id][data-turbo-permanent]\")\n}\n\nclass FormSubmitObserver {\n  started = false\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (!this.started) {\n      this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n      this.started = false;\n    }\n  }\n\n  submitCaptured = () => {\n    this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n    this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n  }\n\n  submitBubbled = (event) => {\n    if (!event.defaultPrevented) {\n      const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n      const submitter = event.submitter || undefined;\n\n      if (\n        form &&\n        submissionDoesNotDismissDialog(form, submitter) &&\n        submissionDoesNotTargetIFrame(form, submitter) &&\n        this.delegate.willSubmitForm(form, submitter)\n      ) {\n        event.preventDefault();\n        event.stopImmediatePropagation();\n        this.delegate.formSubmitted(form, submitter);\n      }\n    }\n  }\n}\n\nfunction submissionDoesNotDismissDialog(form, submitter) {\n  const method = submitter?.getAttribute(\"formmethod\") || form.getAttribute(\"method\");\n\n  return method != \"dialog\"\n}\n\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n  const target = submitter?.getAttribute(\"formtarget\") || form.getAttribute(\"target\");\n\n  return doesNotTargetIFrame(target)\n}\n\nclass View {\n  #resolveRenderPromise = (_value) => {}\n  #resolveInterceptionPromise = (_value) => {}\n\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n  }\n\n  // Scrolling\n\n  scrollToAnchor(anchor) {\n    const element = this.snapshot.getElementForAnchor(anchor);\n    if (element) {\n      this.focusElement(element);\n      this.scrollToElement(element);\n    } else {\n      this.scrollToPosition({ x: 0, y: 0 });\n    }\n  }\n\n  scrollToAnchorFromLocation(location) {\n    this.scrollToAnchor(getAnchor(location));\n  }\n\n  scrollToElement(element) {\n    element.scrollIntoView();\n  }\n\n  focusElement(element) {\n    if (element instanceof HTMLElement) {\n      if (element.hasAttribute(\"tabindex\")) {\n        element.focus();\n      } else {\n        element.setAttribute(\"tabindex\", \"-1\");\n        element.focus();\n        element.removeAttribute(\"tabindex\");\n      }\n    }\n  }\n\n  scrollToPosition({ x, y }) {\n    this.scrollRoot.scrollTo(x, y);\n  }\n\n  scrollToTop() {\n    this.scrollToPosition({ x: 0, y: 0 });\n  }\n\n  get scrollRoot() {\n    return window\n  }\n\n  // Rendering\n\n  async render(renderer) {\n    const { isPreview, shouldRender, willRender, newSnapshot: snapshot } = renderer;\n\n    // A workaround to ignore tracked element mismatch reloads when performing\n    // a promoted Visit from a frame navigation\n    const shouldInvalidate = willRender;\n\n    if (shouldRender) {\n      try {\n        this.renderPromise = new Promise((resolve) => (this.#resolveRenderPromise = resolve));\n        this.renderer = renderer;\n        await this.prepareToRenderSnapshot(renderer);\n\n        const renderInterception = new Promise((resolve) => (this.#resolveInterceptionPromise = resolve));\n        const options = { resume: this.#resolveInterceptionPromise, render: this.renderer.renderElement, renderMethod: this.renderer.renderMethod };\n        const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n        if (!immediateRender) await renderInterception;\n\n        await this.renderSnapshot(renderer);\n        this.delegate.viewRenderedSnapshot(snapshot, isPreview, this.renderer.renderMethod);\n        this.delegate.preloadOnLoadLinksForView(this.element);\n        this.finishRenderingSnapshot(renderer);\n      } finally {\n        delete this.renderer;\n        this.#resolveRenderPromise(undefined);\n        delete this.renderPromise;\n      }\n    } else if (shouldInvalidate) {\n      this.invalidate(renderer.reloadReason);\n    }\n  }\n\n  invalidate(reason) {\n    this.delegate.viewInvalidated(reason);\n  }\n\n  async prepareToRenderSnapshot(renderer) {\n    this.markAsPreview(renderer.isPreview);\n    await renderer.prepareToRender();\n  }\n\n  markAsPreview(isPreview) {\n    if (isPreview) {\n      this.element.setAttribute(\"data-turbo-preview\", \"\");\n    } else {\n      this.element.removeAttribute(\"data-turbo-preview\");\n    }\n  }\n\n  markVisitDirection(direction) {\n    this.element.setAttribute(\"data-turbo-visit-direction\", direction);\n  }\n\n  unmarkVisitDirection() {\n    this.element.removeAttribute(\"data-turbo-visit-direction\");\n  }\n\n  async renderSnapshot(renderer) {\n    await renderer.render();\n  }\n\n  finishRenderingSnapshot(renderer) {\n    renderer.finishRendering();\n  }\n}\n\nclass FrameView extends View {\n  missing() {\n    this.element.innerHTML = `<strong class=\"turbo-frame-error\">Content missing</strong>`;\n  }\n\n  get snapshot() {\n    return new Snapshot(this.element)\n  }\n}\n\nclass LinkInterceptor {\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n  }\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\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\n  clickBubbled = (event) => {\n    if (this.clickEventIsSignificant(event)) {\n      this.clickEvent = event;\n    } else {\n      delete this.clickEvent;\n    }\n  }\n\n  linkClicked = (event) => {\n    if (this.clickEvent && this.clickEventIsSignificant(event)) {\n      if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n        this.clickEvent.preventDefault();\n        event.preventDefault();\n        this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n      }\n    }\n    delete this.clickEvent;\n  }\n\n  willVisit = (_event) => {\n    delete this.clickEvent;\n  }\n\n  clickEventIsSignificant(event) {\n    const target = event.composed ? event.target?.parentElement : event.target;\n    const element = findLinkFromClickTarget(target) || target;\n\n    return element instanceof Element && element.closest(\"turbo-frame, html\") == this.element\n  }\n}\n\nclass LinkClickObserver {\n  started = false\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (!this.started) {\n      this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n      this.started = false;\n    }\n  }\n\n  clickCaptured = () => {\n    this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n    this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n  }\n\n  clickBubbled = (event) => {\n    if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n      const target = (event.composedPath && event.composedPath()[0]) || event.target;\n      const link = findLinkFromClickTarget(target);\n      if (link && doesNotTargetIFrame(link.target)) {\n        const location = getLocationForLink(link);\n        if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n          event.preventDefault();\n          this.delegate.followedLinkToLocation(link, location);\n        }\n      }\n    }\n  }\n\n  clickEventIsSignificant(event) {\n    return !(\n      (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  }\n}\n\nclass FormLinkClickObserver {\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.linkInterceptor = new LinkClickObserver(this, element);\n  }\n\n  start() {\n    this.linkInterceptor.start();\n  }\n\n  stop() {\n    this.linkInterceptor.stop();\n  }\n\n  // Link hover observer delegate\n\n  canPrefetchRequestToLocation(link, location) {\n    return false\n  }\n\n  prefetchAndCacheRequestToLocation(link, location) {\n    return\n  }\n\n  // Link click observer delegate\n\n  willFollowLinkToLocation(link, location, originalEvent) {\n    return (\n      this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n      (link.hasAttribute(\"data-turbo-method\") || link.hasAttribute(\"data-turbo-stream\"))\n    )\n  }\n\n  followedLinkToLocation(link, location) {\n    const form = document.createElement(\"form\");\n\n    const type = \"hidden\";\n    for (const [name, value] of location.searchParams) {\n      form.append(Object.assign(document.createElement(\"input\"), { type, name, value }));\n    }\n\n    const action = Object.assign(location, { search: \"\" });\n    form.setAttribute(\"data-turbo\", \"true\");\n    form.setAttribute(\"action\", action.href);\n    form.setAttribute(\"hidden\", \"\");\n\n    const method = link.getAttribute(\"data-turbo-method\");\n    if (method) form.setAttribute(\"method\", method);\n\n    const turboFrame = link.getAttribute(\"data-turbo-frame\");\n    if (turboFrame) form.setAttribute(\"data-turbo-frame\", turboFrame);\n\n    const turboAction = getVisitAction(link);\n    if (turboAction) form.setAttribute(\"data-turbo-action\", turboAction);\n\n    const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n    if (turboConfirm) form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n\n    const turboStream = link.hasAttribute(\"data-turbo-stream\");\n    if (turboStream) form.setAttribute(\"data-turbo-stream\", \"\");\n\n    this.delegate.submittedFormLinkToLocation(link, location, form);\n\n    document.body.appendChild(form);\n    form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n    requestAnimationFrame(() => form.requestSubmit());\n  }\n}\n\nclass Bardo {\n  static async preservingPermanentElements(delegate, permanentElementMap, callback) {\n    const bardo = new this(delegate, permanentElementMap);\n    bardo.enter();\n    await callback();\n    bardo.leave();\n  }\n\n  constructor(delegate, permanentElementMap) {\n    this.delegate = delegate;\n    this.permanentElementMap = permanentElementMap;\n  }\n\n  enter() {\n    for (const id in this.permanentElementMap) {\n      const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n      this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n      this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n    }\n  }\n\n  leave() {\n    for (const id in this.permanentElementMap) {\n      const [currentPermanentElement] = this.permanentElementMap[id];\n      this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n      this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n      this.delegate.leavingBardo(currentPermanentElement);\n    }\n  }\n\n  replaceNewPermanentElementWithPlaceholder(permanentElement) {\n    const placeholder = createPlaceholderForPermanentElement(permanentElement);\n    permanentElement.replaceWith(placeholder);\n  }\n\n  replaceCurrentPermanentElementWithClone(permanentElement) {\n    const clone = permanentElement.cloneNode(true);\n    permanentElement.replaceWith(clone);\n  }\n\n  replacePlaceholderWithPermanentElement(permanentElement) {\n    const placeholder = this.getPlaceholderById(permanentElement.id);\n    placeholder?.replaceWith(permanentElement);\n  }\n\n  getPlaceholderById(id) {\n    return this.placeholders.find((element) => element.content == id)\n  }\n\n  get placeholders() {\n    return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")]\n  }\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  #activeElement = null\n\n  static renderElement(currentElement, newElement) {\n    // Abstract method\n  }\n\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.renderElement = this.constructor.renderElement;\n    this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n  }\n\n  get shouldRender() {\n    return true\n  }\n\n  get shouldAutofocus() {\n    return true\n  }\n\n  get reloadReason() {\n    return\n  }\n\n  prepareToRender() {\n    return\n  }\n\n  render() {\n    // Abstract method\n  }\n\n  finishRendering() {\n    if (this.resolvingFunctions) {\n      this.resolvingFunctions.resolve();\n      delete this.resolvingFunctions;\n    }\n  }\n\n  async preservingPermanentElements(callback) {\n    await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n  }\n\n  focusFirstAutofocusableElement() {\n    if (this.shouldAutofocus) {\n      const element = this.connectedSnapshot.firstAutofocusableElement;\n      if (element) {\n        element.focus();\n      }\n    }\n  }\n\n  // Bardo delegate\n\n  enteringBardo(currentPermanentElement) {\n    if (this.#activeElement) return\n\n    if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n      this.#activeElement = this.currentSnapshot.activeElement;\n    }\n  }\n\n  leavingBardo(currentPermanentElement) {\n    if (currentPermanentElement.contains(this.#activeElement) && this.#activeElement instanceof HTMLElement) {\n      this.#activeElement.focus();\n\n      this.#activeElement = null;\n    }\n  }\n\n  get connectedSnapshot() {\n    return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot\n  }\n\n  get currentElement() {\n    return this.currentSnapshot.element\n  }\n\n  get newElement() {\n    return this.newSnapshot.element\n  }\n\n  get permanentElementMap() {\n    return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)\n  }\n\n  get renderMethod() {\n    return \"replace\"\n  }\n}\n\nclass FrameRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    const destinationRange = document.createRange();\n    destinationRange.selectNodeContents(currentElement);\n    destinationRange.deleteContents();\n\n    const frameElement = newElement;\n    const sourceRange = frameElement.ownerDocument?.createRange();\n    if (sourceRange) {\n      sourceRange.selectNodeContents(frameElement);\n      currentElement.appendChild(sourceRange.extractContents());\n    }\n  }\n\n  constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n    super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n    this.delegate = delegate;\n  }\n\n  get shouldRender() {\n    return true\n  }\n\n  async render() {\n    await nextRepaint();\n    this.preservingPermanentElements(() => {\n      this.loadFrameElement();\n    });\n    this.scrollFrameIntoView();\n    await nextRepaint();\n    this.focusFirstAutofocusableElement();\n    await nextRepaint();\n    this.activateScriptElements();\n  }\n\n  loadFrameElement() {\n    this.delegate.willRenderFrame(this.currentElement, this.newElement);\n    this.renderElement(this.currentElement, this.newElement);\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      const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n\n      if (element) {\n        element.scrollIntoView({ block, behavior });\n        return true\n      }\n    }\n    return false\n  }\n\n  activateScriptElements() {\n    for (const inertScriptElement of this.newScriptElements) {\n      const activatedScriptElement = activateScriptElement(inertScriptElement);\n      inertScriptElement.replaceWith(activatedScriptElement);\n    }\n  }\n\n  get newScriptElements() {\n    return this.currentElement.querySelectorAll(\"script\")\n  }\n}\n\nfunction readScrollLogicalPosition(value, defaultValue) {\n  if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n    return value\n  } else {\n    return defaultValue\n  }\n}\n\nfunction readScrollBehavior(value, defaultValue) {\n  if (value == \"auto\" || value == \"smooth\") {\n    return value\n  } else {\n    return defaultValue\n  }\n}\n\n/**\n * @typedef {object} ConfigHead\n *\n * @property {'merge' | 'append' | 'morph' | 'none'} [style]\n * @property {boolean} [block]\n * @property {boolean} [ignore]\n * @property {function(Element): boolean} [shouldPreserve]\n * @property {function(Element): boolean} [shouldReAppend]\n * @property {function(Element): boolean} [shouldRemove]\n * @property {function(Element, {added: Node[], kept: Element[], removed: Element[]}): void} [afterHeadMorphed]\n */\n\n/**\n * @typedef {object} ConfigCallbacks\n *\n * @property {function(Node): boolean} [beforeNodeAdded]\n * @property {function(Node): void} [afterNodeAdded]\n * @property {function(Element, Node): boolean} [beforeNodeMorphed]\n * @property {function(Element, Node): void} [afterNodeMorphed]\n * @property {function(Element): boolean} [beforeNodeRemoved]\n * @property {function(Element): void} [afterNodeRemoved]\n * @property {function(string, Element, \"update\" | \"remove\"): boolean} [beforeAttributeUpdated]\n */\n\n/**\n * @typedef {object} Config\n *\n * @property {'outerHTML' | 'innerHTML'} [morphStyle]\n * @property {boolean} [ignoreActive]\n * @property {boolean} [ignoreActiveValue]\n * @property {boolean} [restoreFocus]\n * @property {ConfigCallbacks} [callbacks]\n * @property {ConfigHead} [head]\n */\n\n/**\n * @typedef {function} NoOp\n *\n * @returns {void}\n */\n\n/**\n * @typedef {object} ConfigHeadInternal\n *\n * @property {'merge' | 'append' | 'morph' | 'none'} style\n * @property {boolean} [block]\n * @property {boolean} [ignore]\n * @property {(function(Element): boolean) | NoOp} shouldPreserve\n * @property {(function(Element): boolean) | NoOp} shouldReAppend\n * @property {(function(Element): boolean) | NoOp} shouldRemove\n * @property {(function(Element, {added: Node[], kept: Element[], removed: Element[]}): void) | NoOp} afterHeadMorphed\n */\n\n/**\n * @typedef {object} ConfigCallbacksInternal\n *\n * @property {(function(Node): boolean) | NoOp} beforeNodeAdded\n * @property {(function(Node): void) | NoOp} afterNodeAdded\n * @property {(function(Node, Node): boolean) | NoOp} beforeNodeMorphed\n * @property {(function(Node, Node): void) | NoOp} afterNodeMorphed\n * @property {(function(Node): boolean) | NoOp} beforeNodeRemoved\n * @property {(function(Node): void) | NoOp} afterNodeRemoved\n * @property {(function(string, Element, \"update\" | \"remove\"): boolean) | NoOp} beforeAttributeUpdated\n */\n\n/**\n * @typedef {object} ConfigInternal\n *\n * @property {'outerHTML' | 'innerHTML'} morphStyle\n * @property {boolean} [ignoreActive]\n * @property {boolean} [ignoreActiveValue]\n * @property {boolean} [restoreFocus]\n * @property {ConfigCallbacksInternal} callbacks\n * @property {ConfigHeadInternal} head\n */\n\n/**\n * @typedef {Object} IdSets\n * @property {Set<string>} persistentIds\n * @property {Map<Node, Set<string>>} idMap\n */\n\n/**\n * @typedef {Function} Morph\n *\n * @param {Element | Document} oldNode\n * @param {Element | Node | HTMLCollection | Node[] | string | null} newContent\n * @param {Config} [config]\n * @returns {undefined | Node[]}\n */\n\n// base IIFE to define idiomorph\n/**\n *\n * @type {{defaults: ConfigInternal, morph: Morph}}\n */\nvar Idiomorph = (function () {\n\n  /**\n   * @typedef {object} MorphContext\n   *\n   * @property {Element} target\n   * @property {Element} newContent\n   * @property {ConfigInternal} config\n   * @property {ConfigInternal['morphStyle']} morphStyle\n   * @property {ConfigInternal['ignoreActive']} ignoreActive\n   * @property {ConfigInternal['ignoreActiveValue']} ignoreActiveValue\n   * @property {ConfigInternal['restoreFocus']} restoreFocus\n   * @property {Map<Node, Set<string>>} idMap\n   * @property {Set<string>} persistentIds\n   * @property {ConfigInternal['callbacks']} callbacks\n   * @property {ConfigInternal['head']} head\n   * @property {HTMLDivElement} pantry\n   * @property {Element[]} activeElementAndParents\n   */\n\n  //=============================================================================\n  // AND NOW IT BEGINS...\n  //=============================================================================\n\n  const noOp = () => {};\n  /**\n   * Default configuration values, updatable by users now\n   * @type {ConfigInternal}\n   */\n  const defaults = {\n    morphStyle: \"outerHTML\",\n    callbacks: {\n      beforeNodeAdded: noOp,\n      afterNodeAdded: noOp,\n      beforeNodeMorphed: noOp,\n      afterNodeMorphed: noOp,\n      beforeNodeRemoved: noOp,\n      afterNodeRemoved: noOp,\n      beforeAttributeUpdated: noOp,\n    },\n    head: {\n      style: \"merge\",\n      shouldPreserve: (elt) => elt.getAttribute(\"im-preserve\") === \"true\",\n      shouldReAppend: (elt) => elt.getAttribute(\"im-re-append\") === \"true\",\n      shouldRemove: noOp,\n      afterHeadMorphed: noOp,\n    },\n    restoreFocus: true,\n  };\n\n  /**\n   * Core idiomorph function for morphing one DOM tree to another\n   *\n   * @param {Element | Document} oldNode\n   * @param {Element | Node | HTMLCollection | Node[] | string | null} newContent\n   * @param {Config} [config]\n   * @returns {Promise<Node[]> | Node[]}\n   */\n  function morph(oldNode, newContent, config = {}) {\n    oldNode = normalizeElement(oldNode);\n    const newNode = normalizeParent(newContent);\n    const ctx = createMorphContext(oldNode, newNode, config);\n\n    const morphedNodes = saveAndRestoreFocus(ctx, () => {\n      return withHeadBlocking(\n        ctx,\n        oldNode,\n        newNode,\n        /** @param {MorphContext} ctx */ (ctx) => {\n          if (ctx.morphStyle === \"innerHTML\") {\n            morphChildren(ctx, oldNode, newNode);\n            return Array.from(oldNode.childNodes);\n          } else {\n            return morphOuterHTML(ctx, oldNode, newNode);\n          }\n        },\n      );\n    });\n\n    ctx.pantry.remove();\n    return morphedNodes;\n  }\n\n  /**\n   * Morph just the outerHTML of the oldNode to the newContent\n   * We have to be careful because the oldNode could have siblings which need to be untouched\n   * @param {MorphContext} ctx\n   * @param {Element} oldNode\n   * @param {Element} newNode\n   * @returns {Node[]}\n   */\n  function morphOuterHTML(ctx, oldNode, newNode) {\n    const oldParent = normalizeParent(oldNode);\n    morphChildren(\n      ctx,\n      oldParent,\n      newNode,\n      // these two optional params are the secret sauce\n      oldNode, // start point for iteration\n      oldNode.nextSibling, // end point for iteration\n    );\n    // this is safe even with siblings, because normalizeParent returns a SlicedParentNode if needed.\n    return Array.from(oldParent.childNodes);\n  }\n\n  /**\n   * @param {MorphContext} ctx\n   * @param {Function} fn\n   * @returns {Promise<Node[]> | Node[]}\n   */\n  function saveAndRestoreFocus(ctx, fn) {\n    if (!ctx.config.restoreFocus) return fn();\n    let activeElement =\n      /** @type {HTMLInputElement|HTMLTextAreaElement|null} */ (\n        document.activeElement\n      );\n\n    // don't bother if the active element is not an input or textarea\n    if (\n      !(\n        activeElement instanceof HTMLInputElement ||\n        activeElement instanceof HTMLTextAreaElement\n      )\n    ) {\n      return fn();\n    }\n\n    const { id: activeElementId, selectionStart, selectionEnd } = activeElement;\n\n    const results = fn();\n\n    if (\n      activeElementId &&\n      activeElementId !== document.activeElement?.getAttribute(\"id\")\n    ) {\n      activeElement = ctx.target.querySelector(`[id=\"${activeElementId}\"]`);\n      activeElement?.focus();\n    }\n    if (activeElement && !activeElement.selectionEnd && selectionEnd) {\n      activeElement.setSelectionRange(selectionStart, selectionEnd);\n    }\n\n    return results;\n  }\n\n  const morphChildren = (function () {\n    /**\n     * This is the core algorithm for matching up children.  The idea is to use id sets to try to match up\n     * nodes as faithfully as possible.  We greedily match, which allows us to keep the algorithm fast, but\n     * by using id sets, we are able to better match up with content deeper in the DOM.\n     *\n     * Basic algorithm:\n     * - for each node in the new content:\n     *   - search self and siblings for an id set match, falling back to a soft match\n     *   - if match found\n     *     - remove any nodes up to the match:\n     *       - pantry persistent nodes\n     *       - delete the rest\n     *     - morph the match\n     *   - elsif no match found, and node is persistent\n     *     - find its match by querying the old root (future) and pantry (past)\n     *     - move it and its children here\n     *     - morph it\n     *   - else\n     *     - create a new node from scratch as a last result\n     *\n     * @param {MorphContext} ctx the merge context\n     * @param {Element} oldParent the old content that we are merging the new content into\n     * @param {Element} newParent the parent element of the new content\n     * @param {Node|null} [insertionPoint] the point in the DOM we start morphing at (defaults to first child)\n     * @param {Node|null} [endPoint] the point in the DOM we stop morphing at (defaults to after last child)\n     */\n    function morphChildren(\n      ctx,\n      oldParent,\n      newParent,\n      insertionPoint = null,\n      endPoint = null,\n    ) {\n      // normalize\n      if (\n        oldParent instanceof HTMLTemplateElement &&\n        newParent instanceof HTMLTemplateElement\n      ) {\n        // @ts-ignore we can pretend the DocumentFragment is an Element\n        oldParent = oldParent.content;\n        // @ts-ignore ditto\n        newParent = newParent.content;\n      }\n      insertionPoint ||= oldParent.firstChild;\n\n      // run through all the new content\n      for (const newChild of newParent.childNodes) {\n        // once we reach the end of the old parent content skip to the end and insert the rest\n        if (insertionPoint && insertionPoint != endPoint) {\n          const bestMatch = findBestMatch(\n            ctx,\n            newChild,\n            insertionPoint,\n            endPoint,\n          );\n          if (bestMatch) {\n            // if the node to morph is not at the insertion point then remove/move up to it\n            if (bestMatch !== insertionPoint) {\n              removeNodesBetween(ctx, insertionPoint, bestMatch);\n            }\n            morphNode(bestMatch, newChild, ctx);\n            insertionPoint = bestMatch.nextSibling;\n            continue;\n          }\n        }\n\n        // if the matching node is elsewhere in the original content\n        if (newChild instanceof Element) {\n          // we can pretend the id is non-null because the next `.has` line will reject it if not\n          const newChildId = /** @type {String} */ (\n            newChild.getAttribute(\"id\")\n          );\n          if (ctx.persistentIds.has(newChildId)) {\n            // move it and all its children here and morph\n            const movedChild = moveBeforeById(\n              oldParent,\n              newChildId,\n              insertionPoint,\n              ctx,\n            );\n            morphNode(movedChild, newChild, ctx);\n            insertionPoint = movedChild.nextSibling;\n            continue;\n          }\n        }\n\n        // last resort: insert the new node from scratch\n        const insertedNode = createNode(\n          oldParent,\n          newChild,\n          insertionPoint,\n          ctx,\n        );\n        // could be null if beforeNodeAdded prevented insertion\n        if (insertedNode) {\n          insertionPoint = insertedNode.nextSibling;\n        }\n      }\n\n      // remove any remaining old nodes that didn't match up with new content\n      while (insertionPoint && insertionPoint != endPoint) {\n        const tempNode = insertionPoint;\n        insertionPoint = insertionPoint.nextSibling;\n        removeNode(ctx, tempNode);\n      }\n    }\n\n    /**\n     * This performs the action of inserting a new node while handling situations where the node contains\n     * elements with persistent ids and possible state info we can still preserve by moving in and then morphing\n     *\n     * @param {Element} oldParent\n     * @param {Node} newChild\n     * @param {Node|null} insertionPoint\n     * @param {MorphContext} ctx\n     * @returns {Node|null}\n     */\n    function createNode(oldParent, newChild, insertionPoint, ctx) {\n      if (ctx.callbacks.beforeNodeAdded(newChild) === false) return null;\n      if (ctx.idMap.has(newChild)) {\n        // node has children with ids with possible state so create a dummy elt of same type and apply full morph algorithm\n        const newEmptyChild = document.createElement(\n          /** @type {Element} */ (newChild).tagName,\n        );\n        oldParent.insertBefore(newEmptyChild, insertionPoint);\n        morphNode(newEmptyChild, newChild, ctx);\n        ctx.callbacks.afterNodeAdded(newEmptyChild);\n        return newEmptyChild;\n      } else {\n        // optimisation: no id state to preserve so we can just insert a clone of the newChild and its descendants\n        const newClonedChild = document.importNode(newChild, true); // importNode to not mutate newParent\n        oldParent.insertBefore(newClonedChild, insertionPoint);\n        ctx.callbacks.afterNodeAdded(newClonedChild);\n        return newClonedChild;\n      }\n    }\n\n    //=============================================================================\n    // Matching Functions\n    //=============================================================================\n    const findBestMatch = (function () {\n      /**\n       * Scans forward from the startPoint to the endPoint looking for a match\n       * for the node. It looks for an id set match first, then a soft match.\n       * We abort softmatching if we find two future soft matches, to reduce churn.\n       * @param {Node} node\n       * @param {MorphContext} ctx\n       * @param {Node | null} startPoint\n       * @param {Node | null} endPoint\n       * @returns {Node | null}\n       */\n      function findBestMatch(ctx, node, startPoint, endPoint) {\n        let softMatch = null;\n        let nextSibling = node.nextSibling;\n        let siblingSoftMatchCount = 0;\n\n        let cursor = startPoint;\n        while (cursor && cursor != endPoint) {\n          // soft matching is a prerequisite for id set matching\n          if (isSoftMatch(cursor, node)) {\n            if (isIdSetMatch(ctx, cursor, node)) {\n              return cursor; // found an id set match, we're done!\n            }\n\n            // we haven't yet saved a soft match fallback\n            if (softMatch === null) {\n              // the current soft match will hard match something else in the future, leave it\n              if (!ctx.idMap.has(cursor)) {\n                // save this as the fallback if we get through the loop without finding a hard match\n                softMatch = cursor;\n              }\n            }\n          }\n          if (\n            softMatch === null &&\n            nextSibling &&\n            isSoftMatch(cursor, nextSibling)\n          ) {\n            // The next new node has a soft match with this node, so\n            // increment the count of future soft matches\n            siblingSoftMatchCount++;\n            nextSibling = nextSibling.nextSibling;\n\n            // If there are two future soft matches, block soft matching for this node to allow\n            // future siblings to soft match. This is to reduce churn in the DOM when an element\n            // is prepended.\n            if (siblingSoftMatchCount >= 2) {\n              softMatch = undefined;\n            }\n          }\n\n          // if the current node contains active element, stop looking for better future matches,\n          // because if one is found, this node will be moved to the pantry, reparenting it and thus losing focus\n          // @ts-ignore pretend cursor is Element rather than Node, we're just testing for array inclusion\n          if (ctx.activeElementAndParents.includes(cursor)) break;\n\n          cursor = cursor.nextSibling;\n        }\n\n        return softMatch || null;\n      }\n\n      /**\n       *\n       * @param {MorphContext} ctx\n       * @param {Node} oldNode\n       * @param {Node} newNode\n       * @returns {boolean}\n       */\n      function isIdSetMatch(ctx, oldNode, newNode) {\n        let oldSet = ctx.idMap.get(oldNode);\n        let newSet = ctx.idMap.get(newNode);\n\n        if (!newSet || !oldSet) return false;\n\n        for (const id of oldSet) {\n          // a potential match is an id in the new and old nodes that\n          // has not already been merged into the DOM\n          // But the newNode content we call this on has not been\n          // merged yet and we don't allow duplicate IDs so it is simple\n          if (newSet.has(id)) {\n            return true;\n          }\n        }\n        return false;\n      }\n\n      /**\n       *\n       * @param {Node} oldNode\n       * @param {Node} newNode\n       * @returns {boolean}\n       */\n      function isSoftMatch(oldNode, newNode) {\n        // ok to cast: if one is not element, `id` and `tagName` will be undefined and we'll just compare that.\n        const oldElt = /** @type {Element} */ (oldNode);\n        const newElt = /** @type {Element} */ (newNode);\n\n        return (\n          oldElt.nodeType === newElt.nodeType &&\n          oldElt.tagName === newElt.tagName &&\n          // If oldElt has an `id` with possible state and it doesn't match newElt.id then avoid morphing.\n          // We'll still match an anonymous node with an IDed newElt, though, because if it got this far,\n          // its not persistent, and new nodes can't have any hidden state.\n          // We can't use .id because of form input shadowing, and we can't count on .getAttribute's presence because it could be a document-fragment\n          (!oldElt.getAttribute?.(\"id\") ||\n            oldElt.getAttribute?.(\"id\") === newElt.getAttribute?.(\"id\"))\n        );\n      }\n\n      return findBestMatch;\n    })();\n\n    //=============================================================================\n    // DOM Manipulation Functions\n    //=============================================================================\n\n    /**\n     * Gets rid of an unwanted DOM node; strategy depends on nature of its reuse:\n     * - Persistent nodes will be moved to the pantry for later reuse\n     * - Other nodes will have their hooks called, and then are removed\n     * @param {MorphContext} ctx\n     * @param {Node} node\n     */\n    function removeNode(ctx, node) {\n      // are we going to id set match this later?\n      if (ctx.idMap.has(node)) {\n        // skip callbacks and move to pantry\n        moveBefore(ctx.pantry, node, null);\n      } else {\n        // remove for realsies\n        if (ctx.callbacks.beforeNodeRemoved(node) === false) return;\n        node.parentNode?.removeChild(node);\n        ctx.callbacks.afterNodeRemoved(node);\n      }\n    }\n\n    /**\n     * Remove nodes between the start and end nodes\n     * @param {MorphContext} ctx\n     * @param {Node} startInclusive\n     * @param {Node} endExclusive\n     * @returns {Node|null}\n     */\n    function removeNodesBetween(ctx, startInclusive, endExclusive) {\n      /** @type {Node | null} */\n      let cursor = startInclusive;\n      // remove nodes until the endExclusive node\n      while (cursor && cursor !== endExclusive) {\n        let tempNode = /** @type {Node} */ (cursor);\n        cursor = cursor.nextSibling;\n        removeNode(ctx, tempNode);\n      }\n      return cursor;\n    }\n\n    /**\n     * Search for an element by id within the document and pantry, and move it using moveBefore.\n     *\n     * @param {Element} parentNode - The parent node to which the element will be moved.\n     * @param {string} id - The ID of the element to be moved.\n     * @param {Node | null} after - The reference node to insert the element before.\n     *                              If `null`, the element is appended as the last child.\n     * @param {MorphContext} ctx\n     * @returns {Element} The found element\n     */\n    function moveBeforeById(parentNode, id, after, ctx) {\n      const target =\n        /** @type {Element} - will always be found */\n        (\n          // ctx.target.id unsafe because of form input shadowing\n          // ctx.target could be a document fragment which doesn't have `getAttribute`\n          (ctx.target.getAttribute?.(\"id\") === id && ctx.target) ||\n            ctx.target.querySelector(`[id=\"${id}\"]`) ||\n            ctx.pantry.querySelector(`[id=\"${id}\"]`)\n        );\n      removeElementFromAncestorsIdMaps(target, ctx);\n      moveBefore(parentNode, target, after);\n      return target;\n    }\n\n    /**\n     * Removes an element from its ancestors' id maps. This is needed when an element is moved from the\n     * \"future\" via `moveBeforeId`. Otherwise, its erstwhile ancestors could be mistakenly moved to the\n     * pantry rather than being deleted, preventing their removal hooks from being called.\n     *\n     * @param {Element} element - element to remove from its ancestors' id maps\n     * @param {MorphContext} ctx\n     */\n    function removeElementFromAncestorsIdMaps(element, ctx) {\n      // we know id is non-null String, because this function is only called on elements with ids\n      const id = /** @type {String} */ (element.getAttribute(\"id\"));\n      /** @ts-ignore - safe to loop in this way **/\n      while ((element = element.parentNode)) {\n        let idSet = ctx.idMap.get(element);\n        if (idSet) {\n          idSet.delete(id);\n          if (!idSet.size) {\n            ctx.idMap.delete(element);\n          }\n        }\n      }\n    }\n\n    /**\n     * Moves an element before another element within the same parent.\n     * Uses the proposed `moveBefore` API if available (and working), otherwise falls back to `insertBefore`.\n     * This is essentialy a forward-compat wrapper.\n     *\n     * @param {Element} parentNode - The parent node containing the after element.\n     * @param {Node} element - The element to be moved.\n     * @param {Node | null} after - The reference node to insert `element` before.\n     *                              If `null`, `element` is appended as the last child.\n     */\n    function moveBefore(parentNode, element, after) {\n      // @ts-ignore - use proposed moveBefore feature\n      if (parentNode.moveBefore) {\n        try {\n          // @ts-ignore - use proposed moveBefore feature\n          parentNode.moveBefore(element, after);\n        } catch (e) {\n          // fall back to insertBefore as some browsers may fail on moveBefore when trying to move Dom disconnected nodes to pantry\n          parentNode.insertBefore(element, after);\n        }\n      } else {\n        parentNode.insertBefore(element, after);\n      }\n    }\n\n    return morphChildren;\n  })();\n\n  //=============================================================================\n  // Single Node Morphing Code\n  //=============================================================================\n  const morphNode = (function () {\n    /**\n     * @param {Node} oldNode root node to merge content into\n     * @param {Node} newContent new content to merge\n     * @param {MorphContext} ctx the merge context\n     * @returns {Node | null} the element that ended up in the DOM\n     */\n    function morphNode(oldNode, newContent, ctx) {\n      if (ctx.ignoreActive && oldNode === document.activeElement) {\n        // don't morph focused element\n        return null;\n      }\n\n      if (ctx.callbacks.beforeNodeMorphed(oldNode, newContent) === false) {\n        return oldNode;\n      }\n\n      if (oldNode instanceof HTMLHeadElement && ctx.head.ignore) ; else if (\n        oldNode instanceof HTMLHeadElement &&\n        ctx.head.style !== \"morph\"\n      ) {\n        // ok to cast: if newContent wasn't also a <head>, it would've got caught in the `!isSoftMatch` branch above\n        handleHeadElement(\n          oldNode,\n          /** @type {HTMLHeadElement} */ (newContent),\n          ctx,\n        );\n      } else {\n        morphAttributes(oldNode, newContent, ctx);\n        if (!ignoreValueOfActiveElement(oldNode, ctx)) {\n          // @ts-ignore newContent can be a node here because .firstChild will be null\n          morphChildren(ctx, oldNode, newContent);\n        }\n      }\n      ctx.callbacks.afterNodeMorphed(oldNode, newContent);\n      return oldNode;\n    }\n\n    /**\n     * syncs the oldNode to the newNode, copying over all attributes and\n     * inner element state from the newNode to the oldNode\n     *\n     * @param {Node} oldNode the node to copy attributes & state to\n     * @param {Node} newNode the node to copy attributes & state from\n     * @param {MorphContext} ctx the merge context\n     */\n    function morphAttributes(oldNode, newNode, ctx) {\n      let type = newNode.nodeType;\n\n      // if is an element type, sync the attributes from the\n      // new node into the new node\n      if (type === 1 /* element type */) {\n        const oldElt = /** @type {Element} */ (oldNode);\n        const newElt = /** @type {Element} */ (newNode);\n\n        const oldAttributes = oldElt.attributes;\n        const newAttributes = newElt.attributes;\n        for (const newAttribute of newAttributes) {\n          if (ignoreAttribute(newAttribute.name, oldElt, \"update\", ctx)) {\n            continue;\n          }\n          if (oldElt.getAttribute(newAttribute.name) !== newAttribute.value) {\n            oldElt.setAttribute(newAttribute.name, newAttribute.value);\n          }\n        }\n        // iterate backwards to avoid skipping over items when a delete occurs\n        for (let i = oldAttributes.length - 1; 0 <= i; i--) {\n          const oldAttribute = oldAttributes[i];\n\n          // toAttributes is a live NamedNodeMap, so iteration+mutation is unsafe\n          // e.g. custom element attribute callbacks can remove other attributes\n          if (!oldAttribute) continue;\n\n          if (!newElt.hasAttribute(oldAttribute.name)) {\n            if (ignoreAttribute(oldAttribute.name, oldElt, \"remove\", ctx)) {\n              continue;\n            }\n            oldElt.removeAttribute(oldAttribute.name);\n          }\n        }\n\n        if (!ignoreValueOfActiveElement(oldElt, ctx)) {\n          syncInputValue(oldElt, newElt, ctx);\n        }\n      }\n\n      // sync text nodes\n      if (type === 8 /* comment */ || type === 3 /* text */) {\n        if (oldNode.nodeValue !== newNode.nodeValue) {\n          oldNode.nodeValue = newNode.nodeValue;\n        }\n      }\n    }\n\n    /**\n     * NB: many bothans died to bring us information:\n     *\n     *  https://github.com/patrick-steele-idem/morphdom/blob/master/src/specialElHandlers.js\n     *  https://github.com/choojs/nanomorph/blob/master/lib/morph.jsL113\n     *\n     * @param {Element} oldElement the element to sync the input value to\n     * @param {Element} newElement the element to sync the input value from\n     * @param {MorphContext} ctx the merge context\n     */\n    function syncInputValue(oldElement, newElement, ctx) {\n      if (\n        oldElement instanceof HTMLInputElement &&\n        newElement instanceof HTMLInputElement &&\n        newElement.type !== \"file\"\n      ) {\n        let newValue = newElement.value;\n        let oldValue = oldElement.value;\n\n        // sync boolean attributes\n        syncBooleanAttribute(oldElement, newElement, \"checked\", ctx);\n        syncBooleanAttribute(oldElement, newElement, \"disabled\", ctx);\n\n        if (!newElement.hasAttribute(\"value\")) {\n          if (!ignoreAttribute(\"value\", oldElement, \"remove\", ctx)) {\n            oldElement.value = \"\";\n            oldElement.removeAttribute(\"value\");\n          }\n        } else if (oldValue !== newValue) {\n          if (!ignoreAttribute(\"value\", oldElement, \"update\", ctx)) {\n            oldElement.setAttribute(\"value\", newValue);\n            oldElement.value = newValue;\n          }\n        }\n        // TODO: QUESTION(1cg): this used to only check `newElement` unlike the other branches -- why?\n        // did I break something?\n      } else if (\n        oldElement instanceof HTMLOptionElement &&\n        newElement instanceof HTMLOptionElement\n      ) {\n        syncBooleanAttribute(oldElement, newElement, \"selected\", ctx);\n      } else if (\n        oldElement instanceof HTMLTextAreaElement &&\n        newElement instanceof HTMLTextAreaElement\n      ) {\n        let newValue = newElement.value;\n        let oldValue = oldElement.value;\n        if (ignoreAttribute(\"value\", oldElement, \"update\", ctx)) {\n          return;\n        }\n        if (newValue !== oldValue) {\n          oldElement.value = newValue;\n        }\n        if (\n          oldElement.firstChild &&\n          oldElement.firstChild.nodeValue !== newValue\n        ) {\n          oldElement.firstChild.nodeValue = newValue;\n        }\n      }\n    }\n\n    /**\n     * @param {Element} oldElement element to write the value to\n     * @param {Element} newElement element to read the value from\n     * @param {string} attributeName the attribute name\n     * @param {MorphContext} ctx the merge context\n     */\n    function syncBooleanAttribute(oldElement, newElement, attributeName, ctx) {\n      // @ts-ignore this function is only used on boolean attrs that are reflected as dom properties\n      const newLiveValue = newElement[attributeName],\n        // @ts-ignore ditto\n        oldLiveValue = oldElement[attributeName];\n      if (newLiveValue !== oldLiveValue) {\n        const ignoreUpdate = ignoreAttribute(\n          attributeName,\n          oldElement,\n          \"update\",\n          ctx,\n        );\n        if (!ignoreUpdate) {\n          // update attribute's associated DOM property\n          // @ts-ignore this function is only used on boolean attrs that are reflected as dom properties\n          oldElement[attributeName] = newElement[attributeName];\n        }\n        if (newLiveValue) {\n          if (!ignoreUpdate) {\n            // https://developer.mozilla.org/en-US/docs/Glossary/Boolean/HTML\n            // this is the correct way to set a boolean attribute to \"true\"\n            oldElement.setAttribute(attributeName, \"\");\n          }\n        } else {\n          if (!ignoreAttribute(attributeName, oldElement, \"remove\", ctx)) {\n            oldElement.removeAttribute(attributeName);\n          }\n        }\n      }\n    }\n\n    /**\n     * @param {string} attr the attribute to be mutated\n     * @param {Element} element the element that is going to be updated\n     * @param {\"update\" | \"remove\"} updateType\n     * @param {MorphContext} ctx the merge context\n     * @returns {boolean} true if the attribute should be ignored, false otherwise\n     */\n    function ignoreAttribute(attr, element, updateType, ctx) {\n      if (\n        attr === \"value\" &&\n        ctx.ignoreActiveValue &&\n        element === document.activeElement\n      ) {\n        return true;\n      }\n      return (\n        ctx.callbacks.beforeAttributeUpdated(attr, element, updateType) ===\n        false\n      );\n    }\n\n    /**\n     * @param {Node} possibleActiveElement\n     * @param {MorphContext} ctx\n     * @returns {boolean}\n     */\n    function ignoreValueOfActiveElement(possibleActiveElement, ctx) {\n      return (\n        !!ctx.ignoreActiveValue &&\n        possibleActiveElement === document.activeElement &&\n        possibleActiveElement !== document.body\n      );\n    }\n\n    return morphNode;\n  })();\n\n  //=============================================================================\n  // Head Management Functions\n  //=============================================================================\n  /**\n   * @param {MorphContext} ctx\n   * @param {Element} oldNode\n   * @param {Element} newNode\n   * @param {function} callback\n   * @returns {Node[] | Promise<Node[]>}\n   */\n  function withHeadBlocking(ctx, oldNode, newNode, callback) {\n    if (ctx.head.block) {\n      const oldHead = oldNode.querySelector(\"head\");\n      const newHead = newNode.querySelector(\"head\");\n      if (oldHead && newHead) {\n        const promises = handleHeadElement(oldHead, newHead, ctx);\n        // when head promises resolve, proceed ignoring the head tag\n        return Promise.all(promises).then(() => {\n          const newCtx = Object.assign(ctx, {\n            head: {\n              block: false,\n              ignore: true,\n            },\n          });\n          return callback(newCtx);\n        });\n      }\n    }\n    // just proceed if we not head blocking\n    return callback(ctx);\n  }\n\n  /**\n   *  The HEAD tag can be handled specially, either w/ a 'merge' or 'append' style\n   *\n   * @param {Element} oldHead\n   * @param {Element} newHead\n   * @param {MorphContext} ctx\n   * @returns {Promise<void>[]}\n   */\n  function handleHeadElement(oldHead, newHead, ctx) {\n    let added = [];\n    let removed = [];\n    let preserved = [];\n    let nodesToAppend = [];\n\n    // put all new head elements into a Map, by their outerHTML\n    let srcToNewHeadNodes = new Map();\n    for (const newHeadChild of newHead.children) {\n      srcToNewHeadNodes.set(newHeadChild.outerHTML, newHeadChild);\n    }\n\n    // for each elt in the current head\n    for (const currentHeadElt of oldHead.children) {\n      // If the current head element is in the map\n      let inNewContent = srcToNewHeadNodes.has(currentHeadElt.outerHTML);\n      let isReAppended = ctx.head.shouldReAppend(currentHeadElt);\n      let isPreserved = ctx.head.shouldPreserve(currentHeadElt);\n      if (inNewContent || isPreserved) {\n        if (isReAppended) {\n          // remove the current version and let the new version replace it and re-execute\n          removed.push(currentHeadElt);\n        } else {\n          // this element already exists and should not be re-appended, so remove it from\n          // the new content map, preserving it in the DOM\n          srcToNewHeadNodes.delete(currentHeadElt.outerHTML);\n          preserved.push(currentHeadElt);\n        }\n      } else {\n        if (ctx.head.style === \"append\") {\n          // we are appending and this existing element is not new content\n          // so if and only if it is marked for re-append do we do anything\n          if (isReAppended) {\n            removed.push(currentHeadElt);\n            nodesToAppend.push(currentHeadElt);\n          }\n        } else {\n          // if this is a merge, we remove this content since it is not in the new head\n          if (ctx.head.shouldRemove(currentHeadElt) !== false) {\n            removed.push(currentHeadElt);\n          }\n        }\n      }\n    }\n\n    // Push the remaining new head elements in the Map into the\n    // nodes to append to the head tag\n    nodesToAppend.push(...srcToNewHeadNodes.values());\n\n    let promises = [];\n    for (const newNode of nodesToAppend) {\n      // TODO: This could theoretically be null, based on type\n      let newElt = /** @type {ChildNode} */ (\n        document.createRange().createContextualFragment(newNode.outerHTML)\n          .firstChild\n      );\n      if (ctx.callbacks.beforeNodeAdded(newElt) !== false) {\n        if (\n          (\"href\" in newElt && newElt.href) ||\n          (\"src\" in newElt && newElt.src)\n        ) {\n          /** @type {(result?: any) => void} */ let resolve;\n          let promise = new Promise(function (_resolve) {\n            resolve = _resolve;\n          });\n          newElt.addEventListener(\"load\", function () {\n            resolve();\n          });\n          promises.push(promise);\n        }\n        oldHead.appendChild(newElt);\n        ctx.callbacks.afterNodeAdded(newElt);\n        added.push(newElt);\n      }\n    }\n\n    // remove all removed elements, after we have appended the new elements to avoid\n    // additional network requests for things like style sheets\n    for (const removedElement of removed) {\n      if (ctx.callbacks.beforeNodeRemoved(removedElement) !== false) {\n        oldHead.removeChild(removedElement);\n        ctx.callbacks.afterNodeRemoved(removedElement);\n      }\n    }\n\n    ctx.head.afterHeadMorphed(oldHead, {\n      added: added,\n      kept: preserved,\n      removed: removed,\n    });\n    return promises;\n  }\n\n  //=============================================================================\n  // Create Morph Context Functions\n  //=============================================================================\n  const createMorphContext = (function () {\n    /**\n     *\n     * @param {Element} oldNode\n     * @param {Element} newContent\n     * @param {Config} config\n     * @returns {MorphContext}\n     */\n    function createMorphContext(oldNode, newContent, config) {\n      const { persistentIds, idMap } = createIdMaps(oldNode, newContent);\n\n      const mergedConfig = mergeDefaults(config);\n      const morphStyle = mergedConfig.morphStyle || \"outerHTML\";\n      if (![\"innerHTML\", \"outerHTML\"].includes(morphStyle)) {\n        throw `Do not understand how to morph style ${morphStyle}`;\n      }\n\n      return {\n        target: oldNode,\n        newContent: newContent,\n        config: mergedConfig,\n        morphStyle: morphStyle,\n        ignoreActive: mergedConfig.ignoreActive,\n        ignoreActiveValue: mergedConfig.ignoreActiveValue,\n        restoreFocus: mergedConfig.restoreFocus,\n        idMap: idMap,\n        persistentIds: persistentIds,\n        pantry: createPantry(),\n        activeElementAndParents: createActiveElementAndParents(oldNode),\n        callbacks: mergedConfig.callbacks,\n        head: mergedConfig.head,\n      };\n    }\n\n    /**\n     * Deep merges the config object and the Idiomorph.defaults object to\n     * produce a final configuration object\n     * @param {Config} config\n     * @returns {ConfigInternal}\n     */\n    function mergeDefaults(config) {\n      let finalConfig = Object.assign({}, defaults);\n\n      // copy top level stuff into final config\n      Object.assign(finalConfig, config);\n\n      // copy callbacks into final config (do this to deep merge the callbacks)\n      finalConfig.callbacks = Object.assign(\n        {},\n        defaults.callbacks,\n        config.callbacks,\n      );\n\n      // copy head config into final config  (do this to deep merge the head)\n      finalConfig.head = Object.assign({}, defaults.head, config.head);\n\n      return finalConfig;\n    }\n\n    /**\n     * @returns {HTMLDivElement}\n     */\n    function createPantry() {\n      const pantry = document.createElement(\"div\");\n      pantry.hidden = true;\n      document.body.insertAdjacentElement(\"afterend\", pantry);\n      return pantry;\n    }\n\n    /**\n     * @param {Element} oldNode\n     * @returns {Element[]}\n     */\n    function createActiveElementAndParents(oldNode) {\n      /** @type {Element[]} */\n      let activeElementAndParents = [];\n      let elt = document.activeElement;\n      if (elt?.tagName !== \"BODY\" && oldNode.contains(elt)) {\n        while (elt) {\n          activeElementAndParents.push(elt);\n          if (elt === oldNode) break;\n          elt = elt.parentElement;\n        }\n      }\n      return activeElementAndParents;\n    }\n\n    /**\n     * Returns all elements with an ID contained within the root element and its descendants\n     *\n     * @param {Element} root\n     * @returns {Element[]}\n     */\n    function findIdElements(root) {\n      let elements = Array.from(root.querySelectorAll(\"[id]\"));\n      // root could be a document fragment which doesn't have `getAttribute`\n      if (root.getAttribute?.(\"id\")) {\n        elements.push(root);\n      }\n      return elements;\n    }\n\n    /**\n     * A bottom-up algorithm that populates a map of Element -> IdSet.\n     * The idSet for a given element is the set of all IDs contained within its subtree.\n     * As an optimzation, we filter these IDs through the given list of persistent IDs,\n     * because we don't need to bother considering IDed elements that won't be in the new content.\n     *\n     * @param {Map<Node, Set<string>>} idMap\n     * @param {Set<string>} persistentIds\n     * @param {Element} root\n     * @param {Element[]} elements\n     */\n    function populateIdMapWithTree(idMap, persistentIds, root, elements) {\n      for (const elt of elements) {\n        // we can pretend id is non-null String, because the .has line will reject it immediately if not\n        const id = /** @type {String} */ (elt.getAttribute(\"id\"));\n        if (persistentIds.has(id)) {\n          /** @type {Element|null} */\n          let current = elt;\n          // walk up the parent hierarchy of that element, adding the id\n          // of element to the parent's id set\n          while (current) {\n            let idSet = idMap.get(current);\n            // if the id set doesn't exist, create it and insert it in the map\n            if (idSet == null) {\n              idSet = new Set();\n              idMap.set(current, idSet);\n            }\n            idSet.add(id);\n\n            if (current === root) break;\n            current = current.parentElement;\n          }\n        }\n      }\n    }\n\n    /**\n     * This function computes a map of nodes to all ids contained within that node (inclusive of the\n     * node).  This map can be used to ask if two nodes have intersecting sets of ids, which allows\n     * for a looser definition of \"matching\" than tradition id matching, and allows child nodes\n     * to contribute to a parent nodes matching.\n     *\n     * @param {Element} oldContent  the old content that will be morphed\n     * @param {Element} newContent  the new content to morph to\n     * @returns {IdSets}\n     */\n    function createIdMaps(oldContent, newContent) {\n      const oldIdElements = findIdElements(oldContent);\n      const newIdElements = findIdElements(newContent);\n\n      const persistentIds = createPersistentIds(oldIdElements, newIdElements);\n\n      /** @type {Map<Node, Set<string>>} */\n      let idMap = new Map();\n      populateIdMapWithTree(idMap, persistentIds, oldContent, oldIdElements);\n\n      /** @ts-ignore - if newContent is a duck-typed parent, pass its single child node as the root to halt upwards iteration */\n      const newRoot = newContent.__idiomorphRoot || newContent;\n      populateIdMapWithTree(idMap, persistentIds, newRoot, newIdElements);\n\n      return { persistentIds, idMap };\n    }\n\n    /**\n     * This function computes the set of ids that persist between the two contents excluding duplicates\n     *\n     * @param {Element[]} oldIdElements\n     * @param {Element[]} newIdElements\n     * @returns {Set<string>}\n     */\n    function createPersistentIds(oldIdElements, newIdElements) {\n      let duplicateIds = new Set();\n\n      /** @type {Map<string, string>} */\n      let oldIdTagNameMap = new Map();\n      for (const { id, tagName } of oldIdElements) {\n        if (oldIdTagNameMap.has(id)) {\n          duplicateIds.add(id);\n        } else {\n          oldIdTagNameMap.set(id, tagName);\n        }\n      }\n\n      let persistentIds = new Set();\n      for (const { id, tagName } of newIdElements) {\n        if (persistentIds.has(id)) {\n          duplicateIds.add(id);\n        } else if (oldIdTagNameMap.get(id) === tagName) {\n          persistentIds.add(id);\n        }\n        // skip if tag types mismatch because its not possible to morph one tag into another\n      }\n\n      for (const id of duplicateIds) {\n        persistentIds.delete(id);\n      }\n      return persistentIds;\n    }\n\n    return createMorphContext;\n  })();\n\n  //=============================================================================\n  // HTML Normalization Functions\n  //=============================================================================\n  const { normalizeElement, normalizeParent } = (function () {\n    /** @type {WeakSet<Node>} */\n    const generatedByIdiomorph = new WeakSet();\n\n    /**\n     *\n     * @param {Element | Document} content\n     * @returns {Element}\n     */\n    function normalizeElement(content) {\n      if (content instanceof Document) {\n        return content.documentElement;\n      } else {\n        return content;\n      }\n    }\n\n    /**\n     *\n     * @param {null | string | Node | HTMLCollection | Node[] | Document & {generatedByIdiomorph:boolean}} newContent\n     * @returns {Element}\n     */\n    function normalizeParent(newContent) {\n      if (newContent == null) {\n        return document.createElement(\"div\"); // dummy parent element\n      } else if (typeof newContent === \"string\") {\n        return normalizeParent(parseContent(newContent));\n      } else if (\n        generatedByIdiomorph.has(/** @type {Element} */ (newContent))\n      ) {\n        // the template tag created by idiomorph parsing can serve as a dummy parent\n        return /** @type {Element} */ (newContent);\n      } else if (newContent instanceof Node) {\n        if (newContent.parentNode) {\n          // we can't use the parent directly because newContent may have siblings\n          // that we don't want in the morph, and reparenting might be expensive (TODO is it?),\n          // so instead we create a fake parent node that only sees a slice of its children.\n          /** @type {Element} */\n          return /** @type {any} */ (new SlicedParentNode(newContent));\n        } else {\n          // a single node is added as a child to a dummy parent\n          const dummyParent = document.createElement(\"div\");\n          dummyParent.append(newContent);\n          return dummyParent;\n        }\n      } else {\n        // all nodes in the array or HTMLElement collection are consolidated under\n        // a single dummy parent element\n        const dummyParent = document.createElement(\"div\");\n        for (const elt of [...newContent]) {\n          dummyParent.append(elt);\n        }\n        return dummyParent;\n      }\n    }\n\n    /**\n     * A fake duck-typed parent element to wrap a single node, without actually reparenting it.\n     * This is useful because the node may have siblings that we don't want in the morph, and it may also be moved\n     * or replaced with one or more elements during the morph. This class effectively allows us a window into\n     * a slice of a node's children.\n     * \"If it walks like a duck, and quacks like a duck, then it must be a duck!\" -- James Whitcomb Riley (1849\u20131916)\n     */\n    class SlicedParentNode {\n      /** @param {Node} node */\n      constructor(node) {\n        this.originalNode = node;\n        this.realParentNode = /** @type {Element} */ (node.parentNode);\n        this.previousSibling = node.previousSibling;\n        this.nextSibling = node.nextSibling;\n      }\n\n      /** @returns {Node[]} */\n      get childNodes() {\n        // return slice of realParent's current childNodes, based on previousSibling and nextSibling\n        const nodes = [];\n        let cursor = this.previousSibling\n          ? this.previousSibling.nextSibling\n          : this.realParentNode.firstChild;\n        while (cursor && cursor != this.nextSibling) {\n          nodes.push(cursor);\n          cursor = cursor.nextSibling;\n        }\n        return nodes;\n      }\n\n      /**\n       * @param {string} selector\n       * @returns {Element[]}\n       */\n      querySelectorAll(selector) {\n        return this.childNodes.reduce((results, node) => {\n          if (node instanceof Element) {\n            if (node.matches(selector)) results.push(node);\n            const nodeList = node.querySelectorAll(selector);\n            for (let i = 0; i < nodeList.length; i++) {\n              results.push(nodeList[i]);\n            }\n          }\n          return results;\n        }, /** @type {Element[]} */ ([]));\n      }\n\n      /**\n       * @param {Node} node\n       * @param {Node} referenceNode\n       * @returns {Node}\n       */\n      insertBefore(node, referenceNode) {\n        return this.realParentNode.insertBefore(node, referenceNode);\n      }\n\n      /**\n       * @param {Node} node\n       * @param {Node} referenceNode\n       * @returns {Node}\n       */\n      moveBefore(node, referenceNode) {\n        // @ts-ignore - use new moveBefore feature\n        return this.realParentNode.moveBefore(node, referenceNode);\n      }\n\n      /**\n       * for later use with populateIdMapWithTree to halt upwards iteration\n       * @returns {Node}\n       */\n      get __idiomorphRoot() {\n        return this.originalNode;\n      }\n    }\n\n    /**\n     *\n     * @param {string} newContent\n     * @returns {Node | null | DocumentFragment}\n     */\n    function parseContent(newContent) {\n      let parser = new DOMParser();\n\n      // remove svgs to avoid false-positive matches on head, etc.\n      let contentWithSvgsRemoved = newContent.replace(\n        /<svg(\\s[^>]*>|>)([\\s\\S]*?)<\\/svg>/gim,\n        \"\",\n      );\n\n      // if the newContent contains a html, head or body tag, we can simply parse it w/o wrapping\n      if (\n        contentWithSvgsRemoved.match(/<\\/html>/) ||\n        contentWithSvgsRemoved.match(/<\\/head>/) ||\n        contentWithSvgsRemoved.match(/<\\/body>/)\n      ) {\n        let content = parser.parseFromString(newContent, \"text/html\");\n        // if it is a full HTML document, return the document itself as the parent container\n        if (contentWithSvgsRemoved.match(/<\\/html>/)) {\n          generatedByIdiomorph.add(content);\n          return content;\n        } else {\n          // otherwise return the html element as the parent container\n          let htmlElement = content.firstChild;\n          if (htmlElement) {\n            generatedByIdiomorph.add(htmlElement);\n          }\n          return htmlElement;\n        }\n      } else {\n        // if it is partial HTML, wrap it in a template tag to provide a parent element and also to help\n        // deal with touchy tags like tr, tbody, etc.\n        let responseDoc = parser.parseFromString(\n          \"<body><template>\" + newContent + \"</template></body>\",\n          \"text/html\",\n        );\n        let content = /** @type {HTMLTemplateElement} */ (\n          responseDoc.body.querySelector(\"template\")\n        ).content;\n        generatedByIdiomorph.add(content);\n        return content;\n      }\n    }\n\n    return { normalizeElement, normalizeParent };\n  })();\n\n  //=============================================================================\n  // This is what ends up becoming the Idiomorph global object\n  //=============================================================================\n  return {\n    morph,\n    defaults,\n  };\n})();\n\n/**\n * Morph the state of the currentElement based on the attributes and contents of\n * the newElement. Morphing may dispatch turbo:before-morph-element,\n * turbo:before-morph-attribute, and turbo:morph-element events.\n *\n * @param currentElement Element destination of morphing changes\n * @param newElement Element source of morphing changes\n */\nfunction morphElements(currentElement, newElement, { callbacks, ...options } = {}) {\n  Idiomorph.morph(currentElement, newElement, {\n    ...options,\n    callbacks: new DefaultIdiomorphCallbacks(callbacks)\n  });\n}\n\n/**\n * Morph the child elements of the currentElement based on the child elements of\n * the newElement. Morphing children may dispatch turbo:before-morph-element,\n * turbo:before-morph-attribute, and turbo:morph-element events.\n *\n * @param currentElement Element destination of morphing children changes\n * @param newElement Element source of morphing children changes\n */\nfunction morphChildren(currentElement, newElement, options = {}) {\n  morphElements(currentElement, newElement.childNodes, {\n    ...options,\n    morphStyle: \"innerHTML\"\n  });\n}\n\nfunction shouldRefreshFrameWithMorphing(currentFrame, newFrame) {\n  return currentFrame instanceof FrameElement &&\n    currentFrame.shouldReloadWithMorph && (!newFrame || areFramesCompatibleForRefreshing(currentFrame, newFrame)) &&\n    !currentFrame.closest(\"[data-turbo-permanent]\")\n}\n\nfunction areFramesCompatibleForRefreshing(currentFrame, newFrame) {\n  // newFrame cannot yet be an instance of FrameElement because custom\n  // elements don't get initialized until they're attached to the DOM, so\n  // test its Element#nodeName instead\n  return newFrame instanceof Element && newFrame.nodeName === \"TURBO-FRAME\" && currentFrame.id === newFrame.id &&\n  (!newFrame.getAttribute(\"src\") || urlsAreEqual(currentFrame.src, newFrame.getAttribute(\"src\")))\n}\n\nfunction closestFrameReloadableWithMorphing(node) {\n  return node.parentElement.closest(\"turbo-frame[src][refresh=morph]\")\n}\n\nclass DefaultIdiomorphCallbacks {\n  #beforeNodeMorphed\n\n  constructor({ beforeNodeMorphed } = {}) {\n    this.#beforeNodeMorphed = beforeNodeMorphed || (() => true);\n  }\n\n  beforeNodeAdded = (node) => {\n    return !(node.id && node.hasAttribute(\"data-turbo-permanent\") && document.getElementById(node.id))\n  }\n\n  beforeNodeMorphed = (currentElement, newElement) => {\n    if (currentElement instanceof Element) {\n      if (!currentElement.hasAttribute(\"data-turbo-permanent\") && this.#beforeNodeMorphed(currentElement, newElement)) {\n        const event = dispatch(\"turbo:before-morph-element\", {\n          cancelable: true,\n          target: currentElement,\n          detail: { currentElement, newElement }\n        });\n\n        return !event.defaultPrevented\n      } else {\n        return false\n      }\n    }\n  }\n\n  beforeAttributeUpdated = (attributeName, target, mutationType) => {\n    const event = dispatch(\"turbo:before-morph-attribute\", {\n      cancelable: true,\n      target,\n      detail: { attributeName, mutationType }\n    });\n\n    return !event.defaultPrevented\n  }\n\n  beforeNodeRemoved = (node) => {\n    return this.beforeNodeMorphed(node)\n  }\n\n  afterNodeMorphed = (currentElement, newElement) => {\n    if (currentElement instanceof Element) {\n      dispatch(\"turbo:morph-element\", {\n        target: currentElement,\n        detail: { currentElement, newElement }\n      });\n    }\n  }\n}\n\nclass MorphingFrameRenderer extends FrameRenderer {\n  static renderElement(currentElement, newElement) {\n    dispatch(\"turbo:before-frame-morph\", {\n      target: currentElement,\n      detail: { currentElement, newElement }\n    });\n\n    morphChildren(currentElement, newElement, {\n      callbacks: {\n        beforeNodeMorphed: (node, newNode) => {\n          if (\n            shouldRefreshFrameWithMorphing(node, newNode) &&\n              closestFrameReloadableWithMorphing(node) === currentElement\n          ) {\n            node.reload();\n            return false\n          }\n          return true\n        }\n      }\n    });\n  }\n\n  async preservingPermanentElements(callback) {\n    return await callback()\n  }\n}\n\nclass ProgressBar {\n  static animationDuration = 300 /*ms*/\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: 2147483647;\n        transition:\n          width ${ProgressBar.animationDuration}ms ease-out,\n          opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n        transform: translate3d(0, 0, 0);\n      }\n    `\n  }\n\n  hiding = false\n  value = 0\n  visible = false\n\n  constructor() {\n    this.stylesheetElement = this.createStylesheetElement();\n    this.progressElement = this.createProgressElement();\n    this.installStylesheetElement();\n    this.setValue(0);\n  }\n\n  show() {\n    if (!this.visible) {\n      this.visible = true;\n      this.installProgressElement();\n      this.startTrickling();\n    }\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\n  setValue(value) {\n    this.value = value;\n    this.refresh();\n  }\n\n  // Private\n\n  installStylesheetElement() {\n    document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n  }\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\n  fadeProgressElement(callback) {\n    this.progressElement.style.opacity = \"0\";\n    setTimeout(callback, ProgressBar.animationDuration * 1.5);\n  }\n\n  uninstallProgressElement() {\n    if (this.progressElement.parentNode) {\n      document.documentElement.removeChild(this.progressElement);\n    }\n  }\n\n  startTrickling() {\n    if (!this.trickleInterval) {\n      this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n    }\n  }\n\n  stopTrickling() {\n    window.clearInterval(this.trickleInterval);\n    delete this.trickleInterval;\n  }\n\n  trickle = () => {\n    this.setValue(this.value + Math.random() / 100);\n  }\n\n  refresh() {\n    requestAnimationFrame(() => {\n      this.progressElement.style.width = `${10 + this.value * 90}%`;\n    });\n  }\n\n  createStylesheetElement() {\n    const element = document.createElement(\"style\");\n    element.type = \"text/css\";\n    element.textContent = ProgressBar.defaultCSS;\n    const cspNonce = getCspNonce();\n    if (cspNonce) {\n      element.nonce = cspNonce;\n    }\n    return element\n  }\n\n  createProgressElement() {\n    const element = document.createElement(\"div\");\n    element.className = \"turbo-progress-bar\";\n    return element\n  }\n}\n\nclass HeadSnapshot extends Snapshot {\n  detailsByOuterHTML = this.children\n    .filter((element) => !elementIsNoscript(element))\n    .map((element) => elementWithoutNonce(element))\n    .reduce((result, element) => {\n      const { outerHTML } = element;\n      const details =\n        outerHTML in result\n          ? result[outerHTML]\n          : {\n              type: elementType(element),\n              tracked: elementIsTracked(element),\n              elements: []\n            };\n      return {\n        ...result,\n        [outerHTML]: {\n          ...details,\n          elements: [...details.elements, element]\n        }\n      }\n    }, {})\n\n  get trackedElementSignature() {\n    return Object.keys(this.detailsByOuterHTML)\n      .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n      .join(\"\")\n  }\n\n  getScriptElementsNotInSnapshot(snapshot) {\n    return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot)\n  }\n\n  getStylesheetElementsNotInSnapshot(snapshot) {\n    return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot)\n  }\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\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      } else if (elements.length > 1) {\n        return [...result, ...elements.slice(1)]\n      } else {\n        return result\n      }\n    }, [])\n  }\n\n  getMetaValue(name) {\n    const element = this.findMetaElementByName(name);\n    return element ? element.getAttribute(\"content\") : null\n  }\n\n  findMetaElementByName(name) {\n    return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n      const {\n        elements: [element]\n      } = this.detailsByOuterHTML[outerHTML];\n      return elementIsMetaElementWithName(element, name) ? element : result\n    }, undefined | undefined)\n  }\n}\n\nfunction elementType(element) {\n  if (elementIsScript(element)) {\n    return \"script\"\n  } else if (elementIsStylesheet(element)) {\n    return \"stylesheet\"\n  }\n}\n\nfunction elementIsTracked(element) {\n  return element.getAttribute(\"data-turbo-track\") == \"reload\"\n}\n\nfunction elementIsScript(element) {\n  const tagName = element.localName;\n  return tagName == \"script\"\n}\n\nfunction elementIsNoscript(element) {\n  const tagName = element.localName;\n  return tagName == \"noscript\"\n}\n\nfunction elementIsStylesheet(element) {\n  const tagName = element.localName;\n  return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\")\n}\n\nfunction elementIsMetaElementWithName(element, name) {\n  const tagName = element.localName;\n  return tagName == \"meta\" && element.getAttribute(\"name\") == name\n}\n\nfunction elementWithoutNonce(element) {\n  if (element.hasAttribute(\"nonce\")) {\n    element.setAttribute(\"nonce\", \"\");\n  }\n\n  return element\n}\n\nclass PageSnapshot extends Snapshot {\n  static fromHTMLString(html = \"\") {\n    return this.fromDocument(parseHTMLDocument(html))\n  }\n\n  static fromElement(element) {\n    return this.fromDocument(element.ownerDocument)\n  }\n\n  static fromDocument({ documentElement, body, head }) {\n    return new this(documentElement, body, new HeadSnapshot(head))\n  }\n\n  constructor(documentElement, body, headSnapshot) {\n    super(body);\n    this.documentElement = documentElement;\n    this.headSnapshot = headSnapshot;\n  }\n\n  clone() {\n    const clonedElement = this.element.cloneNode(true);\n\n    const selectElements = this.element.querySelectorAll(\"select\");\n    const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n\n    for (const [index, source] of selectElements.entries()) {\n      const clone = clonedSelectElements[index];\n      for (const option of clone.selectedOptions) option.selected = false;\n      for (const option of source.selectedOptions) clone.options[option.index].selected = true;\n    }\n\n    for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n      clonedPasswordInput.value = \"\";\n    }\n\n    for (const clonedNoscriptElement of clonedElement.querySelectorAll(\"noscript\")) {\n      clonedNoscriptElement.remove();\n    }\n\n    return new PageSnapshot(this.documentElement, clonedElement, this.headSnapshot)\n  }\n\n  get lang() {\n    return this.documentElement.getAttribute(\"lang\")\n  }\n\n  get dir() {\n    return this.documentElement.getAttribute(\"dir\")\n  }\n\n  get headElement() {\n    return this.headSnapshot.element\n  }\n\n  get rootLocation() {\n    const root = this.getSetting(\"root\") ?? \"/\";\n    return expandURL(root)\n  }\n\n  get cacheControlValue() {\n    return this.getSetting(\"cache-control\")\n  }\n\n  get isPreviewable() {\n    return this.cacheControlValue != \"no-preview\"\n  }\n\n  get isCacheable() {\n    return this.cacheControlValue != \"no-cache\"\n  }\n\n  get isVisitable() {\n    return this.getSetting(\"visit-control\") != \"reload\"\n  }\n\n  get prefersViewTransitions() {\n    const viewTransitionEnabled = this.getSetting(\"view-transition\") === \"true\" || this.headSnapshot.getMetaValue(\"view-transition\") === \"same-origin\";\n    return viewTransitionEnabled && !window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n  }\n\n  get refreshMethod() {\n    return this.getSetting(\"refresh-method\")\n  }\n\n  get refreshScroll() {\n    return this.getSetting(\"refresh-scroll\")\n  }\n\n  // Private\n\n  getSetting(name) {\n    return this.headSnapshot.getMetaValue(`turbo-${name}`)\n  }\n}\n\nclass ViewTransitioner {\n  #viewTransitionStarted = false\n  #lastOperation = Promise.resolve()\n\n  renderChange(useViewTransition, render) {\n    if (useViewTransition && this.viewTransitionsAvailable && !this.#viewTransitionStarted) {\n      this.#viewTransitionStarted = true;\n      this.#lastOperation = this.#lastOperation.then(async () => {\n        await document.startViewTransition(render).finished;\n      });\n    } else {\n      this.#lastOperation = this.#lastOperation.then(render);\n    }\n\n    return this.#lastOperation\n  }\n\n  get viewTransitionsAvailable() {\n    return document.startViewTransition\n  }\n}\n\nconst defaultOptions = {\n  action: \"advance\",\n  historyChanged: false,\n  visitCachedSnapshot: () => {},\n  willRender: true,\n  updateHistory: true,\n  shouldCacheSnapshot: true,\n  acceptsStreamResponse: false,\n  refresh: {}\n};\n\nconst TimingMetric = {\n  visitStart: \"visitStart\",\n  requestStart: \"requestStart\",\n  requestEnd: \"requestEnd\",\n  visitEnd: \"visitEnd\"\n};\n\nconst VisitState = {\n  initialized: \"initialized\",\n  started: \"started\",\n  canceled: \"canceled\",\n  failed: \"failed\",\n  completed: \"completed\"\n};\n\nconst SystemStatusCode = {\n  networkFailure: 0,\n  timeoutFailure: -1,\n  contentTypeMismatch: -2\n};\n\nconst Direction = {\n  advance: \"forward\",\n  restore: \"back\",\n  replace: \"none\"\n};\n\nclass Visit {\n  identifier = uuid() // Required by turbo-ios\n  timingMetrics = {}\n\n  followedRedirect = false\n  historyChanged = false\n  scrolled = false\n  shouldCacheSnapshot = true\n  acceptsStreamResponse = false\n  snapshotCached = false\n  state = VisitState.initialized\n  viewTransitioner = new ViewTransitioner()\n\n  constructor(delegate, location, restorationIdentifier, options = {}) {\n    this.delegate = delegate;\n    this.location = location;\n    this.restorationIdentifier = restorationIdentifier || uuid();\n\n    const {\n      action,\n      historyChanged,\n      referrer,\n      snapshot,\n      snapshotHTML,\n      response,\n      visitCachedSnapshot,\n      willRender,\n      updateHistory,\n      shouldCacheSnapshot,\n      acceptsStreamResponse,\n      direction,\n      refresh\n    } = {\n      ...defaultOptions,\n      ...options\n    };\n    this.action = action;\n    this.historyChanged = historyChanged;\n    this.referrer = referrer;\n    this.snapshot = snapshot;\n    this.snapshotHTML = snapshotHTML;\n    this.response = response;\n    this.isPageRefresh = this.view.isPageRefresh(this);\n    this.visitCachedSnapshot = visitCachedSnapshot;\n    this.willRender = willRender;\n    this.updateHistory = updateHistory;\n    this.scrolled = !willRender;\n    this.shouldCacheSnapshot = shouldCacheSnapshot;\n    this.acceptsStreamResponse = acceptsStreamResponse;\n    this.direction = direction || Direction[action];\n    this.refresh = refresh;\n  }\n\n  get adapter() {\n    return this.delegate.adapter\n  }\n\n  get view() {\n    return this.delegate.view\n  }\n\n  get history() {\n    return this.delegate.history\n  }\n\n  get restorationData() {\n    return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)\n  }\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\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\n  complete() {\n    if (this.state == VisitState.started) {\n      this.recordTimingMetric(TimingMetric.visitEnd);\n      this.adapter.visitCompleted(this);\n      this.state = VisitState.completed;\n      this.followRedirect();\n\n      if (!this.followedRedirect) {\n        this.delegate.visitCompleted(this);\n      }\n    }\n  }\n\n  fail() {\n    if (this.state == VisitState.started) {\n      this.state = VisitState.failed;\n      this.adapter.visitFailed(this);\n      this.delegate.visitCompleted(this);\n    }\n  }\n\n  changeHistory() {\n    if (!this.historyChanged && this.updateHistory) {\n      const actionForHistory = this.location.href === this.referrer?.href ? \"replace\" : this.action;\n      const method = getHistoryMethodForAction(actionForHistory);\n      this.history.update(method, this.location, this.restorationIdentifier);\n      this.historyChanged = true;\n    }\n  }\n\n  issueRequest() {\n    if (this.hasPreloadedResponse()) {\n      this.simulateRequest();\n    } else if (this.shouldIssueRequest() && !this.request) {\n      this.request = new FetchRequest(this, FetchMethod.get, this.location);\n      this.request.perform();\n    }\n  }\n\n  simulateRequest() {\n    if (this.response) {\n      this.startRequest();\n      this.recordResponse();\n      this.finishRequest();\n    }\n  }\n\n  startRequest() {\n    this.recordTimingMetric(TimingMetric.requestStart);\n    this.adapter.visitRequestStarted(this);\n  }\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      } else {\n        this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n      }\n    }\n  }\n\n  finishRequest() {\n    this.recordTimingMetric(TimingMetric.requestEnd);\n    this.adapter.visitRequestFinished(this);\n  }\n\n  loadResponse() {\n    if (this.response) {\n      const { statusCode, responseHTML } = this.response;\n      this.render(async () => {\n        if (this.shouldCacheSnapshot) this.cacheSnapshot();\n        if (this.view.renderPromise) await this.view.renderPromise;\n\n        if (isSuccessful(statusCode) && responseHTML != null) {\n          const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n          await this.renderPageSnapshot(snapshot, false);\n\n          this.adapter.visitRendered(this);\n          this.complete();\n        } else {\n          await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n          this.adapter.visitRendered(this);\n          this.fail();\n        }\n      });\n    }\n  }\n\n  getCachedSnapshot() {\n    const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n\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\n  getPreloadedSnapshot() {\n    if (this.snapshotHTML) {\n      return PageSnapshot.fromHTMLString(this.snapshotHTML)\n    }\n  }\n\n  hasCachedSnapshot() {\n    return this.getCachedSnapshot() != null\n  }\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.isPageRefresh) {\n          this.adapter.visitRendered(this);\n        } else {\n          if (this.view.renderPromise) await this.view.renderPromise;\n\n          await this.renderPageSnapshot(snapshot, isPreview);\n\n          this.adapter.visitRendered(this);\n          if (!isPreview) {\n            this.complete();\n          }\n        }\n      });\n    }\n  }\n\n  followRedirect() {\n    if (this.redirectedToLocation && !this.followedRedirect && this.response?.redirected) {\n      this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n        action: \"replace\",\n        response: this.response,\n        shouldCacheSnapshot: false,\n        willRender: false\n      });\n      this.followedRedirect = true;\n    }\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request) {\n    if (this.acceptsStreamResponse) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted() {\n    this.startRequest();\n  }\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({\n        statusCode: SystemStatusCode.contentTypeMismatch,\n        redirected\n      });\n    } else {\n      this.redirectedToLocation = response.redirected ? response.location : undefined;\n      this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n    }\n  }\n\n  async requestFailedWithResponse(request, response) {\n    const responseHTML = await response.responseHTML;\n    const { redirected, statusCode } = response;\n    if (responseHTML == undefined) {\n      this.recordResponse({\n        statusCode: SystemStatusCode.contentTypeMismatch,\n        redirected\n      });\n    } else {\n      this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n    }\n  }\n\n  requestErrored(_request, _error) {\n    this.recordResponse({\n      statusCode: SystemStatusCode.networkFailure,\n      redirected: false\n    });\n  }\n\n  requestFinished() {\n    this.finishRequest();\n  }\n\n  // Scrolling\n\n  performScroll() {\n    if (!this.scrolled && !this.view.forceReloaded && !this.view.shouldPreserveScrollPosition(this)) {\n      if (this.action == \"restore\") {\n        this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n      } else {\n        this.scrollToAnchor() || this.view.scrollToTop();\n      }\n\n      this.scrolled = true;\n    }\n  }\n\n  scrollToRestoredPosition() {\n    const { scrollPosition } = this.restorationData;\n    if (scrollPosition) {\n      this.view.scrollToPosition(scrollPosition);\n      return true\n    }\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\n  // Instrumentation\n\n  recordTimingMetric(metric) {\n    this.timingMetrics[metric] = new Date().getTime();\n  }\n\n  getTimingMetrics() {\n    return { ...this.timingMetrics }\n  }\n\n  // Private\n\n  hasPreloadedResponse() {\n    return typeof this.response == \"object\"\n  }\n\n  shouldIssueRequest() {\n    if (this.action == \"restore\") {\n      return !this.hasCachedSnapshot()\n    } else {\n      return this.willRender\n    }\n  }\n\n  cacheSnapshot() {\n    if (!this.snapshotCached) {\n      this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n      this.snapshotCached = true;\n    }\n  }\n\n  async render(callback) {\n    this.cancelRender();\n    await new Promise((resolve) => {\n      this.frame =\n        document.visibilityState === \"hidden\" ? setTimeout(() => resolve(), 0) : requestAnimationFrame(() => resolve());\n    });\n    await callback();\n    delete this.frame;\n  }\n\n  async renderPageSnapshot(snapshot, isPreview) {\n    await this.viewTransitioner.renderChange(this.view.shouldTransitionTo(snapshot), async () => {\n      await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n      this.performScroll();\n    });\n  }\n\n  cancelRender() {\n    if (this.frame) {\n      cancelAnimationFrame(this.frame);\n      delete this.frame;\n    }\n  }\n}\n\nfunction isSuccessful(statusCode) {\n  return statusCode >= 200 && statusCode < 300\n}\n\nclass BrowserAdapter {\n  progressBar = new ProgressBar()\n\n  constructor(session) {\n    this.session = session;\n  }\n\n  visitProposedToLocation(location, options) {\n    if (locationIsVisitable(location, this.navigator.rootLocation)) {\n      this.navigator.startVisit(location, options?.restorationIdentifier || uuid(), options);\n    } else {\n      window.location.href = location.toString();\n    }\n  }\n\n  visitStarted(visit) {\n    this.location = visit.location;\n    this.redirectedToLocation = null;\n\n    visit.loadCachedSnapshot();\n    visit.issueRequest();\n  }\n\n  visitRequestStarted(visit) {\n    this.progressBar.setValue(0);\n    if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n      this.showVisitProgressBarAfterDelay();\n    } else {\n      this.showProgressBar();\n    }\n  }\n\n  visitRequestCompleted(visit) {\n    visit.loadResponse();\n\n    if (visit.response.redirected) {\n      this.redirectedToLocation = visit.redirectedToLocation;\n    }\n  }\n\n  visitRequestFailedWithStatusCode(visit, statusCode) {\n    switch (statusCode) {\n      case SystemStatusCode.networkFailure:\n      case SystemStatusCode.timeoutFailure:\n      case SystemStatusCode.contentTypeMismatch:\n        return this.reload({\n          reason: \"request_failed\",\n          context: {\n            statusCode\n          }\n        })\n      default:\n        return visit.loadResponse()\n    }\n  }\n\n  visitRequestFinished(_visit) {}\n\n  visitCompleted(_visit) {\n    this.progressBar.setValue(1);\n    this.hideVisitProgressBar();\n  }\n\n  pageInvalidated(reason) {\n    this.reload(reason);\n  }\n\n  visitFailed(_visit) {\n    this.progressBar.setValue(1);\n    this.hideVisitProgressBar();\n  }\n\n  visitRendered(_visit) {}\n\n  // Link prefetching\n\n  linkPrefetchingIsEnabledForLocation(location) {\n    return true\n  }\n\n  // Form Submission Delegate\n\n  formSubmissionStarted(_formSubmission) {\n    this.progressBar.setValue(0);\n    this.showFormProgressBarAfterDelay();\n  }\n\n  formSubmissionFinished(_formSubmission) {\n    this.progressBar.setValue(1);\n    this.hideFormProgressBar();\n  }\n\n  // Private\n\n  showVisitProgressBarAfterDelay() {\n    this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n  }\n\n  hideVisitProgressBar() {\n    this.progressBar.hide();\n    if (this.visitProgressBarTimeout != null) {\n      window.clearTimeout(this.visitProgressBarTimeout);\n      delete this.visitProgressBarTimeout;\n    }\n  }\n\n  showFormProgressBarAfterDelay() {\n    if (this.formProgressBarTimeout == null) {\n      this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n    }\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\n  showProgressBar = () => {\n    this.progressBar.show();\n  }\n\n  reload(reason) {\n    dispatch(\"turbo:reload\", { detail: reason });\n\n    window.location.href = (this.redirectedToLocation || this.location)?.toString() || window.location.href;\n  }\n\n  get navigator() {\n    return this.session.navigator\n  }\n}\n\nclass CacheObserver {\n  selector = \"[data-turbo-temporary]\"\n\n  started = false\n\n  start() {\n    if (!this.started) {\n      this.started = true;\n      addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.started = false;\n      removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n    }\n  }\n\n  removeTemporaryElements = (_event) => {\n    for (const element of this.temporaryElements) {\n      element.remove();\n    }\n  }\n\n  get temporaryElements() {\n    return [...document.querySelectorAll(this.selector)]\n  }\n}\n\nclass FrameRedirector {\n  constructor(session, element) {\n    this.session = session;\n    this.element = element;\n    this.linkInterceptor = new LinkInterceptor(this, element);\n    this.formSubmitObserver = new FormSubmitObserver(this, element);\n  }\n\n  start() {\n    this.linkInterceptor.start();\n    this.formSubmitObserver.start();\n  }\n\n  stop() {\n    this.linkInterceptor.stop();\n    this.formSubmitObserver.stop();\n  }\n\n  // Link interceptor delegate\n\n  shouldInterceptLinkClick(element, _location, _event) {\n    return this.#shouldRedirect(element)\n  }\n\n  linkClickIntercepted(element, url, event) {\n    const frame = this.#findFrameElement(element);\n    if (frame) {\n      frame.delegate.linkClickIntercepted(element, url, event);\n    }\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(element, submitter) {\n    return (\n      element.closest(\"turbo-frame\") == null &&\n      this.#shouldSubmit(element, submitter) &&\n      this.#shouldRedirect(element, submitter)\n    )\n  }\n\n  formSubmitted(element, submitter) {\n    const frame = this.#findFrameElement(element, submitter);\n    if (frame) {\n      frame.delegate.formSubmitted(element, submitter);\n    }\n  }\n\n  #shouldSubmit(form, submitter) {\n    const action = getAction$1(form, submitter);\n    const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n    const rootLocation = expandURL(meta?.content ?? \"/\");\n\n    return this.#shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation)\n  }\n\n  #shouldRedirect(element, submitter) {\n    const isNavigatable =\n      element instanceof HTMLFormElement\n        ? this.session.submissionIsNavigatable(element, submitter)\n        : this.session.elementIsNavigatable(element);\n\n    if (isNavigatable) {\n      const frame = this.#findFrameElement(element, submitter);\n      return frame ? frame != element.closest(\"turbo-frame\") : false\n    } else {\n      return false\n    }\n  }\n\n  #findFrameElement(element, submitter) {\n    const id = 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  location\n  restorationIdentifier = uuid()\n  restorationData = {}\n  started = false\n  currentIndex = 0\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      addEventListener(\"popstate\", this.onPopState, false);\n      this.currentIndex = history.state?.turbo?.restorationIndex || 0;\n      this.started = true;\n      this.replace(new URL(window.location.href));\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      removeEventListener(\"popstate\", this.onPopState, false);\n      this.started = false;\n    }\n  }\n\n  push(location, restorationIdentifier) {\n    this.update(history.pushState, location, restorationIdentifier);\n  }\n\n  replace(location, restorationIdentifier) {\n    this.update(history.replaceState, location, restorationIdentifier);\n  }\n\n  update(method, location, restorationIdentifier = uuid()) {\n    if (method === history.pushState) ++this.currentIndex;\n\n    const state = { turbo: { restorationIdentifier, restorationIndex: this.currentIndex } };\n    method.call(history, state, \"\", location.href);\n    this.location = location;\n    this.restorationIdentifier = restorationIdentifier;\n  }\n\n  // Restoration data\n\n  getRestorationDataForIdentifier(restorationIdentifier) {\n    return this.restorationData[restorationIdentifier] || {}\n  }\n\n  updateRestorationData(additionalData) {\n    const { restorationIdentifier } = this;\n    const restorationData = this.restorationData[restorationIdentifier];\n    this.restorationData[restorationIdentifier] = {\n      ...restorationData,\n      ...additionalData\n    };\n  }\n\n  // Scroll restoration\n\n  assumeControlOfScrollRestoration() {\n    if (!this.previousScrollRestoration) {\n      this.previousScrollRestoration = history.scrollRestoration ?? \"auto\";\n      history.scrollRestoration = \"manual\";\n    }\n  }\n\n  relinquishControlOfScrollRestoration() {\n    if (this.previousScrollRestoration) {\n      history.scrollRestoration = this.previousScrollRestoration;\n      delete this.previousScrollRestoration;\n    }\n  }\n\n  // Event handlers\n\n  onPopState = (event) => {\n    const { turbo } = event.state || {};\n    this.location = new URL(window.location.href);\n\n    if (turbo) {\n      const { restorationIdentifier, restorationIndex } = turbo;\n      this.restorationIdentifier = restorationIdentifier;\n      const direction = restorationIndex > this.currentIndex ? \"forward\" : \"back\";\n      this.delegate.historyPoppedToLocationWithRestorationIdentifierAndDirection(this.location, restorationIdentifier, direction);\n      this.currentIndex = restorationIndex;\n    } else {\n      this.currentIndex++;\n      this.delegate.historyPoppedWithEmptyState(this.location);\n    }\n  }\n}\n\nclass LinkPrefetchObserver {\n  started = false\n  #prefetchedLink = null\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (this.started) return\n\n    if (this.eventTarget.readyState === \"loading\") {\n      this.eventTarget.addEventListener(\"DOMContentLoaded\", this.#enable, { once: true });\n    } else {\n      this.#enable();\n    }\n  }\n\n  stop() {\n    if (!this.started) return\n\n    this.eventTarget.removeEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n      capture: true,\n      passive: true\n    });\n    this.eventTarget.removeEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n      capture: true,\n      passive: true\n    });\n\n    this.eventTarget.removeEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n    this.started = false;\n  }\n\n  #enable = () => {\n    this.eventTarget.addEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n      capture: true,\n      passive: true\n    });\n    this.eventTarget.addEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n      capture: true,\n      passive: true\n    });\n\n    this.eventTarget.addEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n    this.started = true;\n  }\n\n  #tryToPrefetchRequest = (event) => {\n    if (getMetaContent(\"turbo-prefetch\") === \"false\") return\n\n    const target = event.target;\n    const isLink = target.matches && target.matches(\"a[href]:not([target^=_]):not([download])\");\n\n    if (isLink && this.#isPrefetchable(target)) {\n      const link = target;\n      const location = getLocationForLink(link);\n\n      if (this.delegate.canPrefetchRequestToLocation(link, location)) {\n        this.#prefetchedLink = link;\n\n        const fetchRequest = new FetchRequest(\n          this,\n          FetchMethod.get,\n          location,\n          new URLSearchParams(),\n          target\n        );\n\n        fetchRequest.fetchOptions.priority = \"low\";\n\n        prefetchCache.putLater(location, fetchRequest, this.#cacheTtl);\n      }\n    }\n  }\n\n  #cancelRequestIfObsolete = (event) => {\n    if (event.target === this.#prefetchedLink) this.#cancelPrefetchRequest();\n  }\n\n  #cancelPrefetchRequest = () => {\n    prefetchCache.clear();\n    this.#prefetchedLink = null;\n  }\n\n  #tryToUsePrefetchedRequest = (event) => {\n    if (event.target.tagName !== \"FORM\" && event.detail.fetchOptions.method === \"GET\") {\n      const cached = prefetchCache.get(event.detail.url);\n\n      if (cached) {\n        // User clicked link, use cache response\n        event.detail.fetchRequest = cached;\n      }\n\n      prefetchCache.clear();\n    }\n  }\n\n  prepareRequest(request) {\n    const link = request.target;\n\n    request.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n\n    const turboFrame = link.closest(\"turbo-frame\");\n    const turboFrameTarget = link.getAttribute(\"data-turbo-frame\") || turboFrame?.getAttribute(\"target\") || turboFrame?.id;\n\n    if (turboFrameTarget && turboFrameTarget !== \"_top\") {\n      request.headers[\"Turbo-Frame\"] = turboFrameTarget;\n    }\n  }\n\n  // Fetch request interface\n\n  requestSucceededWithResponse() {}\n\n  requestStarted(fetchRequest) {}\n\n  requestErrored(fetchRequest) {}\n\n  requestFinished(fetchRequest) {}\n\n  requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n  requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n  get #cacheTtl() {\n    return Number(getMetaContent(\"turbo-prefetch-cache-time\")) || cacheTtl\n  }\n\n  #isPrefetchable(link) {\n    const href = link.getAttribute(\"href\");\n\n    if (!href) return false\n\n    if (unfetchableLink(link)) return false\n    if (linkToTheSamePage(link)) return false\n    if (linkOptsOut(link)) return false\n    if (nonSafeLink(link)) return false\n    if (eventPrevented(link)) return false\n\n    return true\n  }\n}\n\nconst unfetchableLink = (link) => {\n  return link.origin !== document.location.origin || ![\"http:\", \"https:\"].includes(link.protocol) || link.hasAttribute(\"target\")\n};\n\nconst linkToTheSamePage = (link) => {\n  return (link.pathname + link.search === document.location.pathname + document.location.search) || link.href.startsWith(\"#\")\n};\n\nconst linkOptsOut = (link) => {\n  if (link.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n  if (link.getAttribute(\"data-turbo\") === \"false\") return true\n\n  const turboPrefetchParent = findClosestRecursively(link, \"[data-turbo-prefetch]\");\n  if (turboPrefetchParent && turboPrefetchParent.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n\n  return false\n};\n\nconst nonSafeLink = (link) => {\n  const turboMethod = link.getAttribute(\"data-turbo-method\");\n  if (turboMethod && turboMethod.toLowerCase() !== \"get\") return true\n\n  if (isUJS(link)) return true\n  if (link.hasAttribute(\"data-turbo-confirm\")) return true\n  if (link.hasAttribute(\"data-turbo-stream\")) return true\n\n  return false\n};\n\nconst isUJS = (link) => {\n  return link.hasAttribute(\"data-remote\") || link.hasAttribute(\"data-behavior\") || link.hasAttribute(\"data-confirm\") || link.hasAttribute(\"data-method\")\n};\n\nconst eventPrevented = (link) => {\n  const event = dispatch(\"turbo:before-prefetch\", { target: link, cancelable: true });\n  return event.defaultPrevented\n};\n\nclass Navigator {\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  proposeVisit(location, options = {}) {\n    if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n      this.delegate.visitProposedToLocation(location, options);\n    }\n  }\n\n  startVisit(locatable, restorationIdentifier, options = {}) {\n    this.stop();\n    this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, {\n      referrer: this.location,\n      ...options\n    });\n    this.currentVisit.start();\n  }\n\n  submitForm(form, submitter) {\n    this.stop();\n    this.formSubmission = new FormSubmission(this, form, submitter, true);\n\n    this.formSubmission.start();\n  }\n\n  stop() {\n    if (this.formSubmission) {\n      this.formSubmission.stop();\n      delete this.formSubmission;\n    }\n\n    if (this.currentVisit) {\n      this.currentVisit.cancel();\n      delete this.currentVisit;\n    }\n  }\n\n  get adapter() {\n    return this.delegate.adapter\n  }\n\n  get view() {\n    return this.delegate.view\n  }\n\n  get rootLocation() {\n    return this.view.snapshot.rootLocation\n  }\n\n  get history() {\n    return this.delegate.history\n  }\n\n  // Form submission delegate\n\n  formSubmissionStarted(formSubmission) {\n    // Not all adapters implement formSubmissionStarted\n    if (typeof this.adapter.formSubmissionStarted === \"function\") {\n      this.adapter.formSubmissionStarted(formSubmission);\n    }\n  }\n\n  async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n    if (formSubmission == this.formSubmission) {\n      const responseHTML = await fetchResponse.responseHTML;\n      if (responseHTML) {\n        const shouldCacheSnapshot = formSubmission.isSafe;\n        if (!shouldCacheSnapshot) {\n          this.view.clearSnapshotCache();\n        }\n\n        const { statusCode, redirected } = fetchResponse;\n        const action = this.#getActionForFormSubmission(formSubmission, fetchResponse);\n        const visitOptions = {\n          action,\n          shouldCacheSnapshot,\n          response: { statusCode, responseHTML, redirected }\n        };\n        this.proposeVisit(fetchResponse.location, visitOptions);\n      }\n    }\n  }\n\n  async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n    const responseHTML = await fetchResponse.responseHTML;\n\n    if (responseHTML) {\n      const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n      if (fetchResponse.serverError) {\n        await this.view.renderError(snapshot, this.currentVisit);\n      } else {\n        await this.view.renderPage(snapshot, false, true, this.currentVisit);\n      }\n      if (snapshot.refreshScroll !== \"preserve\") {\n        this.view.scrollToTop();\n      }\n      this.view.clearSnapshotCache();\n    }\n  }\n\n  formSubmissionErrored(formSubmission, error) {\n    console.error(error);\n  }\n\n  formSubmissionFinished(formSubmission) {\n    // Not all adapters implement formSubmissionFinished\n    if (typeof this.adapter.formSubmissionFinished === \"function\") {\n      this.adapter.formSubmissionFinished(formSubmission);\n    }\n  }\n\n  // Link prefetching\n\n  linkPrefetchingIsEnabledForLocation(location) {\n    // Not all adapters implement linkPrefetchingIsEnabledForLocation\n    if (typeof this.adapter.linkPrefetchingIsEnabledForLocation === \"function\") {\n      return this.adapter.linkPrefetchingIsEnabledForLocation(location)\n    }\n\n    return true\n  }\n\n  // Visit delegate\n\n  visitStarted(visit) {\n    this.delegate.visitStarted(visit);\n  }\n\n  visitCompleted(visit) {\n    this.delegate.visitCompleted(visit);\n    delete this.currentVisit;\n  }\n\n  // Same-page links are no longer handled with a Visit.\n  // This method is still needed for Turbo Native adapters.\n  locationWithActionIsSamePage(location, action) {\n    return false\n  }\n\n  // Visits\n\n  get location() {\n    return this.history.location\n  }\n\n  get restorationIdentifier() {\n    return this.history.restorationIdentifier\n  }\n\n  #getActionForFormSubmission(formSubmission, fetchResponse) {\n    const { submitter, formElement } = formSubmission;\n    return getVisitAction(submitter, formElement) || this.#getDefaultAction(fetchResponse)\n  }\n\n  #getDefaultAction(fetchResponse) {\n    const sameLocationRedirect = fetchResponse.redirected && fetchResponse.location.href === this.location?.href;\n    return sameLocationRedirect ? \"replace\" : \"advance\"\n  }\n}\n\nconst PageStage = {\n  initial: 0,\n  loading: 1,\n  interactive: 2,\n  complete: 3\n};\n\nclass PageObserver {\n  stage = PageStage.initial\n  started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\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\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\n  interpretReadyState = () => {\n    const { readyState } = this;\n    if (readyState == \"interactive\") {\n      this.pageIsInteractive();\n    } else if (readyState == \"complete\") {\n      this.pageIsComplete();\n    }\n  }\n\n  pageIsInteractive() {\n    if (this.stage == PageStage.loading) {\n      this.stage = PageStage.interactive;\n      this.delegate.pageBecameInteractive();\n    }\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\n  pageWillUnload = () => {\n    this.delegate.pageWillUnload();\n  }\n\n  get readyState() {\n    return document.readyState\n  }\n}\n\nclass ScrollObserver {\n  started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      addEventListener(\"scroll\", this.onScroll, false);\n      this.onScroll();\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      removeEventListener(\"scroll\", this.onScroll, false);\n      this.started = false;\n    }\n  }\n\n  onScroll = () => {\n    this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n  }\n\n  // Private\n\n  updatePosition(position) {\n    this.delegate.scrollPositionChanged(position);\n  }\n}\n\nclass StreamMessageRenderer {\n  render({ fragment }) {\n    Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => {\n      withAutofocusFromFragment(fragment, () => {\n        withPreservedFocus(() => {\n          document.documentElement.appendChild(fragment);\n        });\n      });\n    });\n  }\n\n  // Bardo delegate\n\n  enteringBardo(currentPermanentElement, newPermanentElement) {\n    newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n  }\n\n  leavingBardo() {}\n}\n\nfunction getPermanentElementMapForFragment(fragment) {\n  const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n  const permanentElementMap = {};\n  for (const permanentElementInDocument of permanentElementsInDocument) {\n    const { id } = permanentElementInDocument;\n\n    for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n      const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n\n      if (elementInStream) {\n        permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n      }\n    }\n  }\n\n  return permanentElementMap\n}\n\nasync function withAutofocusFromFragment(fragment, callback) {\n  const generatedID = `turbo-stream-autofocus-${uuid()}`;\n  const turboStreams = fragment.querySelectorAll(\"turbo-stream\");\n  const elementWithAutofocus = firstAutofocusableElementInStreams(turboStreams);\n  let willAutofocusId = null;\n\n  if (elementWithAutofocus) {\n    if (elementWithAutofocus.id) {\n      willAutofocusId = elementWithAutofocus.id;\n    } else {\n      willAutofocusId = generatedID;\n    }\n\n    elementWithAutofocus.id = willAutofocusId;\n  }\n\n  callback();\n  await nextRepaint();\n\n  const hasNoActiveElement = document.activeElement == null || document.activeElement == document.body;\n\n  if (hasNoActiveElement && willAutofocusId) {\n    const elementToAutofocus = document.getElementById(willAutofocusId);\n\n    if (elementIsFocusable(elementToAutofocus)) {\n      elementToAutofocus.focus();\n    }\n    if (elementToAutofocus && elementToAutofocus.id == generatedID) {\n      elementToAutofocus.removeAttribute(\"id\");\n    }\n  }\n}\n\nasync function withPreservedFocus(callback) {\n  const [activeElementBeforeRender, activeElementAfterRender] = await around(callback, () => document.activeElement);\n\n  const restoreFocusTo = activeElementBeforeRender && activeElementBeforeRender.id;\n\n  if (restoreFocusTo) {\n    const elementToFocus = document.getElementById(restoreFocusTo);\n\n    if (elementIsFocusable(elementToFocus) && elementToFocus != activeElementAfterRender) {\n      elementToFocus.focus();\n    }\n  }\n}\n\nfunction firstAutofocusableElementInStreams(nodeListOfStreamElements) {\n  for (const streamElement of nodeListOfStreamElements) {\n    const elementWithAutofocus = queryAutofocusableElement(streamElement.templateElement.content);\n\n    if (elementWithAutofocus) return elementWithAutofocus\n  }\n\n  return null\n}\n\nclass StreamObserver {\n  sources = new Set()\n  #started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.#started) {\n      this.#started = true;\n      addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n    }\n  }\n\n  stop() {\n    if (this.#started) {\n      this.#started = false;\n      removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n    }\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\n  disconnectStreamSource(source) {\n    if (this.streamSourceIsConnected(source)) {\n      this.sources.delete(source);\n      source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n    }\n  }\n\n  streamSourceIsConnected(source) {\n    return this.sources.has(source)\n  }\n\n  inspectFetchResponse = (event) => {\n    const response = fetchResponseFromEvent(event);\n    if (response && fetchResponseIsStream(response)) {\n      event.preventDefault();\n      this.receiveMessageResponse(response);\n    }\n  }\n\n  receiveMessageEvent = (event) => {\n    if (this.#started && typeof event.data == \"string\") {\n      this.receiveMessageHTML(event.data);\n    }\n  }\n\n  async receiveMessageResponse(response) {\n    const html = await response.responseHTML;\n    if (html) {\n      this.receiveMessageHTML(html);\n    }\n  }\n\n  receiveMessageHTML(html) {\n    this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n  }\n}\n\nfunction fetchResponseFromEvent(event) {\n  const fetchResponse = event.detail?.fetchResponse;\n  if (fetchResponse instanceof FetchResponse) {\n    return fetchResponse\n  }\n}\n\nfunction fetchResponseIsStream(response) {\n  const contentType = response.contentType ?? \"\";\n  return contentType.startsWith(StreamMessage.contentType)\n}\n\nclass ErrorRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    const { documentElement, body } = document;\n\n    documentElement.replaceChild(newElement, body);\n  }\n\n  async render() {\n    this.replaceHeadAndBody();\n    this.activateScriptElements();\n  }\n\n  replaceHeadAndBody() {\n    const { documentElement, head } = document;\n    documentElement.replaceChild(this.newHead, head);\n    this.renderElement(this.currentElement, this.newElement);\n  }\n\n  activateScriptElements() {\n    for (const replaceableElement of this.scriptElements) {\n      const parentNode = replaceableElement.parentNode;\n      if (parentNode) {\n        const element = activateScriptElement(replaceableElement);\n        parentNode.replaceChild(element, replaceableElement);\n      }\n    }\n  }\n\n  get newHead() {\n    return this.newSnapshot.headSnapshot.element\n  }\n\n  get scriptElements() {\n    return document.documentElement.querySelectorAll(\"script\")\n  }\n}\n\nclass PageRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    if (document.body && newElement instanceof HTMLBodyElement) {\n      document.body.replaceWith(newElement);\n    } else {\n      document.documentElement.appendChild(newElement);\n    }\n  }\n\n  get shouldRender() {\n    return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical\n  }\n\n  get reloadReason() {\n    if (!this.newSnapshot.isVisitable) {\n      return {\n        reason: \"turbo_visit_control_is_reload\"\n      }\n    }\n\n    if (!this.trackedElementsAreIdentical) {\n      return {\n        reason: \"tracked_element_mismatch\"\n      }\n    }\n  }\n\n  async prepareToRender() {\n    this.#setLanguage();\n    await this.mergeHead();\n  }\n\n  async render() {\n    if (this.willRender) {\n      await this.replaceBody();\n    }\n  }\n\n  finishRendering() {\n    super.finishRendering();\n    if (!this.isPreview) {\n      this.focusFirstAutofocusableElement();\n    }\n  }\n\n  get currentHeadSnapshot() {\n    return this.currentSnapshot.headSnapshot\n  }\n\n  get newHeadSnapshot() {\n    return this.newSnapshot.headSnapshot\n  }\n\n  get newElement() {\n    return this.newSnapshot.element\n  }\n\n  #setLanguage() {\n    const { documentElement } = this.currentSnapshot;\n    const { dir, lang } = this.newSnapshot;\n\n    if (lang) {\n      documentElement.setAttribute(\"lang\", lang);\n    } else {\n      documentElement.removeAttribute(\"lang\");\n    }\n    if (dir) {\n      documentElement.setAttribute(\"dir\", dir);\n    } else {\n      documentElement.removeAttribute(\"dir\");\n    }\n  }\n\n  async mergeHead() {\n    const mergedHeadElements = this.mergeProvisionalElements();\n    const newStylesheetElements = this.copyNewHeadStylesheetElements();\n    this.copyNewHeadScriptElements();\n\n    await mergedHeadElements;\n    await newStylesheetElements;\n\n    if (this.willRender) {\n      this.removeUnusedDynamicStylesheetElements();\n    }\n  }\n\n  async replaceBody() {\n    await this.preservingPermanentElements(async () => {\n      this.activateNewBody();\n      await this.assignNewBody();\n    });\n  }\n\n  get trackedElementsAreIdentical() {\n    return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature\n  }\n\n  async copyNewHeadStylesheetElements() {\n    const loadingElements = [];\n\n    for (const element of this.newHeadStylesheetElements) {\n      loadingElements.push(waitForLoad(element));\n\n      document.head.appendChild(element);\n    }\n\n    await Promise.all(loadingElements);\n  }\n\n  copyNewHeadScriptElements() {\n    for (const element of this.newHeadScriptElements) {\n      document.head.appendChild(activateScriptElement(element));\n    }\n  }\n\n  removeUnusedDynamicStylesheetElements() {\n    for (const element of this.unusedDynamicStylesheetElements) {\n      document.head.removeChild(element);\n    }\n  }\n\n  async mergeProvisionalElements() {\n    const newHeadElements = [...this.newHeadProvisionalElements];\n\n    for (const element of this.currentHeadProvisionalElements) {\n      if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n        document.head.removeChild(element);\n      }\n    }\n\n    for (const element of newHeadElements) {\n      document.head.appendChild(element);\n    }\n  }\n\n  isCurrentElementInElementList(element, elementList) {\n    for (const [index, newElement] of elementList.entries()) {\n      // if title element...\n      if (element.tagName == \"TITLE\") {\n        if (newElement.tagName != \"TITLE\") {\n          continue\n        }\n        if (element.innerHTML == newElement.innerHTML) {\n          elementList.splice(index, 1);\n          return true\n        }\n      }\n\n      // if any other element...\n      if (newElement.isEqualNode(element)) {\n        elementList.splice(index, 1);\n        return true\n      }\n    }\n\n    return false\n  }\n\n  removeCurrentHeadProvisionalElements() {\n    for (const element of this.currentHeadProvisionalElements) {\n      document.head.removeChild(element);\n    }\n  }\n\n  copyNewHeadProvisionalElements() {\n    for (const element of this.newHeadProvisionalElements) {\n      document.head.appendChild(element);\n    }\n  }\n\n  activateNewBody() {\n    document.adoptNode(this.newElement);\n    this.removeNoscriptElements();\n    this.activateNewBodyScriptElements();\n  }\n\n  removeNoscriptElements() {\n    for (const noscriptElement of this.newElement.querySelectorAll(\"noscript\")) {\n      noscriptElement.remove();\n    }\n  }\n\n  activateNewBodyScriptElements() {\n    for (const inertScriptElement of this.newBodyScriptElements) {\n      const activatedScriptElement = activateScriptElement(inertScriptElement);\n      inertScriptElement.replaceWith(activatedScriptElement);\n    }\n  }\n\n  async assignNewBody() {\n    await this.renderElement(this.currentElement, this.newElement);\n  }\n\n  get unusedDynamicStylesheetElements() {\n    return this.oldHeadStylesheetElements.filter((element) => {\n      return element.getAttribute(\"data-turbo-track\") === \"dynamic\"\n    })\n  }\n\n  get oldHeadStylesheetElements() {\n    return this.currentHeadSnapshot.getStylesheetElementsNotInSnapshot(this.newHeadSnapshot)\n  }\n\n  get newHeadStylesheetElements() {\n    return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot)\n  }\n\n  get newHeadScriptElements() {\n    return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot)\n  }\n\n  get currentHeadProvisionalElements() {\n    return this.currentHeadSnapshot.provisionalElements\n  }\n\n  get newHeadProvisionalElements() {\n    return this.newHeadSnapshot.provisionalElements\n  }\n\n  get newBodyScriptElements() {\n    return this.newElement.querySelectorAll(\"script\")\n  }\n}\n\nclass MorphingPageRenderer extends PageRenderer {\n  static renderElement(currentElement, newElement) {\n    morphElements(currentElement, newElement, {\n      callbacks: {\n        beforeNodeMorphed: (node, newNode) => {\n          if (\n            shouldRefreshFrameWithMorphing(node, newNode) &&\n              !closestFrameReloadableWithMorphing(node)\n          ) {\n            node.reload();\n            return false\n          }\n          return true\n        }\n      }\n    });\n\n    dispatch(\"turbo:morph\", { detail: { currentElement, newElement } });\n  }\n\n  async preservingPermanentElements(callback) {\n    return await callback()\n  }\n\n  get renderMethod() {\n    return \"morph\"\n  }\n\n  get shouldAutofocus() {\n    return false\n  }\n}\n\nclass SnapshotCache extends LRUCache {\n  constructor(size) {\n    super(size, toCacheKey);\n  }\n\n  get snapshots() {\n    return this.entries\n  }\n}\n\nclass PageView extends View {\n  snapshotCache = new SnapshotCache(10)\n  lastRenderedLocation = new URL(location.href)\n  forceReloaded = false\n\n  shouldTransitionTo(newSnapshot) {\n    return this.snapshot.prefersViewTransitions && newSnapshot.prefersViewTransitions\n  }\n\n  renderPage(snapshot, isPreview = false, willRender = true, visit) {\n    const shouldMorphPage = this.isPageRefresh(visit) && (visit?.refresh?.method || this.snapshot.refreshMethod) === \"morph\";\n    const rendererClass = shouldMorphPage ? MorphingPageRenderer : PageRenderer;\n\n    const renderer = new rendererClass(this.snapshot, snapshot, isPreview, willRender);\n\n    if (!renderer.shouldRender) {\n      this.forceReloaded = true;\n    } else {\n      visit?.changeHistory();\n    }\n\n    return this.render(renderer)\n  }\n\n  renderError(snapshot, visit) {\n    visit?.changeHistory();\n    const renderer = new ErrorRenderer(this.snapshot, snapshot, false);\n    return this.render(renderer)\n  }\n\n  clearSnapshotCache() {\n    this.snapshotCache.clear();\n  }\n\n  async cacheSnapshot(snapshot = this.snapshot) {\n    if (snapshot.isCacheable) {\n      this.delegate.viewWillCacheSnapshot();\n      const { lastRenderedLocation: location } = this;\n      await nextEventLoopTick();\n      const cachedSnapshot = snapshot.clone();\n      this.snapshotCache.put(location, cachedSnapshot);\n      return cachedSnapshot\n    }\n  }\n\n  getCachedSnapshotForLocation(location) {\n    return this.snapshotCache.get(location)\n  }\n\n  isPageRefresh(visit) {\n    return !visit || (this.lastRenderedLocation.pathname === visit.location.pathname && visit.action === \"replace\")\n  }\n\n  shouldPreserveScrollPosition(visit) {\n    return this.isPageRefresh(visit) && (visit?.refresh?.scroll || this.snapshot.refreshScroll) === \"preserve\"\n  }\n\n  get snapshot() {\n    return PageSnapshot.fromElement(this.element)\n  }\n}\n\nclass Preloader {\n  selector = \"a[data-turbo-preload]\"\n\n  constructor(delegate, snapshotCache) {\n    this.delegate = delegate;\n    this.snapshotCache = snapshotCache;\n  }\n\n  start() {\n    if (document.readyState === \"loading\") {\n      document.addEventListener(\"DOMContentLoaded\", this.#preloadAll);\n    } else {\n      this.preloadOnLoadLinksForView(document.body);\n    }\n  }\n\n  stop() {\n    document.removeEventListener(\"DOMContentLoaded\", this.#preloadAll);\n  }\n\n  preloadOnLoadLinksForView(element) {\n    for (const link of element.querySelectorAll(this.selector)) {\n      if (this.delegate.shouldPreloadLink(link)) {\n        this.preloadURL(link);\n      }\n    }\n  }\n\n  async preloadURL(link) {\n    const location = new URL(link.href);\n\n    if (this.snapshotCache.has(location)) {\n      return\n    }\n\n    const fetchRequest = new FetchRequest(this, FetchMethod.get, location, new URLSearchParams(), link);\n    await fetchRequest.perform();\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(fetchRequest) {\n    fetchRequest.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n  }\n\n  async requestSucceededWithResponse(fetchRequest, fetchResponse) {\n    try {\n      const responseHTML = await fetchResponse.responseHTML;\n      const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n\n      this.snapshotCache.put(fetchRequest.url, snapshot);\n    } catch (_) {\n      // If we cannot preload that is ok!\n    }\n  }\n\n  requestStarted(fetchRequest) {}\n\n  requestErrored(fetchRequest) {}\n\n  requestFinished(fetchRequest) {}\n\n  requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n  requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n  #preloadAll = () => {\n    this.preloadOnLoadLinksForView(document.body);\n  }\n}\n\nclass Cache {\n  constructor(session) {\n    this.session = session;\n  }\n\n  clear() {\n    this.session.clearCache();\n  }\n\n  resetCacheControl() {\n    this.#setCacheControl(\"\");\n  }\n\n  exemptPageFromCache() {\n    this.#setCacheControl(\"no-cache\");\n  }\n\n  exemptPageFromPreview() {\n    this.#setCacheControl(\"no-preview\");\n  }\n\n  #setCacheControl(value) {\n    setMetaContent(\"turbo-cache-control\", value);\n  }\n}\n\nclass Session {\n  navigator = new Navigator(this)\n  history = new History(this)\n  view = new PageView(this, document.documentElement)\n  adapter = new BrowserAdapter(this)\n\n  pageObserver = new PageObserver(this)\n  cacheObserver = new CacheObserver()\n  linkPrefetchObserver = new LinkPrefetchObserver(this, document)\n  linkClickObserver = new LinkClickObserver(this, window)\n  formSubmitObserver = new FormSubmitObserver(this, document)\n  scrollObserver = new ScrollObserver(this)\n  streamObserver = new StreamObserver(this)\n  formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement)\n  frameRedirector = new FrameRedirector(this, document.documentElement)\n  streamMessageRenderer = new StreamMessageRenderer()\n  cache = new Cache(this)\n\n  enabled = true\n  started = false\n  #pageRefreshDebouncePeriod = 150\n\n  constructor(recentRequests) {\n    this.recentRequests = recentRequests;\n    this.preloader = new Preloader(this, this.view.snapshotCache);\n    this.debouncedRefresh = this.refresh;\n    this.pageRefreshDebouncePeriod = this.pageRefreshDebouncePeriod;\n  }\n\n  start() {\n    if (!this.started) {\n      this.pageObserver.start();\n      this.cacheObserver.start();\n      this.linkPrefetchObserver.start();\n      this.formLinkClickObserver.start();\n      this.linkClickObserver.start();\n      this.formSubmitObserver.start();\n      this.scrollObserver.start();\n      this.streamObserver.start();\n      this.frameRedirector.start();\n      this.history.start();\n      this.preloader.start();\n      this.started = true;\n      this.enabled = true;\n    }\n  }\n\n  disable() {\n    this.enabled = false;\n  }\n\n  stop() {\n    if (this.started) {\n      this.pageObserver.stop();\n      this.cacheObserver.stop();\n      this.linkPrefetchObserver.stop();\n      this.formLinkClickObserver.stop();\n      this.linkClickObserver.stop();\n      this.formSubmitObserver.stop();\n      this.scrollObserver.stop();\n      this.streamObserver.stop();\n      this.frameRedirector.stop();\n      this.history.stop();\n      this.preloader.stop();\n      this.started = false;\n    }\n  }\n\n  registerAdapter(adapter) {\n    this.adapter = adapter;\n  }\n\n  visit(location, options = {}) {\n    const frameElement = options.frame ? document.getElementById(options.frame) : null;\n\n    if (frameElement instanceof FrameElement) {\n      const action = options.action || getVisitAction(frameElement);\n\n      frameElement.delegate.proposeVisitIfNavigatedWithAction(frameElement, action);\n      frameElement.src = location.toString();\n    } else {\n      this.navigator.proposeVisit(expandURL(location), options);\n    }\n  }\n\n  refresh(url, options = {}) {\n    options = typeof options === \"string\" ? { requestId: options } : options;\n\n    const { method, requestId, scroll } = options;\n    const isRecentRequest = requestId && this.recentRequests.has(requestId);\n    const isCurrentUrl = url === document.baseURI;\n    if (!isRecentRequest && !this.navigator.currentVisit && isCurrentUrl) {\n      this.visit(url, { action: \"replace\", shouldCacheSnapshot: false, refresh: { method, scroll } });\n    }\n  }\n\n  connectStreamSource(source) {\n    this.streamObserver.connectStreamSource(source);\n  }\n\n  disconnectStreamSource(source) {\n    this.streamObserver.disconnectStreamSource(source);\n  }\n\n  renderStreamMessage(message) {\n    this.streamMessageRenderer.render(StreamMessage.wrap(message));\n  }\n\n  clearCache() {\n    this.view.clearSnapshotCache();\n  }\n\n  setProgressBarDelay(delay) {\n    console.warn(\n      \"Please replace `session.setProgressBarDelay(delay)` with `session.progressBarDelay = delay`. The function is deprecated and will be removed in a future version of Turbo.`\"\n    );\n\n    this.progressBarDelay = delay;\n  }\n\n  set progressBarDelay(delay) {\n    config.drive.progressBarDelay = delay;\n  }\n\n  get progressBarDelay() {\n    return config.drive.progressBarDelay\n  }\n\n  set drive(value) {\n    config.drive.enabled = value;\n  }\n\n  get drive() {\n    return config.drive.enabled\n  }\n\n  set formMode(value) {\n    config.forms.mode = value;\n  }\n\n  get formMode() {\n    return config.forms.mode\n  }\n\n  get location() {\n    return this.history.location\n  }\n\n  get restorationIdentifier() {\n    return this.history.restorationIdentifier\n  }\n\n  get pageRefreshDebouncePeriod() {\n    return this.#pageRefreshDebouncePeriod\n  }\n\n  set pageRefreshDebouncePeriod(value) {\n    this.refresh = debounce(this.debouncedRefresh.bind(this), value);\n    this.#pageRefreshDebouncePeriod = value;\n  }\n\n  // Preloader delegate\n\n  shouldPreloadLink(element) {\n    const isUnsafe = element.hasAttribute(\"data-turbo-method\");\n    const isStream = element.hasAttribute(\"data-turbo-stream\");\n    const frameTarget = element.getAttribute(\"data-turbo-frame\");\n    const frame = frameTarget == \"_top\" ?\n      null :\n      document.getElementById(frameTarget) || findClosestRecursively(element, \"turbo-frame:not([disabled])\");\n\n    if (isUnsafe || isStream || frame instanceof FrameElement) {\n      return false\n    } else {\n      const location = new URL(element.href);\n\n      return this.elementIsNavigatable(element) && locationIsVisitable(location, this.snapshot.rootLocation)\n    }\n  }\n\n  // History delegate\n\n  historyPoppedToLocationWithRestorationIdentifierAndDirection(location, restorationIdentifier, direction) {\n    if (this.enabled) {\n      this.navigator.startVisit(location, restorationIdentifier, {\n        action: \"restore\",\n        historyChanged: true,\n        direction\n      });\n    } else {\n      this.adapter.pageInvalidated({\n        reason: \"turbo_disabled\"\n      });\n    }\n  }\n\n  historyPoppedWithEmptyState(location) {\n    this.history.replace(location);\n    this.view.lastRenderedLocation = location;\n    this.view.cacheSnapshot();\n  }\n\n  // Scroll observer delegate\n\n  scrollPositionChanged(position) {\n    this.history.updateRestorationData({ scrollPosition: position });\n  }\n\n  // Form click observer delegate\n\n  willSubmitFormLinkToLocation(link, location) {\n    return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation)\n  }\n\n  submittedFormLinkToLocation() {}\n\n  // Link hover observer delegate\n\n  canPrefetchRequestToLocation(link, location) {\n    return (\n      this.elementIsNavigatable(link) &&\n      locationIsVisitable(location, this.snapshot.rootLocation) &&\n      this.navigator.linkPrefetchingIsEnabledForLocation(location)\n    )\n  }\n\n  // Link click observer delegate\n\n  willFollowLinkToLocation(link, location, event) {\n    return (\n      this.elementIsNavigatable(link) &&\n      locationIsVisitable(location, this.snapshot.rootLocation) &&\n      this.applicationAllowsFollowingLinkToLocation(link, location, event)\n    )\n  }\n\n  followedLinkToLocation(link, location) {\n    const action = this.getActionForLink(link);\n    const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n\n    this.visit(location.href, { action, acceptsStreamResponse });\n  }\n\n  // Navigator delegate\n\n  allowsVisitingLocationWithAction(location, action) {\n    return this.applicationAllowsVisitingLocation(location)\n  }\n\n  visitProposedToLocation(location, options) {\n    extendURLWithDeprecatedProperties(location);\n    this.adapter.visitProposedToLocation(location, options);\n  }\n\n  // Visit delegate\n\n  visitStarted(visit) {\n    if (!visit.acceptsStreamResponse) {\n      markAsBusy(document.documentElement);\n      this.view.markVisitDirection(visit.direction);\n    }\n    extendURLWithDeprecatedProperties(visit.location);\n    this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n  }\n\n  visitCompleted(visit) {\n    this.view.unmarkVisitDirection();\n    clearBusyState(document.documentElement);\n    this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(form, submitter) {\n    const action = getAction$1(form, submitter);\n\n    return (\n      this.submissionIsNavigatable(form, submitter) &&\n      locationIsVisitable(expandURL(action), this.snapshot.rootLocation)\n    )\n  }\n\n  formSubmitted(form, submitter) {\n    this.navigator.submitForm(form, submitter);\n  }\n\n  // Page observer delegate\n\n  pageBecameInteractive() {\n    this.view.lastRenderedLocation = this.location;\n    this.notifyApplicationAfterPageLoad();\n  }\n\n  pageLoaded() {\n    this.history.assumeControlOfScrollRestoration();\n  }\n\n  pageWillUnload() {\n    this.history.relinquishControlOfScrollRestoration();\n  }\n\n  // Stream observer delegate\n\n  receivedMessageFromStream(message) {\n    this.renderStreamMessage(message);\n  }\n\n  // Page view delegate\n\n  viewWillCacheSnapshot() {\n    this.notifyApplicationBeforeCachingSnapshot();\n  }\n\n  allowsImmediateRender({ element }, options) {\n    const event = this.notifyApplicationBeforeRender(element, options);\n    const {\n      defaultPrevented,\n      detail: { render }\n    } = event;\n\n    if (this.view.renderer && render) {\n      this.view.renderer.renderElement = render;\n    }\n\n    return !defaultPrevented\n  }\n\n  viewRenderedSnapshot(_snapshot, _isPreview, renderMethod) {\n    this.view.lastRenderedLocation = this.history.location;\n    this.notifyApplicationAfterRender(renderMethod);\n  }\n\n  preloadOnLoadLinksForView(element) {\n    this.preloader.preloadOnLoadLinksForView(element);\n  }\n\n  viewInvalidated(reason) {\n    this.adapter.pageInvalidated(reason);\n  }\n\n  // Frame element\n\n  frameLoaded(frame) {\n    this.notifyApplicationAfterFrameLoad(frame);\n  }\n\n  frameRendered(fetchResponse, frame) {\n    this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n  }\n\n  // Application events\n\n  applicationAllowsFollowingLinkToLocation(link, location, ev) {\n    const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n    return !event.defaultPrevented\n  }\n\n  applicationAllowsVisitingLocation(location) {\n    const event = this.notifyApplicationBeforeVisitingLocation(location);\n    return !event.defaultPrevented\n  }\n\n  notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n    return dispatch(\"turbo:click\", {\n      target: link,\n      detail: { url: location.href, originalEvent: event },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationBeforeVisitingLocation(location) {\n    return dispatch(\"turbo:before-visit\", {\n      detail: { url: location.href },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationAfterVisitingLocation(location, action) {\n    return dispatch(\"turbo:visit\", { detail: { url: location.href, action } })\n  }\n\n  notifyApplicationBeforeCachingSnapshot() {\n    return dispatch(\"turbo:before-cache\")\n  }\n\n  notifyApplicationBeforeRender(newBody, options) {\n    return dispatch(\"turbo:before-render\", {\n      detail: { newBody, ...options },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationAfterRender(renderMethod) {\n    return dispatch(\"turbo:render\", { detail: { renderMethod } })\n  }\n\n  notifyApplicationAfterPageLoad(timing = {}) {\n    return dispatch(\"turbo:load\", {\n      detail: { url: this.location.href, timing }\n    })\n  }\n\n  notifyApplicationAfterFrameLoad(frame) {\n    return dispatch(\"turbo:frame-load\", { target: frame })\n  }\n\n  notifyApplicationAfterFrameRender(fetchResponse, frame) {\n    return dispatch(\"turbo:frame-render\", {\n      detail: { fetchResponse },\n      target: frame,\n      cancelable: true\n    })\n  }\n\n  // Helpers\n\n  submissionIsNavigatable(form, submitter) {\n    if (config.forms.mode == \"off\") {\n      return false\n    } else {\n      const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n\n      if (config.forms.mode == \"optin\") {\n        return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null\n      } else {\n        return submitterIsNavigatable && this.elementIsNavigatable(form)\n      }\n    }\n  }\n\n  elementIsNavigatable(element) {\n    const container = findClosestRecursively(element, \"[data-turbo]\");\n    const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n\n    // Check if Drive is enabled on the session or we're within a Frame.\n    if (config.drive.enabled || withinFrame) {\n      // Element is navigatable by default, unless `data-turbo=\"false\"`.\n      if (container) {\n        return container.getAttribute(\"data-turbo\") != \"false\"\n      } else {\n        return true\n      }\n    } else {\n      // Element isn't navigatable by default, unless `data-turbo=\"true\"`.\n      if (container) {\n        return container.getAttribute(\"data-turbo\") == \"true\"\n      } else {\n        return false\n      }\n    }\n  }\n\n  // Private\n\n  getActionForLink(link) {\n    return getVisitAction(link) || \"advance\"\n  }\n\n  get snapshot() {\n    return this.view.snapshot\n  }\n}\n\n// Older versions of the Turbo Native adapters referenced the\n// `Location#absoluteURL` property in their implementations of\n// the `Adapter#visitProposedToLocation()` and `#visitStarted()`\n// methods. The Location class has since been removed in favor\n// of the DOM URL API, and accordingly all Adapter methods now\n// receive URL objects.\n//\n// We alias #absoluteURL to #toString() here to avoid crashing\n// older adapters which do not expect URL objects. We should\n// consider removing this support at some point in the future.\n\nfunction extendURLWithDeprecatedProperties(url) {\n  Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\n\nconst deprecatedLocationPropertyDescriptors = {\n  absoluteURL: {\n    get() {\n      return this.toString()\n    }\n  }\n};\n\nconst session = new Session(recentRequests);\nconst { cache, navigator } = session;\n\n/**\n * Starts the main session.\n * This initialises any necessary observers such as those to monitor\n * link interactions.\n */\nfunction start() {\n  session.start();\n}\n\n/**\n * Registers an adapter for the main session.\n *\n * @param adapter Adapter to register\n */\nfunction registerAdapter(adapter) {\n  session.registerAdapter(adapter);\n}\n\n/**\n * Performs an application visit to the given location.\n *\n * @param location Location to visit (a URL or path)\n * @param options Options to apply\n * @param options.action Type of history navigation to apply (\"restore\",\n * \"replace\" or \"advance\")\n * @param options.historyChanged Specifies whether the browser history has\n * already been changed for this visit or not\n * @param options.referrer Specifies the referrer of this visit such that\n * navigations to the same page will not result in a new history entry.\n * @param options.snapshotHTML Cached snapshot to render\n * @param options.response Response of the specified location\n */\nfunction visit(location, options) {\n  session.visit(location, options);\n}\n\n/**\n * Connects a stream source to the main session.\n *\n * @param source Stream source to connect\n */\nfunction connectStreamSource(source) {\n  session.connectStreamSource(source);\n}\n\n/**\n * Disconnects a stream source from the main session.\n *\n * @param source Stream source to disconnect\n */\nfunction disconnectStreamSource(source) {\n  session.disconnectStreamSource(source);\n}\n\n/**\n * Renders a stream message to the main session by appending it to the\n * current document.\n *\n * @param message Message to render\n */\nfunction renderStreamMessage(message) {\n  session.renderStreamMessage(message);\n}\n\n/**\n * Sets the delay after which the progress bar will appear during navigation.\n *\n * The progress bar appears after 500ms by default.\n *\n * Note that this method has no effect when used with the iOS or Android\n * adapters.\n *\n * @param delay Time to delay in milliseconds\n */\nfunction setProgressBarDelay(delay) {\n  console.warn(\n    \"Please replace `Turbo.setProgressBarDelay(delay)` with `Turbo.config.drive.progressBarDelay = delay`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  config.drive.progressBarDelay = delay;\n}\n\nfunction setConfirmMethod(confirmMethod) {\n  console.warn(\n    \"Please replace `Turbo.setConfirmMethod(confirmMethod)` with `Turbo.config.forms.confirm = confirmMethod`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  config.forms.confirm = confirmMethod;\n}\n\nfunction setFormMode(mode) {\n  console.warn(\n    \"Please replace `Turbo.setFormMode(mode)` with `Turbo.config.forms.mode = mode`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  config.forms.mode = mode;\n}\n\n/**\n * Morph the state of the currentBody based on the attributes and contents of\n * the newBody. Morphing body elements may dispatch turbo:morph,\n * turbo:before-morph-element, turbo:before-morph-attribute, and\n * turbo:morph-element events.\n *\n * @param currentBody HTMLBodyElement destination of morphing changes\n * @param newBody HTMLBodyElement source of morphing changes\n */\nfunction morphBodyElements(currentBody, newBody) {\n  MorphingPageRenderer.renderElement(currentBody, newBody);\n}\n\n/**\n * Morph the child elements of the currentFrame based on the child elements of\n * the newFrame. Morphing turbo-frame elements may dispatch turbo:before-frame-morph,\n * turbo:before-morph-element, turbo:before-morph-attribute, and\n * turbo:morph-element events.\n *\n * @param currentFrame FrameElement destination of morphing children changes\n * @param newFrame FrameElement source of morphing children changes\n */\nfunction morphTurboFrameElements(currentFrame, newFrame) {\n  MorphingFrameRenderer.renderElement(currentFrame, newFrame);\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  navigator: navigator,\n  session: session,\n  cache: cache,\n  PageRenderer: PageRenderer,\n  PageSnapshot: PageSnapshot,\n  FrameRenderer: FrameRenderer,\n  fetch: fetchWithTurboHeaders,\n  config: config,\n  start: start,\n  registerAdapter: registerAdapter,\n  visit: visit,\n  connectStreamSource: connectStreamSource,\n  disconnectStreamSource: disconnectStreamSource,\n  renderStreamMessage: renderStreamMessage,\n  setProgressBarDelay: setProgressBarDelay,\n  setConfirmMethod: setConfirmMethod,\n  setFormMode: setFormMode,\n  morphBodyElements: morphBodyElements,\n  morphTurboFrameElements: morphTurboFrameElements,\n  morphChildren: morphChildren,\n  morphElements: morphElements\n});\n\nclass TurboFrameMissingError extends Error {}\n\nclass FrameController {\n  fetchResponseLoaded = (_fetchResponse) => Promise.resolve()\n  #currentFetchRequest = null\n  #resolveVisitPromise = () => {}\n  #connected = false\n  #hasBeenLoaded = false\n  #ignoredAttributes = new Set()\n  #shouldMorphFrame = false\n  action = null\n\n  constructor(element) {\n    this.element = element;\n    this.view = new FrameView(this, this.element);\n    this.appearanceObserver = new AppearanceObserver(this, this.element);\n    this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n    this.linkInterceptor = new LinkInterceptor(this, this.element);\n    this.restorationIdentifier = uuid();\n    this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n  }\n\n  // Frame delegate\n\n  connect() {\n    if (!this.#connected) {\n      this.#connected = true;\n      if (this.loadingStyle == FrameLoadingStyle.lazy) {\n        this.appearanceObserver.start();\n      } else {\n        this.#loadSourceURL();\n      }\n      this.formLinkClickObserver.start();\n      this.linkInterceptor.start();\n      this.formSubmitObserver.start();\n    }\n  }\n\n  disconnect() {\n    if (this.#connected) {\n      this.#connected = false;\n      this.appearanceObserver.stop();\n      this.formLinkClickObserver.stop();\n      this.linkInterceptor.stop();\n      this.formSubmitObserver.stop();\n\n      if (!this.element.hasAttribute(\"recurse\")) {\n        this.#currentFetchRequest?.cancel();\n      }\n    }\n  }\n\n  disabledChanged() {\n    if (this.disabled) {\n      this.#currentFetchRequest?.cancel();\n    } else if (this.loadingStyle == FrameLoadingStyle.eager) {\n      this.#loadSourceURL();\n    }\n  }\n\n  sourceURLChanged() {\n    if (this.#isIgnoringChangesTo(\"src\")) return\n\n    if (!this.sourceURL) {\n      this.#currentFetchRequest?.cancel();\n    }\n\n    if (this.element.isConnected) {\n      this.complete = false;\n    }\n\n    if (this.loadingStyle == FrameLoadingStyle.eager || this.#hasBeenLoaded) {\n      this.#loadSourceURL();\n    }\n  }\n\n  sourceURLReloaded() {\n    const { refresh, src } = this.element;\n\n    this.#shouldMorphFrame = src && refresh === \"morph\";\n\n    this.element.removeAttribute(\"complete\");\n    this.element.src = null;\n    this.element.src = src;\n    return this.element.loaded\n  }\n\n  loadingStyleChanged() {\n    if (this.loadingStyle == FrameLoadingStyle.lazy) {\n      this.appearanceObserver.start();\n    } else {\n      this.appearanceObserver.stop();\n      this.#loadSourceURL();\n    }\n  }\n\n  async #loadSourceURL() {\n    if (this.enabled && this.isActive && !this.complete && this.sourceURL) {\n      this.element.loaded = this.#visit(expandURL(this.sourceURL));\n      this.appearanceObserver.stop();\n      await this.element.loaded;\n      this.#hasBeenLoaded = true;\n    }\n  }\n\n  async loadResponse(fetchResponse) {\n    if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n      this.sourceURL = fetchResponse.response.url;\n    }\n\n    try {\n      const html = await fetchResponse.responseHTML;\n      if (html) {\n        const document = parseHTMLDocument(html);\n        const pageSnapshot = PageSnapshot.fromDocument(document);\n\n        if (pageSnapshot.isVisitable) {\n          await this.#loadFrameResponse(fetchResponse, document);\n        } else {\n          await this.#handleUnvisitableFrameResponse(fetchResponse);\n        }\n      }\n    } finally {\n      this.#shouldMorphFrame = false;\n      this.fetchResponseLoaded = () => Promise.resolve();\n    }\n  }\n\n  // Appearance observer delegate\n\n  elementAppearedInViewport(element) {\n    this.proposeVisitIfNavigatedWithAction(element, getVisitAction(element));\n    this.#loadSourceURL();\n  }\n\n  // Form link click observer delegate\n\n  willSubmitFormLinkToLocation(link) {\n    return this.#shouldInterceptNavigation(link)\n  }\n\n  submittedFormLinkToLocation(link, _location, form) {\n    const frame = this.#findFrameElement(link);\n    if (frame) form.setAttribute(\"data-turbo-frame\", frame.id);\n  }\n\n  // Link interceptor delegate\n\n  shouldInterceptLinkClick(element, _location, _event) {\n    return this.#shouldInterceptNavigation(element)\n  }\n\n  linkClickIntercepted(element, location) {\n    this.#navigateFrame(element, location);\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(element, submitter) {\n    return element.closest(\"turbo-frame\") == this.element && this.#shouldInterceptNavigation(element, submitter)\n  }\n\n  formSubmitted(element, submitter) {\n    if (this.formSubmission) {\n      this.formSubmission.stop();\n    }\n\n    this.formSubmission = new FormSubmission(this, element, submitter);\n\n    const { fetchRequest } = this.formSubmission;\n    const frame = this.#findFrameElement(element, submitter);\n\n    this.prepareRequest(fetchRequest, frame);\n    this.formSubmission.start();\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request, frame = this) {\n    request.headers[\"Turbo-Frame\"] = frame.id;\n\n    if (this.currentNavigationElement?.hasAttribute(\"data-turbo-stream\")) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted(_request) {\n    markAsBusy(this.element);\n  }\n\n  requestPreventedHandlingResponse(_request, _response) {\n    this.#resolveVisitPromise();\n  }\n\n  async requestSucceededWithResponse(request, response) {\n    await this.loadResponse(response);\n    this.#resolveVisitPromise();\n  }\n\n  async requestFailedWithResponse(request, response) {\n    await this.loadResponse(response);\n    this.#resolveVisitPromise();\n  }\n\n  requestErrored(request, error) {\n    console.error(error);\n    this.#resolveVisitPromise();\n  }\n\n  requestFinished(_request) {\n    clearBusyState(this.element);\n  }\n\n  // Form submission delegate\n\n  formSubmissionStarted({ formElement }) {\n    markAsBusy(formElement, this.#findFrameElement(formElement));\n  }\n\n  formSubmissionSucceededWithResponse(formSubmission, response) {\n    const frame = this.#findFrameElement(formSubmission.formElement, formSubmission.submitter);\n\n    frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(formSubmission.submitter, formSubmission.formElement, frame));\n    frame.delegate.loadResponse(response);\n\n    if (!formSubmission.isSafe) {\n      session.clearCache();\n    }\n  }\n\n  formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n    this.element.delegate.loadResponse(fetchResponse);\n    session.clearCache();\n  }\n\n  formSubmissionErrored(formSubmission, error) {\n    console.error(error);\n  }\n\n  formSubmissionFinished({ formElement }) {\n    clearBusyState(formElement, this.#findFrameElement(formElement));\n  }\n\n  // View delegate\n\n  allowsImmediateRender({ element: newFrame }, options) {\n    const event = dispatch(\"turbo:before-frame-render\", {\n      target: this.element,\n      detail: { newFrame, ...options },\n      cancelable: true\n    });\n\n    const {\n      defaultPrevented,\n      detail: { render }\n    } = event;\n\n    if (this.view.renderer && render) {\n      this.view.renderer.renderElement = render;\n    }\n\n    return !defaultPrevented\n  }\n\n  viewRenderedSnapshot(_snapshot, _isPreview, _renderMethod) {}\n\n  preloadOnLoadLinksForView(element) {\n    session.preloadOnLoadLinksForView(element);\n  }\n\n  viewInvalidated() {}\n\n  // Frame renderer delegate\n\n  willRenderFrame(currentElement, _newElement) {\n    this.previousFrameElement = currentElement.cloneNode(true);\n  }\n\n  visitCachedSnapshot = ({ element }) => {\n    const frame = element.querySelector(\"#\" + this.element.id);\n\n    if (frame && this.previousFrameElement) {\n      frame.replaceChildren(...this.previousFrameElement.children);\n    }\n\n    delete this.previousFrameElement;\n  }\n\n  // Private\n\n  async #loadFrameResponse(fetchResponse, document) {\n    const newFrameElement = await this.extractForeignFrameElement(document.body);\n    const rendererClass = this.#shouldMorphFrame ? MorphingFrameRenderer : FrameRenderer;\n\n    if (newFrameElement) {\n      const snapshot = new Snapshot(newFrameElement);\n      const renderer = new rendererClass(this, this.view.snapshot, snapshot, false, false);\n      if (this.view.renderPromise) await this.view.renderPromise;\n      this.changeHistory();\n\n      await this.view.render(renderer);\n      this.complete = true;\n      session.frameRendered(fetchResponse, this.element);\n      session.frameLoaded(this.element);\n      await this.fetchResponseLoaded(fetchResponse);\n    } else if (this.#willHandleFrameMissingFromResponse(fetchResponse)) {\n      this.#handleFrameMissingFromResponse(fetchResponse);\n    }\n  }\n\n  async #visit(url) {\n    const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n\n    this.#currentFetchRequest?.cancel();\n    this.#currentFetchRequest = request;\n\n    return new Promise((resolve) => {\n      this.#resolveVisitPromise = () => {\n        this.#resolveVisitPromise = () => {};\n        this.#currentFetchRequest = null;\n        resolve();\n      };\n      request.perform();\n    })\n  }\n\n  #navigateFrame(element, url, submitter) {\n    const frame = this.#findFrameElement(element, submitter);\n\n    frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(submitter, element, frame));\n\n    this.#withCurrentNavigationElement(element, () => {\n      frame.src = url;\n    });\n  }\n\n  proposeVisitIfNavigatedWithAction(frame, action = null) {\n    this.action = action;\n\n    if (this.action) {\n      const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n      const { visitCachedSnapshot } = frame.delegate;\n\n      frame.delegate.fetchResponseLoaded = async (fetchResponse) => {\n        if (frame.src) {\n          const { statusCode, redirected } = fetchResponse;\n          const responseHTML = await fetchResponse.responseHTML;\n          const response = { statusCode, redirected, responseHTML };\n          const options = {\n            response,\n            visitCachedSnapshot,\n            willRender: false,\n            updateHistory: false,\n            restorationIdentifier: this.restorationIdentifier,\n            snapshot: pageSnapshot\n          };\n\n          if (this.action) options.action = this.action;\n\n          session.visit(frame.src, options);\n        }\n      };\n    }\n  }\n\n  changeHistory() {\n    if (this.action) {\n      const method = getHistoryMethodForAction(this.action);\n      session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n    }\n  }\n\n  async #handleUnvisitableFrameResponse(fetchResponse) {\n    console.warn(\n      `The response (${fetchResponse.statusCode}) from <turbo-frame id=\"${this.element.id}\"> is performing a full page visit due to turbo-visit-control.`\n    );\n\n    await this.#visitResponse(fetchResponse.response);\n  }\n\n  #willHandleFrameMissingFromResponse(fetchResponse) {\n    this.element.setAttribute(\"complete\", \"\");\n\n    const response = fetchResponse.response;\n    const visit = async (url, options) => {\n      if (url instanceof Response) {\n        this.#visitResponse(url);\n      } else {\n        session.visit(url, options);\n      }\n    };\n\n    const event = dispatch(\"turbo:frame-missing\", {\n      target: this.element,\n      detail: { response, visit },\n      cancelable: true\n    });\n\n    return !event.defaultPrevented\n  }\n\n  #handleFrameMissingFromResponse(fetchResponse) {\n    this.view.missing();\n    this.#throwFrameMissingError(fetchResponse);\n  }\n\n  #throwFrameMissingError(fetchResponse) {\n    const message = `The response (${fetchResponse.statusCode}) did not contain the expected <turbo-frame id=\"${this.element.id}\"> and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`;\n    throw new TurboFrameMissingError(message)\n  }\n\n  async #visitResponse(response) {\n    const wrapped = new FetchResponse(response);\n    const responseHTML = await wrapped.responseHTML;\n    const { location, redirected, statusCode } = wrapped;\n\n    return session.visit(location, { response: { redirected, statusCode, responseHTML } })\n  }\n\n  #findFrameElement(element, submitter) {\n    const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n    const target = this.#getFrameElementById(id);\n\n    return target instanceof FrameElement ? target : this.element\n  }\n\n  async extractForeignFrameElement(container) {\n    let element;\n    const id = CSS.escape(this.id);\n\n    try {\n      element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n      if (element) {\n        return element\n      }\n\n      element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n      if (element) {\n        await element.loaded;\n        return await this.extractForeignFrameElement(element)\n      }\n    } catch (error) {\n      console.error(error);\n      return new FrameElement()\n    }\n\n    return null\n  }\n\n  #formActionIsVisitable(form, submitter) {\n    const action = getAction$1(form, submitter);\n\n    return locationIsVisitable(expandURL(action), this.rootLocation)\n  }\n\n  #shouldInterceptNavigation(element, submitter) {\n    const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n\n    if (element instanceof HTMLFormElement && !this.#formActionIsVisitable(element, submitter)) {\n      return false\n    }\n\n    if (!this.enabled || id == \"_top\") {\n      return false\n    }\n\n    if (id) {\n      const frameElement = this.#getFrameElementById(id);\n      if (frameElement) {\n        return !frameElement.disabled\n      } else if (id == \"_parent\") {\n        return false\n      }\n    }\n\n    if (!session.elementIsNavigatable(element)) {\n      return false\n    }\n\n    if (submitter && !session.elementIsNavigatable(submitter)) {\n      return false\n    }\n\n    return true\n  }\n\n  // Computed properties\n\n  get id() {\n    return this.element.id\n  }\n\n  get disabled() {\n    return this.element.disabled\n  }\n\n  get enabled() {\n    return !this.disabled\n  }\n\n  get sourceURL() {\n    if (this.element.src) {\n      return this.element.src\n    }\n  }\n\n  set sourceURL(sourceURL) {\n    this.#ignoringChangesToAttribute(\"src\", () => {\n      this.element.src = sourceURL ?? null;\n    });\n  }\n\n  get loadingStyle() {\n    return this.element.loading\n  }\n\n  get isLoading() {\n    return this.formSubmission !== undefined || this.#resolveVisitPromise() !== undefined\n  }\n\n  get complete() {\n    return this.element.hasAttribute(\"complete\")\n  }\n\n  set complete(value) {\n    if (value) {\n      this.element.setAttribute(\"complete\", \"\");\n    } else {\n      this.element.removeAttribute(\"complete\");\n    }\n  }\n\n  get isActive() {\n    return this.element.isActive && this.#connected\n  }\n\n  get rootLocation() {\n    const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n    const root = meta?.content ?? \"/\";\n    return expandURL(root)\n  }\n\n  #isIgnoringChangesTo(attributeName) {\n    return this.#ignoredAttributes.has(attributeName)\n  }\n\n  #ignoringChangesToAttribute(attributeName, callback) {\n    this.#ignoredAttributes.add(attributeName);\n    callback();\n    this.#ignoredAttributes.delete(attributeName);\n  }\n\n  #withCurrentNavigationElement(element, callback) {\n    this.currentNavigationElement = element;\n    callback();\n    delete this.currentNavigationElement;\n  }\n\n  #getFrameElementById(id) {\n    if (id != null) {\n      const element = id === \"_parent\" ?\n        this.element.parentElement.closest(\"turbo-frame\") :\n        document.getElementById(id);\n      if (element instanceof FrameElement) {\n        return element\n      }\n    }\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\n    if (element instanceof FrameElement) {\n      element.connectedCallback();\n      element.disconnectedCallback();\n      return element\n    }\n  }\n}\n\nconst StreamActions = {\n  after() {\n    this.removeDuplicateTargetSiblings();\n    this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e.nextSibling));\n  },\n\n  append() {\n    this.removeDuplicateTargetChildren();\n    this.targetElements.forEach((e) => e.append(this.templateContent));\n  },\n\n  before() {\n    this.removeDuplicateTargetSiblings();\n    this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e));\n  },\n\n  prepend() {\n    this.removeDuplicateTargetChildren();\n    this.targetElements.forEach((e) => e.prepend(this.templateContent));\n  },\n\n  remove() {\n    this.targetElements.forEach((e) => e.remove());\n  },\n\n  replace() {\n    const method = this.getAttribute(\"method\");\n\n    this.targetElements.forEach((targetElement) => {\n      if (method === \"morph\") {\n        morphElements(targetElement, this.templateContent);\n      } else {\n        targetElement.replaceWith(this.templateContent);\n      }\n    });\n  },\n\n  update() {\n    const method = this.getAttribute(\"method\");\n\n    this.targetElements.forEach((targetElement) => {\n      if (method === \"morph\") {\n        morphChildren(targetElement, this.templateContent);\n      } else {\n        targetElement.innerHTML = \"\";\n        targetElement.append(this.templateContent);\n      }\n    });\n  },\n\n  refresh() {\n    const method = this.getAttribute(\"method\");\n    const requestId = this.requestId;\n    const scroll = this.getAttribute(\"scroll\");\n\n    session.refresh(this.baseURI, { method, requestId, scroll });\n  }\n};\n\n// <turbo-stream action=replace target=id><template>...\n\n/**\n * Renders updates to the page from a stream of messages.\n *\n * Using the `action` attribute, this can be configured one of eight ways:\n *\n * - `after` - inserts the result after the target\n * - `append` - appends the result to the target\n * - `before` - inserts the result before the target\n * - `prepend` - prepends the result to the target\n * - `refresh` - initiates a page refresh\n * - `remove` - removes the target\n * - `replace` - replaces the outer HTML of the target\n * - `update` - replaces the inner HTML of the target\n *\n * @customElement turbo-stream\n * @example\n *   <turbo-stream action=\"append\" target=\"dom_id\">\n *     <template>\n *       Content to append to target designated with the dom_id.\n *     </template>\n *   </turbo-stream>\n */\nclass StreamElement extends HTMLElement {\n  static async renderElement(newElement) {\n    await newElement.performAction();\n  }\n\n  async connectedCallback() {\n    try {\n      await this.render();\n    } catch (error) {\n      console.error(error);\n    } finally {\n      this.disconnect();\n    }\n  }\n\n  async render() {\n    return (this.renderPromise ??= (async () => {\n      const event = this.beforeRenderEvent;\n\n      if (this.dispatchEvent(event)) {\n        await nextRepaint();\n        await event.detail.render(this);\n      }\n    })())\n  }\n\n  disconnect() {\n    try {\n      this.remove();\n      // eslint-disable-next-line no-empty\n    } catch {}\n  }\n\n  /**\n   * Removes duplicate children (by ID)\n   */\n  removeDuplicateTargetChildren() {\n    this.duplicateChildren.forEach((c) => c.remove());\n  }\n\n  /**\n   * Gets the list of duplicate children (i.e. those with the same ID)\n   */\n  get duplicateChildren() {\n    const existingChildren = this.targetElements.flatMap((e) => [...e.children]).filter((c) => !!c.getAttribute(\"id\"));\n    const newChildrenIds = [...(this.templateContent?.children || [])].filter((c) => !!c.getAttribute(\"id\")).map((c) => c.getAttribute(\"id\"));\n\n    return existingChildren.filter((c) => newChildrenIds.includes(c.getAttribute(\"id\")))\n  }\n\n  /**\n  * Removes duplicate siblings (by ID)\n  */\n  removeDuplicateTargetSiblings() {\n    this.duplicateSiblings.forEach((c) => c.remove());\n  }\n\n  /**\n  * Gets the list of duplicate siblings (i.e. those with the same ID)\n  */\n  get duplicateSiblings() {\n    const existingChildren = this.targetElements.flatMap((e) => [...e.parentElement.children]).filter((c) => !!c.id);\n    const newChildrenIds = [...(this.templateContent?.children || [])].filter((c) => !!c.id).map((c) => c.id);\n\n    return existingChildren.filter((c) => newChildrenIds.includes(c.id))\n  }\n\n  /**\n   * Gets the action function to be performed.\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\n  /**\n   * Gets the target elements which the template will be rendered to.\n   */\n  get targetElements() {\n    if (this.target) {\n      return this.targetElementsById\n    } else if (this.targets) {\n      return this.targetElementsByQuery\n    } else {\n      this.#raise(\"target or targets attribute is missing\");\n    }\n  }\n\n  /**\n   * Gets the contents of the main `<template>`.\n   */\n  get templateContent() {\n    return this.templateElement.content.cloneNode(true)\n  }\n\n  /**\n   * Gets the main `<template>` used for rendering\n   */\n  get templateElement() {\n    if (this.firstElementChild === null) {\n      const template = this.ownerDocument.createElement(\"template\");\n      this.appendChild(template);\n      return template\n    } else if (this.firstElementChild instanceof HTMLTemplateElement) {\n      return this.firstElementChild\n    }\n    this.#raise(\"first child element must be a <template> element\");\n  }\n\n  /**\n   * Gets the current action.\n   */\n  get action() {\n    return this.getAttribute(\"action\")\n  }\n\n  /**\n   * Gets the current target (an element ID) to which the result will\n   * be rendered.\n   */\n  get target() {\n    return this.getAttribute(\"target\")\n  }\n\n  /**\n   * Gets the current \"targets\" selector (a CSS selector)\n   */\n  get targets() {\n    return this.getAttribute(\"targets\")\n  }\n\n  /**\n   * Reads the request-id attribute\n   */\n  get requestId() {\n    return this.getAttribute(\"request-id\")\n  }\n\n  #raise(message) {\n    throw new Error(`${this.description}: ${message}`)\n  }\n\n  get description() {\n    return (this.outerHTML.match(/<[^>]+>/) ?? [])[0] ?? \"<turbo-stream>\"\n  }\n\n  get beforeRenderEvent() {\n    return new CustomEvent(\"turbo:before-stream-render\", {\n      bubbles: true,\n      cancelable: true,\n      detail: { newStream: this, render: StreamElement.renderElement }\n    })\n  }\n\n  get targetElementsById() {\n    const element = this.ownerDocument?.getElementById(this.target);\n\n    if (element !== null) {\n      return [element]\n    } else {\n      return []\n    }\n  }\n\n  get targetElementsByQuery() {\n    const elements = this.ownerDocument?.querySelectorAll(this.targets);\n\n    if (elements.length !== 0) {\n      return Array.prototype.slice.call(elements)\n    } else {\n      return []\n    }\n  }\n}\n\nclass StreamSourceElement extends HTMLElement {\n  streamSource = null\n\n  connectedCallback() {\n    this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n\n    connectStreamSource(this.streamSource);\n  }\n\n  disconnectedCallback() {\n    if (this.streamSource) {\n      this.streamSource.close();\n\n      disconnectStreamSource(this.streamSource);\n    }\n  }\n\n  get src() {\n    return this.getAttribute(\"src\") || \"\"\n  }\n}\n\nFrameElement.delegateConstructor = FrameController;\n\nif (customElements.get(\"turbo-frame\") === undefined) {\n  customElements.define(\"turbo-frame\", FrameElement);\n}\n\nif (customElements.get(\"turbo-stream\") === undefined) {\n  customElements.define(\"turbo-stream\", StreamElement);\n}\n\nif (customElements.get(\"turbo-stream-source\") === undefined) {\n  customElements.define(\"turbo-stream-source\", StreamSourceElement);\n}\n\n(() => {\n  const scriptElement = document.currentScript;\n  if (!scriptElement) return\n  if (scriptElement.hasAttribute(\"data-turbo-suppress-warning\")) return\n\n  let element = scriptElement.parentElement;\n  while (element) {\n    if (element == document.body) {\n      return console.warn(\n        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      `,\n        scriptElement.outerHTML\n      )\n    }\n\n    element = element.parentElement;\n  }\n})();\n\nwindow.Turbo = { ...Turbo, StreamActions };\nstart();\n\nexport { FetchEnctype, FetchMethod, FetchRequest, FetchResponse, FrameElement, FrameLoadingStyle, FrameRenderer, PageRenderer, PageSnapshot, StreamActions, StreamElement, StreamSourceElement, cache, config, connectStreamSource, disconnectStreamSource, fetchWithTurboHeaders as fetch, fetchEnctypeFromString, fetchMethodFromString, isSafe, morphBodyElements, morphChildren, morphElements, morphTurboFrameElements, navigator, registerAdapter, renderStreamMessage, session, setConfirmMethod, setFormMode, setProgressBarDelay, start, visit };\n", "export function encodeMethodIntoRequestBody(event) {\n  if (event.target instanceof HTMLFormElement) {\n    const { target: form, detail: { fetchOptions } } = event\n\n    form.addEventListener(\"turbo:submit-start\", ({ detail: { formSubmission: { submitter } } }) => {\n      const body = isBodyInit(fetchOptions.body) ? fetchOptions.body : new URLSearchParams()\n      const method = determineFetchMethod(submitter, body, form)\n\n      if (!/get/i.test(method)) {\n        if (/post/i.test(method)) {\n          body.delete(\"_method\")\n        } else {\n          body.set(\"_method\", method)\n        }\n\n        fetchOptions.method = \"post\"\n      }\n    }, { once: true })\n  }\n}\n\nfunction determineFetchMethod(submitter, body, form) {\n  const formMethod = determineFormMethod(submitter)\n  const overrideMethod = body.get(\"_method\")\n  const method = form.getAttribute(\"method\") || \"get\"\n\n  if (typeof formMethod == \"string\") {\n    return formMethod\n  } else if (typeof overrideMethod == \"string\") {\n    return overrideMethod\n  } else {\n    return method\n  }\n}\n\nfunction determineFormMethod(submitter) {\n  if (submitter instanceof HTMLButtonElement || submitter instanceof HTMLInputElement) {\n    // Rails 7 ActionView::Helpers::FormBuilder#button method has an override\n    // for formmethod if the button does not have name or value attributes\n    // set, which is the default. This means that if you use <%= f.button\n    // formmethod: :delete %>, it will generate a <button name=\"_method\"\n    // value=\"delete\" formmethod=\"post\">. Therefore, if the submitter's name\n    // is already _method, it's value attribute already contains the desired\n    // method.\n    if (submitter.name === '_method') {\n      return submitter.value\n    } else if (submitter.hasAttribute(\"formmethod\")) {\n      return submitter.formMethod\n    } else {\n      return null\n    }\n  } else {\n    return null\n  }\n}\n\nfunction isBodyInit(body) {\n  return body instanceof FormData || body instanceof URLSearchParams\n}\n", "(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", "/*! (c) Andrea Giammarchi @webreflection ISC */\n(function () {\n  'use strict';\n\n  var Lie = typeof Promise === 'function' ? Promise : function (fn) {\n    var queue = [],\n        resolved = 0,\n        value;\n    fn(function ($) {\n      value = $;\n      resolved = 1;\n      queue.splice(0).forEach(then);\n    });\n    return {\n      then: then\n    };\n\n    function then(fn) {\n      return resolved ? setTimeout(fn, 0, value) : queue.push(fn), this;\n    }\n  };\n\n  var attributesObserver = (function (whenDefined, MutationObserver) {\n    var attributeChanged = function attributeChanged(records) {\n      for (var i = 0, length = records.length; i < length; i++) {\n        dispatch(records[i]);\n      }\n    };\n\n    var dispatch = function dispatch(_ref) {\n      var target = _ref.target,\n          attributeName = _ref.attributeName,\n          oldValue = _ref.oldValue;\n      target.attributeChangedCallback(attributeName, oldValue, target.getAttribute(attributeName));\n    };\n\n    return function (target, is) {\n      var attributeFilter = target.constructor.observedAttributes;\n\n      if (attributeFilter) {\n        whenDefined(is).then(function () {\n          new MutationObserver(attributeChanged).observe(target, {\n            attributes: true,\n            attributeOldValue: true,\n            attributeFilter: attributeFilter\n          });\n\n          for (var i = 0, length = attributeFilter.length; i < length; i++) {\n            if (target.hasAttribute(attributeFilter[i])) dispatch({\n              target: target,\n              attributeName: attributeFilter[i],\n              oldValue: null\n            });\n          }\n        });\n      }\n\n      return target;\n    };\n  });\n\n  var TRUE = true,\n      FALSE = false;\n  var QSA$1 = 'querySelectorAll';\n\n  function add(node) {\n    this.observe(node, {\n      subtree: TRUE,\n      childList: TRUE\n    });\n  }\n  /**\n   * Start observing a generic document or root element.\n   * @param {Function} callback triggered per each dis/connected node\n   * @param {Element?} root by default, the global document to observe\n   * @param {Function?} MO by default, the global MutationObserver\n   * @returns {MutationObserver}\n   */\n\n\n  var notify = function notify(callback, root, MO) {\n    var loop = function loop(nodes, added, removed, connected, pass) {\n      for (var i = 0, length = nodes.length; i < length; i++) {\n        var node = nodes[i];\n\n        if (pass || QSA$1 in node) {\n          if (connected) {\n            if (!added.has(node)) {\n              added.add(node);\n              removed[\"delete\"](node);\n              callback(node, connected);\n            }\n          } else if (!removed.has(node)) {\n            removed.add(node);\n            added[\"delete\"](node);\n            callback(node, connected);\n          }\n\n          if (!pass) loop(node[QSA$1]('*'), added, removed, connected, TRUE);\n        }\n      }\n    };\n\n    var observer = new (MO || MutationObserver)(function (records) {\n      for (var added = new Set(), removed = new Set(), i = 0, length = records.length; i < length; i++) {\n        var _records$i = records[i],\n            addedNodes = _records$i.addedNodes,\n            removedNodes = _records$i.removedNodes;\n        loop(removedNodes, added, removed, FALSE, FALSE);\n        loop(addedNodes, added, removed, TRUE, FALSE);\n      }\n    });\n    observer.add = add;\n    observer.add(root || document);\n    return observer;\n  };\n\n  var QSA = 'querySelectorAll';\n  var _self$1 = self,\n      document$2 = _self$1.document,\n      Element$1 = _self$1.Element,\n      MutationObserver$2 = _self$1.MutationObserver,\n      Set$2 = _self$1.Set,\n      WeakMap$1 = _self$1.WeakMap;\n\n  var elements = function elements(element) {\n    return QSA in element;\n  };\n\n  var filter = [].filter;\n  var qsaObserver = (function (options) {\n    var live = new WeakMap$1();\n\n    var drop = function drop(elements) {\n      for (var i = 0, length = elements.length; i < length; i++) {\n        live[\"delete\"](elements[i]);\n      }\n    };\n\n    var flush = function flush() {\n      var records = observer.takeRecords();\n\n      for (var i = 0, length = records.length; i < length; i++) {\n        parse(filter.call(records[i].removedNodes, elements), false);\n        parse(filter.call(records[i].addedNodes, elements), true);\n      }\n    };\n\n    var matches = function matches(element) {\n      return element.matches || element.webkitMatchesSelector || element.msMatchesSelector;\n    };\n\n    var notifier = function notifier(element, connected) {\n      var selectors;\n\n      if (connected) {\n        for (var q, m = matches(element), i = 0, length = query.length; i < length; i++) {\n          if (m.call(element, q = query[i])) {\n            if (!live.has(element)) live.set(element, new Set$2());\n            selectors = live.get(element);\n\n            if (!selectors.has(q)) {\n              selectors.add(q);\n              options.handle(element, connected, q);\n            }\n          }\n        }\n      } else if (live.has(element)) {\n        selectors = live.get(element);\n        live[\"delete\"](element);\n        selectors.forEach(function (q) {\n          options.handle(element, connected, q);\n        });\n      }\n    };\n\n    var parse = function parse(elements) {\n      var connected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n      for (var i = 0, length = elements.length; i < length; i++) {\n        notifier(elements[i], connected);\n      }\n    };\n\n    var query = options.query;\n    var root = options.root || document$2;\n    var observer = notify(notifier, root, MutationObserver$2);\n    var attachShadow = Element$1.prototype.attachShadow;\n    if (attachShadow) Element$1.prototype.attachShadow = function (init) {\n      var shadowRoot = attachShadow.call(this, init);\n      observer.add(shadowRoot);\n      return shadowRoot;\n    };\n    if (query.length) parse(root[QSA](query));\n    return {\n      drop: drop,\n      flush: flush,\n      observer: observer,\n      parse: parse\n    };\n  });\n\n  var _self = self,\n      document$1 = _self.document,\n      Map = _self.Map,\n      MutationObserver$1 = _self.MutationObserver,\n      Object$1 = _self.Object,\n      Set$1 = _self.Set,\n      WeakMap = _self.WeakMap,\n      Element = _self.Element,\n      HTMLElement = _self.HTMLElement,\n      Node = _self.Node,\n      Error = _self.Error,\n      TypeError = _self.TypeError,\n      Reflect = _self.Reflect;\n  var Promise$1 = self.Promise || Lie;\n  var defineProperty = Object$1.defineProperty,\n      keys = Object$1.keys,\n      getOwnPropertyNames = Object$1.getOwnPropertyNames,\n      setPrototypeOf = Object$1.setPrototypeOf;\n  var legacy = !self.customElements;\n\n  var expando = function expando(element) {\n    var key = keys(element);\n    var value = [];\n    var length = key.length;\n\n    for (var i = 0; i < length; i++) {\n      value[i] = element[key[i]];\n      delete element[key[i]];\n    }\n\n    return function () {\n      for (var _i = 0; _i < length; _i++) {\n        element[key[_i]] = value[_i];\n      }\n    };\n  };\n\n  if (legacy) {\n    var HTMLBuiltIn = function HTMLBuiltIn() {\n      var constructor = this.constructor;\n      if (!classes.has(constructor)) throw new TypeError('Illegal constructor');\n      var is = classes.get(constructor);\n      if (override) return augment(override, is);\n      var element = createElement.call(document$1, is);\n      return augment(setPrototypeOf(element, constructor.prototype), is);\n    };\n\n    var createElement = document$1.createElement;\n    var classes = new Map();\n    var defined = new Map();\n    var prototypes = new Map();\n    var registry = new Map();\n    var query = [];\n\n    var handle = function handle(element, connected, selector) {\n      var proto = prototypes.get(selector);\n\n      if (connected && !proto.isPrototypeOf(element)) {\n        var redefine = expando(element);\n        override = setPrototypeOf(element, proto);\n\n        try {\n          new proto.constructor();\n        } finally {\n          override = null;\n          redefine();\n        }\n      }\n\n      var method = \"\".concat(connected ? '' : 'dis', \"connectedCallback\");\n      if (method in proto) element[method]();\n    };\n\n    var _qsaObserver = qsaObserver({\n      query: query,\n      handle: handle\n    }),\n        parse = _qsaObserver.parse;\n\n    var override = null;\n\n    var whenDefined = function whenDefined(name) {\n      if (!defined.has(name)) {\n        var _,\n            $ = new Lie(function ($) {\n          _ = $;\n        });\n\n        defined.set(name, {\n          $: $,\n          _: _\n        });\n      }\n\n      return defined.get(name).$;\n    };\n\n    var augment = attributesObserver(whenDefined, MutationObserver$1);\n    defineProperty(self, 'customElements', {\n      configurable: true,\n      value: {\n        define: function define(is, Class) {\n          if (registry.has(is)) throw new Error(\"the name \\\"\".concat(is, \"\\\" has already been used with this registry\"));\n          classes.set(Class, is);\n          prototypes.set(is, Class.prototype);\n          registry.set(is, Class);\n          query.push(is);\n          whenDefined(is).then(function () {\n            parse(document$1.querySelectorAll(is));\n          });\n\n          defined.get(is)._(Class);\n        },\n        get: function get(is) {\n          return registry.get(is);\n        },\n        whenDefined: whenDefined\n      }\n    });\n    defineProperty(HTMLBuiltIn.prototype = HTMLElement.prototype, 'constructor', {\n      value: HTMLBuiltIn\n    });\n    defineProperty(self, 'HTMLElement', {\n      configurable: true,\n      value: HTMLBuiltIn\n    });\n    defineProperty(document$1, 'createElement', {\n      configurable: true,\n      value: function value(name, options) {\n        var is = options && options.is;\n        var Class = is ? registry.get(is) : registry.get(name);\n        return Class ? new Class() : createElement.call(document$1, name);\n      }\n    }); // in case ShadowDOM is used through a polyfill, to avoid issues\n    // with builtin extends within shadow roots\n\n    if (!('isConnected' in Node.prototype)) defineProperty(Node.prototype, 'isConnected', {\n      configurable: true,\n      get: function get() {\n        return !(this.ownerDocument.compareDocumentPosition(this) & this.DOCUMENT_POSITION_DISCONNECTED);\n      }\n    });\n  } else {\n    try {\n      var LI = function LI() {\n        return self.Reflect.construct(HTMLLIElement, [], LI);\n      };\n\n      LI.prototype = HTMLLIElement.prototype;\n      var is = 'extends-li';\n      self.customElements.define('extends-li', LI, {\n        'extends': 'li'\n      });\n      legacy = document$1.createElement('li', {\n        is: is\n      }).outerHTML.indexOf(is) < 0;\n      var _self$customElements = self.customElements,\n          get = _self$customElements.get,\n          _whenDefined = _self$customElements.whenDefined;\n      defineProperty(self.customElements, 'whenDefined', {\n        configurable: true,\n        value: function value(is) {\n          var _this = this;\n\n          return _whenDefined.call(this, is).then(function (Class) {\n            return Class || get.call(_this, is);\n          });\n        }\n      });\n    } catch (o_O) {\n      legacy = !legacy;\n    }\n  }\n\n  if (legacy) {\n    var parseShadow = function parseShadow(element) {\n      var root = shadowRoots.get(element);\n\n      _parse(root.querySelectorAll(this), element.isConnected);\n    };\n\n    var customElements = self.customElements;\n    var attachShadow = Element.prototype.attachShadow;\n    var _createElement = document$1.createElement;\n    var define = customElements.define,\n        _get = customElements.get;\n\n    var _ref = Reflect || {\n      construct: function construct(HTMLElement) {\n        return HTMLElement.call(this);\n      }\n    },\n        construct = _ref.construct;\n\n    var shadowRoots = new WeakMap();\n    var shadows = new Set$1();\n\n    var _classes = new Map();\n\n    var _defined = new Map();\n\n    var _prototypes = new Map();\n\n    var _registry = new Map();\n\n    var shadowed = [];\n    var _query = [];\n\n    var getCE = function getCE(is) {\n      return _registry.get(is) || _get.call(customElements, is);\n    };\n\n    var _handle = function _handle(element, connected, selector) {\n      var proto = _prototypes.get(selector);\n\n      if (connected && !proto.isPrototypeOf(element)) {\n        var redefine = expando(element);\n        _override = setPrototypeOf(element, proto);\n\n        try {\n          new proto.constructor();\n        } finally {\n          _override = null;\n          redefine();\n        }\n      }\n\n      var method = \"\".concat(connected ? '' : 'dis', \"connectedCallback\");\n      if (method in proto) element[method]();\n    };\n\n    var _qsaObserver2 = qsaObserver({\n      query: _query,\n      handle: _handle\n    }),\n        _parse = _qsaObserver2.parse;\n\n    var _qsaObserver3 = qsaObserver({\n      query: shadowed,\n      handle: function handle(element, connected) {\n        if (shadowRoots.has(element)) {\n          if (connected) shadows.add(element);else shadows[\"delete\"](element);\n          if (_query.length) parseShadow.call(_query, element);\n        }\n      }\n    }),\n        parseShadowed = _qsaObserver3.parse;\n\n    var _whenDefined2 = function _whenDefined2(name) {\n      if (!_defined.has(name)) {\n        var _,\n            $ = new Promise$1(function ($) {\n          _ = $;\n        });\n\n        _defined.set(name, {\n          $: $,\n          _: _\n        });\n      }\n\n      return _defined.get(name).$;\n    };\n\n    var _augment = attributesObserver(_whenDefined2, MutationObserver$1);\n\n    var _override = null;\n    getOwnPropertyNames(self).filter(function (k) {\n      return /^HTML/.test(k);\n    }).forEach(function (k) {\n      var HTMLElement = self[k];\n\n      function HTMLBuiltIn() {\n        var constructor = this.constructor;\n        if (!_classes.has(constructor)) throw new TypeError('Illegal constructor');\n\n        var _classes$get = _classes.get(constructor),\n            is = _classes$get.is,\n            tag = _classes$get.tag;\n\n        if (is) {\n          if (_override) return _augment(_override, is);\n\n          var element = _createElement.call(document$1, tag);\n\n          element.setAttribute('is', is);\n          return _augment(setPrototypeOf(element, constructor.prototype), is);\n        } else return construct.call(this, HTMLElement, [], constructor);\n      }\n\n\n      defineProperty(HTMLBuiltIn.prototype = HTMLElement.prototype, 'constructor', {\n        value: HTMLBuiltIn\n      });\n      defineProperty(self, k, {\n        value: HTMLBuiltIn\n      });\n    });\n    defineProperty(document$1, 'createElement', {\n      configurable: true,\n      value: function value(name, options) {\n        var is = options && options.is;\n\n        if (is) {\n          var Class = _registry.get(is);\n\n          if (Class && _classes.get(Class).tag === name) return new Class();\n        }\n\n        var element = _createElement.call(document$1, name);\n\n        if (is) element.setAttribute('is', is);\n        return element;\n      }\n    });\n    if (attachShadow) Element.prototype.attachShadow = function (init) {\n      var root = attachShadow.call(this, init);\n      shadowRoots.set(this, root);\n      return root;\n    };\n    defineProperty(customElements, 'get', {\n      configurable: true,\n      value: getCE\n    });\n    defineProperty(customElements, 'whenDefined', {\n      configurable: true,\n      value: _whenDefined2\n    });\n    defineProperty(customElements, 'define', {\n      configurable: true,\n      value: function value(is, Class, options) {\n        if (getCE(is)) throw new Error(\"'\".concat(is, \"' has already been defined as a custom element\"));\n        var selector;\n        var tag = options && options[\"extends\"];\n\n        _classes.set(Class, tag ? {\n          is: is,\n          tag: tag\n        } : {\n          is: '',\n          tag: is\n        });\n\n        if (tag) {\n          selector = \"\".concat(tag, \"[is=\\\"\").concat(is, \"\\\"]\");\n\n          _prototypes.set(selector, Class.prototype);\n\n          _registry.set(is, Class);\n\n          _query.push(selector);\n        } else {\n          define.apply(customElements, arguments);\n          shadowed.push(selector = is);\n        }\n\n        _whenDefined2(is).then(function () {\n          if (tag) {\n            _parse(document$1.querySelectorAll(selector));\n\n            shadows.forEach(parseShadow, [selector]);\n          } else parseShadowed(document$1.querySelectorAll(selector));\n        });\n\n        _defined.get(is)._(Class);\n      }\n    });\n  }\n\n}());\n", "import { createConsumer } from '@anycable/web';\nimport generateUrlFromDOM from './ActionCableGetConfigShim';\n\nexport const ANYCABLE_OPTIONS = {\n  protocol: 'actioncable-v1-json',\n  concurrentSubscribes: false,\n}\n\n// Preseve the HTTP context regardles of the domain the socket is connecting to.\n//\n// This is necessary because the socket connects to a different domain than the host web-page whenever a user\n// previews their contact facing pages that are hosted on a custom domain.\n//\n// NOTE: The HTTP context uses a one-time-use UniversalID (UID) wrapped in a SignedGlobalID (SGID)\n//       and is refreshed periodically to ensure reconnects also preserve the HTTP context.\n//       This mechanism works for all socket connections irrespective of the use case noted above.\n//\n// For more context SEE:\n// - app/channels/application_cable/connection.rb\n// - app/helpers/action_cable/context_helper.rb\n// - projects/cf_utils/ApplicationCable/index.js\n// - app/javascript/controllers/action_cable_context_controller.js\n// - app/javascript/turbo_boost/commands.js\n//\nfunction getCableUrlWithCurrentContext() {\n  const url = new URL(generateUrlFromDOM());\n\n  const currentContext = document.querySelector('meta[name=\"action-cable-context\"]')?.content;\n  if (currentContext) {\n    url.searchParams.append('uid', currentContext);\n  }\n\n  return url.toString();\n}\n\n// Retrieves AnyCable options, possibly including protocol overridden for tests.\n//\n// For more context SEE:\n// - app/helpers/action_cable/protocol_helper.rb\n//\nfunction getCableOptions() {\n  const currentProtocol = document.querySelector('meta[name=\"action-cable-protocol\"]')?.content;\n\n  return {\n    ...ANYCABLE_OPTIONS,\n    protocol: currentProtocol || ANYCABLE_OPTIONS.protocol\n  };\n}\n\n// Ensure the HTTP context is preserved across reconnects for the long-lived connection.\n//\nasync function refreshCableUrlWithCurrentContext(event) {\n  window.applicationCableConsumer.cable.transport.setURL(getCableUrlWithCurrentContext());\n}\n\n// Reuse a global AnyCable connection across the entire application.\n//\nfunction getOrCreateApplicationCableConsumer() {\n  if (!window.applicationCableConsumer) {\n    window.applicationCableConsumer = createConsumer(\n      getCableUrlWithCurrentContext(), getCableOptions()\n    );\n    window.applicationCableConsumer.cable.on('disconnect', refreshCableUrlWithCurrentContext);\n  }\n\n  return window.applicationCableConsumer;\n}\n\nconst consumer = getOrCreateApplicationCableConsumer();\n\nexport default consumer;\n", "import {\n  createCable as coreCreateCable,\n  backoffWithJitter,\n  DEFAULT_OPTIONS as DEFAULTS,\n  ActionCableConsumer\n} from '@anycable/core'\n\nimport { Logger } from './logger/index.js'\nimport { Monitor } from './monitor/index.js'\n\nexport { Channel } from '@anycable/core'\n\nconst metaPrefixes = ['cable', 'action-cable']\n\nconst defaultUrl = '/cable'\n\n/* eslint-disable consistent-return */\nconst fetchMeta = (doc, key) => {\n  for (let prefix of metaPrefixes) {\n    let element = doc.head.querySelector(`meta[name='${prefix}-${key}']`)\n\n    if (element) {\n      return element.getAttribute('content')\n    }\n  }\n}\n\nconst absoluteWSUrl = path => {\n  if (path.match(/wss?:\\/\\//)) return path\n\n  if (typeof window !== 'undefined') {\n    let proto = window.location.protocol.replace('http', 'ws')\n\n    return `${proto}//${window.location.host}${path}`\n  }\n\n  return path\n}\n\n/* eslint-disable consistent-return */\nconst generateUrlFromDOM = () => {\n  if (typeof document !== 'undefined' && document.head) {\n    let url = fetchMeta(document, 'url')\n    if (url) {\n      return absoluteWSUrl(url)\n    }\n  }\n\n  return absoluteWSUrl(defaultUrl)\n}\n\nconst historyTimestampFromMeta = () => {\n  if (typeof document !== 'undefined' && document.head) {\n    let value = fetchMeta(document, 'history-timestamp')\n\n    if (value) {\n      return value | 0\n    }\n  }\n}\n\nexport function createCable(url, opts) {\n  if (typeof url === 'object' && typeof opts === 'undefined') {\n    opts = url\n    url = undefined\n  }\n\n  url = url || generateUrlFromDOM()\n  opts = opts || {}\n\n  opts.historyTimestamp ||= historyTimestampFromMeta()\n\n  opts = Object.assign({}, DEFAULTS, opts)\n\n  let {\n    logLevel,\n    logger,\n    pingInterval,\n    reconnectStrategy,\n    maxMissingPings,\n    maxReconnectAttempts\n  } = opts\n\n  logger = opts.logger = opts.logger || new Logger(logLevel)\n  reconnectStrategy = opts.reconnectStrategy =\n    opts.reconnectStrategy || backoffWithJitter(pingInterval)\n\n  if (opts.monitor !== false) {\n    opts.monitor =\n      opts.monitor ||\n      new Monitor({\n        pingInterval,\n        reconnectStrategy,\n        maxMissingPings,\n        maxReconnectAttempts,\n        logger\n      })\n  }\n\n  return coreCreateCable(url, opts)\n}\n\nexport function createConsumer(url, opts) {\n  let cable = createCable(url, opts)\n\n  return new ActionCableConsumer(cable)\n}\n\nexport function fetchTokenFromHTML(opts) {\n  let url = opts ? opts.url : undefined\n\n  if (!url) {\n    if (typeof window !== 'undefined') {\n      url = window.location.href\n    } else {\n      throw Error('An URL to fetch the HTML with a token MUST be specified')\n    }\n  }\n\n  return async transport => {\n    let response = await fetch(url, {\n      credentials: 'same-origin',\n      cache: 'no-cache',\n      headers: {\n        'Accept': 'text/html, application/xhtml+xml',\n        'X-ANYCABLE-OPERATION': 'token-refresh'\n      }\n    })\n\n    if (!response.ok) {\n      throw Error(\n        'Failed to fetch a page to refresh a token: ' + response.status\n      )\n    }\n\n    let html = await response.text()\n\n    let doc = new DOMParser().parseFromString(html, 'text/html')\n\n    let newURL = fetchMeta(doc, 'url')\n\n    if (newURL) {\n      transport.setURL(newURL)\n    } else {\n      throw Error(\"Couldn't find a token on the page\")\n    }\n  }\n}\n", "export { Channel } from './channel/index.js'\nexport {\n  ReasonError,\n  SubscriptionRejectedError,\n  SubscriptionTimeoutError,\n  DisconnectedError,\n  CommandError,\n  StaleConnectionError\n} from './protocol/index.js'\nexport { Hub, Subscription, Subscriptions } from './hub/index.js'\nexport { BaseLogger, NoopLogger } from './logger/index.js'\nexport { JSONEncoder } from './encoder/index.js'\nexport { ActionCableProtocol } from './action_cable/index.js'\nexport { ActionCableExtendedProtocol } from './action_cable_ext/index.js'\nexport { Cable, NoConnectionError } from './cable/index.js'\nexport { Monitor, backoffWithJitter } from './monitor/index.js'\nexport { stringifyParams } from './stringify-params/index.js'\nexport { FallbackTransport } from './transport/index.js'\nexport { WebSocketTransport } from './websocket/index.js'\nexport {\n  createCable,\n  DEFAULT_OPTIONS,\n  createConsumer,\n  ActionCableConsumer,\n  ActionCableSubscriptions\n} from './create-cable/index.js'\n", "/*eslint n/no-unsupported-features/es-syntax: [\"error\", {version: \"14.0\"}] */\nimport { createNanoEvents } from 'nanoevents'\n\nimport { ReasonError } from '../protocol/index.js'\nimport { stringifyParams } from '../stringify-params/index.js'\n\nconst STATE = Symbol('state')\n\nexport class Channel {\n  // Unique channel identifier\n  // static identifier = ''\n\n  constructor(params = {}) {\n    this.emitter = createNanoEvents()\n    this.params = Object.freeze(params)\n\n    this.initialConnect = true\n\n    this[STATE] = 'idle'\n  }\n\n  get identifier() {\n    if (this._identifier) return this._identifier\n\n    // Use Action Cable identifiers as internal identifiers for channels\n    this._identifier = stringifyParams({\n      channel: this.channelId,\n      ...this.params\n    })\n\n    return this._identifier\n  }\n\n  get channelId() {\n    return this.constructor.identifier\n  }\n\n  get state() {\n    return this[STATE]\n  }\n\n  attached(receiver) {\n    if (this.receiver) {\n      if (this.receiver !== receiver) {\n        throw Error('Already connected to a different receiver')\n      }\n\n      return false\n    }\n\n    this.receiver = receiver\n    return true\n  }\n\n  connecting() {\n    this[STATE] = 'connecting'\n  }\n\n  connected() {\n    if (this.state === 'connected') return\n    if (this.state === 'closed') return\n\n    this[STATE] = 'connected'\n\n    let restored = false\n\n    if (this.initialConnect) {\n      this.initialConnect = false\n      this.emit('connect', { reconnect: false, restored })\n    } else {\n      this.emit('connect', { reconnect: true, restored })\n    }\n  }\n\n  restored() {\n    if (this.state === 'connected') throw Error('Already connected')\n\n    this[STATE] = 'connected'\n\n    let restored = true\n    let reconnect = true\n\n    this.initialConnect = false\n\n    this.emit('connect', { reconnect, restored })\n  }\n\n  disconnected(err) {\n    if (this.state === 'disconnected' || this.state === 'closed') return\n\n    this[STATE] = 'disconnected'\n\n    this.emit('disconnect', err)\n  }\n\n  closed(err) {\n    if (this.state === 'closed') return\n\n    this[STATE] = 'closed'\n    delete this.receiver\n\n    this.initialConnect = true\n\n    this.emit('close', err)\n  }\n\n  disconnect() {\n    if (this.state === 'idle' || this.state === 'closed') {\n      return\n    }\n\n    this.receiver.unsubscribe(this)\n  }\n\n  async perform(action, payload) {\n    if (this.state === 'idle' || this.state === 'closed') {\n      throw Error('Channel is not subscribed')\n    }\n\n    return this.receiver.perform(this.identifier, action, payload)\n  }\n\n  async send(payload) {\n    return this.perform(undefined, payload)\n  }\n\n  async whisper(payload) {\n    try {\n      await this.perform('$whisper', payload)\n    } catch (e) {\n      let logger = this.receiver ? this.receiver.logger : null\n      if (logger) {\n        logger.warn('whisper failed: ', e)\n      }\n    }\n  }\n\n  receive(msg, meta) {\n    this.emit('message', msg, meta)\n  }\n\n  on(event, callback) {\n    return this.emitter.on(event, callback)\n  }\n\n  once(event, callback) {\n    let unbind = this.emitter.on(event, (...args) => {\n      unbind()\n      callback(...args)\n    })\n    return unbind\n  }\n\n  emit(event, ...args) {\n    return this.emitter.emit(event, ...args)\n  }\n\n  ensureSubscribed() {\n    if (this.state === 'connected') return Promise.resolve()\n\n    if (this.state === 'closed') {\n      return Promise.reject(Error('Channel is unsubscribed'))\n    }\n\n    return this.pendingSubscribe()\n  }\n\n  // This promise resolves when subscription is confirmed\n  // and rejects when rejected or closed.\n  // It ignores disconnect events.\n  pendingSubscribe() {\n    if (this._pendingSubscribe) return this._pendingSubscribe\n\n    this._pendingSubscribe = new Promise((resolve, reject) => {\n      let unbind = [() => delete this._pendingSubscribe]\n\n      unbind.push(\n        this.on('connect', () => {\n          unbind.forEach(clbk => clbk())\n          resolve()\n        })\n      )\n      unbind.push(\n        this.on('close', err => {\n          unbind.forEach(clbk => clbk())\n          reject(\n            err ||\n              new ReasonError(\n                'Channel was disconnected before subscribing',\n                'canceled'\n              )\n          )\n        })\n      )\n    })\n\n    return this._pendingSubscribe\n  }\n}\n", "export let createNanoEvents = () => ({\n  events: {},\n  emit(event, ...args) {\n    let callbacks = this.events[event] || []\n    for (let i = 0, length = callbacks.length; i < length; i++) {\n      callbacks[i](...args)\n    }\n  },\n  on(event, cb) {\n    this.events[event]?.push(cb) || (this.events[event] = [cb])\n    return () => {\n      this.events[event] = this.events[event]?.filter(i => cb !== i)\n    }\n  }\n})\n", "export class ReasonError extends Error {\n  constructor(msg, reason) {\n    if (msg instanceof Error) {\n      super(msg.message)\n      this.cause = msg\n    } else {\n      super(msg)\n    }\n\n    this.reason = reason\n    this.name = 'ReasonError'\n  }\n}\n\nexport class SubscriptionRejectedError extends ReasonError {\n  constructor(reason) {\n    super('Rejected', reason)\n    this.name = 'SubscriptionRejectedError'\n  }\n}\n\nexport class SubscriptionTimeoutError extends ReasonError {\n  constructor(msg) {\n    super(msg || 'Timed out to receive subscription ack')\n    this.name = 'SubscriptionTimeoutError'\n  }\n}\n\nexport class DisconnectedError extends ReasonError {\n  constructor(error, reason) {\n    if (reason) {\n      super(error, reason)\n    } else {\n      super('Disconnected', error)\n    }\n    this.name = 'DisconnectedError'\n  }\n}\n\nexport class CommandError extends Error {\n  constructor(msg) {\n    super(msg)\n    this.name = 'CommandError'\n  }\n}\n\nexport class StaleConnectionError extends DisconnectedError {\n  constructor(msg) {\n    super(msg, 'stale_connection')\n    this.name = 'StaleConnectionError'\n  }\n}\n", "export function stringifyParams(params) {\n  if (!params) return ''\n\n  let parts = Object.keys(params)\n    .sort()\n    .filter(k => params[k] !== undefined)\n    .map(k => {\n      let v = JSON.stringify(params[k])\n      return `${JSON.stringify(k)}:${v}`\n    })\n\n  return `{${parts.join(',')}}`\n}\n", "export class Subscription {\n  constructor(id) {\n    this.id = id\n    this.intent = 'unsubscribed'\n    this.state = 'idle'\n    this.channels = []\n    this.disposed = false\n    this._pendings = []\n  }\n\n  add(channel) {\n    if (this.channels.includes(channel)) return\n\n    this.channels.push(channel)\n  }\n\n  remove(channel) {\n    let ind = this.channels.indexOf(channel)\n\n    if (ind > -1) this.channels.splice(ind, 1)\n  }\n\n  notify(state, ...args) {\n    // TODO: Should we get rid of restored state completely?\n    this.state = state === 'restored' ? 'connected' : state\n\n    if (args.length === 1) {\n      this.channels.forEach(channel => channel[state](args[0]))\n    } else {\n      this.channels.forEach(channel => channel[state]())\n    }\n  }\n\n  pending(intent) {\n    this._checkIntent(intent)\n\n    let nextPending = this._pendings[0]\n\n    if (!nextPending || nextPending.intent !== intent) return Promise.resolve()\n\n    return nextPending.promise\n  }\n\n  ensureResubscribed() {\n    if (this.disposed) return\n\n    this.intent = undefined\n\n    this.ensureSubscribed()\n  }\n\n  ensureSubscribed() {\n    if (this.intent === 'subscribed') return\n    if (this.disposed) throw Error('Subscription is disposed')\n\n    this.intent = 'subscribed'\n\n    let merged = this._mergeWithPending('unsubscribed')\n    if (merged) return\n\n    this.subscriber(this)\n  }\n\n  maybeUnsubscribe() {\n    if (this.disposed) return\n    if (this.intent === 'unsubscribed') return\n\n    if (this.channels.length > 0) return\n\n    this.intent = 'unsubscribed'\n\n    let merged = this._mergeWithPending('subscribed')\n    if (merged) return\n\n    this.unsubscriber(this)\n  }\n\n  async acquire(intent) {\n    this._checkIntent(intent)\n\n    let resolver\n    let promise = new Promise(resolve => {\n      resolver = resolve\n    })\n\n    let lock = {\n      promise,\n      intent,\n      release: () => {\n        this._pendings.splice(this._pendings.indexOf(lock), 1)\n        resolver(lock)\n      },\n      canceled: false,\n      acquired: false\n    }\n\n    let top = this._pendingTop\n\n    this._pendings.push(lock)\n\n    if (top) {\n      await top.promise\n    }\n\n    if (this.gvl) {\n      await this.gvl.acquire(lock, intent)\n    }\n\n    lock.acquired = true\n    return lock\n  }\n\n  close(err) {\n    this.disposed = true\n    this.intent = undefined\n    this.notify('closed', err)\n  }\n\n  _checkIntent(event) {\n    if (event === 'unsubscribed' || event === 'subscribed') return\n\n    throw Error(`Unknown subscription intent: ${event}`)\n  }\n\n  get _pendingTop() {\n    return this._pendings.length\n      ? this._pendings[this._pendings.length - 1]\n      : undefined\n  }\n\n  _mergeWithPending(intent) {\n    let top = this._pendingTop\n    if (!top) return false\n    if (top.acquired) return false\n    if (top.intent !== intent) return false\n\n    this._pendings.pop()\n    top.canceled = true\n    return true\n  }\n}\n\n// Use to limit concurrent actions\nclass GlobalLock {\n  constructor() {\n    this.queue = []\n  }\n\n  async acquire(lock, intent) {\n    // We currently only limit subscribe commands\n    if (intent !== 'subscribed') return\n\n    this.queue.push(\n      lock.promise.then(() => {\n        this.queue.splice(this.queue.indexOf(lock), 1)\n      })\n    )\n\n    if (this.queue.length > 1) {\n      await this.queue[this.queue.length - 2]\n    }\n  }\n}\n\nexport class Subscriptions {\n  constructor(opts) {\n    if (opts.concurrentSubscribes === false) {\n      this.glv = new GlobalLock()\n    }\n    this._subscriptions = {}\n    this._localToRemote = {}\n  }\n\n  all() {\n    return Object.values(this._subscriptions)\n  }\n\n  get(id) {\n    return this._subscriptions[id]\n  }\n\n  create(id, { subscribe, unsubscribe }) {\n    let sub = (this._subscriptions[id] = new Subscription(id))\n    sub.remoteId = this._localToRemote[id]\n    sub.subscriber = subscribe\n    sub.unsubscriber = unsubscribe\n    sub.gvl = this.glv\n\n    return sub\n  }\n\n  remove(id) {\n    delete this._subscriptions[id]\n    delete this._localToRemote[id]\n  }\n\n  storeRemoteId(localId, remoteId) {\n    this._localToRemote[localId] = remoteId\n\n    let sub = this.get(localId)\n    if (sub) sub.remoteId = remoteId\n  }\n}\n\nexport class Hub {\n  constructor(opts = {}) {\n    this.subscriptions = new Subscriptions(opts)\n    this._pendingMessages = []\n    this._remoteToLocal = {}\n  }\n\n  subscribe(localId, remoteId) {\n    this._remoteToLocal[remoteId] = localId\n\n    this.subscriptions.storeRemoteId(localId, remoteId)\n\n    this.flush(remoteId)\n  }\n\n  unsubscribe(localId) {\n    let sub = this.subscriptions.get(localId)\n    if (!sub) return\n\n    let remoteId = sub.remoteId\n    if (remoteId) delete this._remoteToLocal[remoteId]\n\n    this.subscriptions.remove(localId)\n  }\n\n  transmit(id, msg, meta) {\n    let localId = this._remoteToLocal[id]\n\n    if (!localId) {\n      this._pendingMessages.push([id, msg, meta])\n      return\n    }\n\n    let sub = this.subscriptions.get(localId)\n\n    if (!sub) return\n\n    sub.channels.forEach(channel => {\n      channel.receive(msg, meta)\n    })\n  }\n\n  close() {\n    this._pendingMessages.length = 0\n  }\n\n  get size() {\n    return this.channels.length\n  }\n\n  get channels() {\n    return this.subscriptions.all().flatMap(sub => sub.channels)\n  }\n\n  flush(id) {\n    let left = []\n\n    for (let item of this._pendingMessages) {\n      if (item[0] === id) this.transmit(item[0], item[1], item[2])\n      else left.push(item)\n    }\n\n    this._pendingMessages = left\n  }\n}\n", "const LEVEL_TO_NAME = {\n  debug: 0,\n  info: 1,\n  warn: 2,\n  error: 3\n}\n\nexport class BaseLogger {\n  constructor(level) {\n    this.level = level || 'warn'\n  }\n\n  log(level, msg, details) {\n    if (LEVEL_TO_NAME[level] < LEVEL_TO_NAME[this.level]) return\n\n    this.writeLogEntry(level, msg, details)\n  }\n\n  writeLogEntry() {\n    throw Error('Not implemented')\n  }\n\n  debug(msg, details) {\n    this.log('debug', msg, details)\n  }\n\n  info(msg, details) {\n    this.log('info', msg, details)\n  }\n\n  warn(msg, details) {\n    this.log('warn', msg, details)\n  }\n\n  error(msg, details) {\n    this.log('error', msg, details)\n  }\n}\n\nexport class NoopLogger extends BaseLogger {\n  writeLogEntry() {}\n}\n", "/* eslint-disable consistent-return */\n\nexport class JSONEncoder {\n  encode(msg) {\n    return JSON.stringify(msg)\n  }\n\n  decode(raw) {\n    try {\n      return JSON.parse(raw)\n    } catch (_e) {}\n  }\n}\n", "import {\n  SubscriptionRejectedError,\n  SubscriptionTimeoutError,\n  DisconnectedError\n} from '../protocol/index.js'\nimport { stringifyParams } from '../stringify-params/index.js'\nimport { NoopLogger } from '../logger/index.js'\n\nlet commandID = 0\n\nexport class ActionCableProtocol {\n  constructor(opts = {}) {\n    let { logger } = opts\n    this.logger = logger || new NoopLogger()\n    this.pendingSubscriptions = {}\n    this.pendingUnsubscriptions = {}\n    // For how long to wait before sending `subscribe` command\n    // in case `unsubscribe` was sent for the same identifier\n    this.subscribeCooldownInterval = opts.subscribeCooldownInterval || 250\n    // For how long to wait for subscription acknoledgement before trying again\n    // (just once).\n    this.subscribeRetryInterval = opts.subscribeRetryInterval || 5000\n  }\n\n  attached(cable) {\n    this.cable = cable\n  }\n\n  subscribe(channel, params) {\n    let subscriptionPayload = { channel }\n    if (params) {\n      Object.assign(subscriptionPayload, params)\n    }\n\n    let identifier = stringifyParams(subscriptionPayload)\n\n    if (this.pendingUnsubscriptions[identifier]) {\n      let cooldown = this.subscribeCooldownInterval * 1.5\n      this.logger.debug(\n        `unsubscribed recently, cooldown for ${cooldown}`,\n        identifier\n      )\n      return new Promise(resolve => {\n        setTimeout(() => {\n          resolve(this.subscribe(channel, params))\n        }, cooldown)\n      })\n    }\n\n    if (this.pendingSubscriptions[identifier]) {\n      this.logger.warn('subscription is already pending, skipping', identifier)\n      return Promise.reject(Error('Already subscribing'))\n    }\n\n    let retryInterval = this.subscribeRetryInterval\n\n    return new Promise((resolve, reject) => {\n      let id = ++commandID\n      this.pendingSubscriptions[identifier] = {\n        resolve,\n        reject,\n        id\n      }\n\n      this.cable.send(this.buildSubscribeRequest(identifier))\n\n      this.maybeRetrySubscribe(id, identifier, retryInterval)\n    })\n  }\n\n  buildSubscribeRequest(identifier) {\n    return {\n      command: 'subscribe',\n      identifier\n    }\n  }\n\n  maybeRetrySubscribe(id, identifier, retryInterval) {\n    setTimeout(() => {\n      let sub = this.pendingSubscriptions[identifier]\n      if (!sub) return\n      if (sub.id !== id) return\n\n      this.logger.warn(\n        `no subscription ack received in ${retryInterval}ms, retrying subscribe`,\n        identifier\n      )\n\n      this.cable.send(this.buildSubscribeRequest(identifier))\n\n      this.maybeExpireSubscribe(id, identifier, retryInterval)\n    }, retryInterval)\n  }\n\n  maybeExpireSubscribe(id, identifier, retryInterval) {\n    setTimeout(() => {\n      let sub = this.pendingSubscriptions[identifier]\n      if (!sub) return\n      if (sub.id !== id) return\n\n      delete this.pendingSubscriptions[identifier]\n\n      sub.reject(\n        new SubscriptionTimeoutError(\n          `Haven't received subscription ack in ${\n            retryInterval * 2\n          }ms for ${identifier}`\n        )\n      )\n    }, retryInterval)\n  }\n\n  unsubscribe(identifier) {\n    this.cable.send({\n      command: 'unsubscribe',\n      identifier\n    })\n\n    this.pendingUnsubscriptions[identifier] = true\n\n    setTimeout(() => {\n      delete this.pendingUnsubscriptions[identifier]\n    }, this.subscribeCooldownInterval)\n\n    return Promise.resolve()\n  }\n\n  perform(identifier, action, payload) {\n    // Handle whispering separately\n    if (action === '$whisper') {\n      return this.whisper(identifier, payload)\n    }\n\n    if (!payload) {\n      payload = {}\n    }\n\n    payload.action = action\n\n    this.cable.send({\n      command: 'message',\n      identifier,\n      data: JSON.stringify(payload)\n    })\n\n    return Promise.resolve()\n  }\n\n  whisper(identifier, data) {\n    this.cable.send({\n      command: 'whisper',\n      identifier,\n      data\n    })\n\n    return Promise.resolve()\n  }\n\n  receive(msg) {\n    /* eslint-disable consistent-return */\n    if (typeof msg !== 'object') {\n      this.logger.error('unsupported message format', { message: msg })\n      return\n    }\n\n    let { type, identifier, message, reason, reconnect } = msg\n\n    if (type === 'ping') {\n      return this.cable.keepalive(msg.message)\n    } else {\n      // Any incoming message may be considered as a heartbeat\n      this.cable.keepalive()\n    }\n\n    if (type === 'welcome') {\n      let sessionId = msg.sid\n\n      if (sessionId) this.cable.setSessionId(sessionId)\n\n      return this.cable.connected()\n    }\n\n    if (type === 'disconnect') {\n      let err = new DisconnectedError(reason)\n      this.reset(err)\n\n      if (reconnect === false) {\n        this.cable.closed(err)\n      } else {\n        this.cable.disconnected(err)\n      }\n      return\n    }\n\n    if (type === 'confirm_subscription') {\n      let subscription = this.pendingSubscriptions[identifier]\n      if (!subscription) {\n        this.logger.error('subscription not found, unsubscribing', {\n          type,\n          identifier\n        })\n        this.unsubscribe(identifier)\n        return\n      }\n\n      delete this.pendingSubscriptions[identifier]\n\n      return subscription.resolve(identifier)\n    }\n\n    if (type === 'reject_subscription') {\n      let subscription = this.pendingSubscriptions[identifier]\n      if (!subscription) {\n        return this.logger.error('subscription not found', { type, identifier })\n      }\n\n      delete this.pendingSubscriptions[identifier]\n\n      return subscription.reject(new SubscriptionRejectedError())\n    }\n\n    if (message) {\n      return { identifier, message }\n    }\n\n    this.logger.warn(`unknown message type: ${type}`, { message: msg })\n  }\n\n  reset(err) {\n    // Reject pending subscriptions\n    for (let identifier in this.pendingSubscriptions) {\n      this.pendingSubscriptions[identifier].reject(err)\n    }\n\n    this.pendingSubscriptions = {}\n  }\n\n  recoverableClosure() {\n    return false\n  }\n}\n", "import { ActionCableProtocol } from '../action_cable/index.js'\n\nconst now = () => (Date.now() / 1000) | 0\n\nexport class ActionCableExtendedProtocol extends ActionCableProtocol {\n  constructor(opts = {}) {\n    super(opts)\n\n    this.streamsPositions = {}\n    this.subscriptionStreams = {}\n    this.pendingHistory = {}\n    this.restoreSince = opts.historyTimestamp\n    if (this.restoreSince === undefined) this.restoreSince = now()\n    this.sessionId = undefined\n    this.sendPongs = opts.pongs\n  }\n\n  receive(msg) {\n    /* eslint-disable consistent-return */\n    if (typeof msg !== 'object') {\n      this.logger.error('unsupported message format', { message: msg })\n      return\n    }\n\n    let { type, identifier, message } = msg\n\n    // These message types do not require special handling\n    if (type === 'disconnect' || type === 'reject_subscription') {\n      return super.receive(msg)\n    }\n\n    if (type === 'confirm_subscription') {\n      if (!this.subscriptionStreams[identifier]) {\n        this.subscriptionStreams[identifier] = new Set()\n      }\n\n      return super.receive(msg)\n    }\n\n    if (type === 'ping') {\n      if (!this.restoreSince === false) {\n        this.restoreSince = now()\n      }\n\n      if (this.sendPongs) {\n        this.sendPong()\n      }\n\n      return this.cable.keepalive(msg.message)\n    } else {\n      // Any incoming message may be considered as a heartbeat\n      this.cable.keepalive()\n    }\n\n    if (type === 'confirm_history') {\n      this.logger.debug('history result received', msg)\n      return\n    }\n\n    if (type === 'reject_history') {\n      this.logger.warn('failed to retrieve history', msg)\n      return\n    }\n\n    if (type === 'welcome') {\n      this.sessionId = msg.sid\n\n      if (this.sessionId) this.cable.setSessionId(this.sessionId)\n\n      if (msg.restored) {\n        let restoredIds =\n          msg.restored_ids || Object.keys(this.subscriptionStreams)\n        for (let restoredId of restoredIds) {\n          this.cable.send({\n            identifier: restoredId,\n            command: 'history',\n            history: this.historyRequestFor(restoredId)\n          })\n        }\n\n        return this.cable.restored(restoredIds)\n      }\n\n      return this.cable.connected(this.sessionId)\n    }\n\n    if (message) {\n      let meta = this.trackStreamPosition(\n        identifier,\n        msg.stream_id,\n        msg.epoch,\n        msg.offset\n      )\n      return { identifier, message, meta }\n    }\n\n    this.logger.warn(`unknown message type: ${type}`, { message: msg })\n  }\n\n  buildSubscribeRequest(identifier) {\n    let req = super.buildSubscribeRequest(identifier)\n\n    let historyReq = this.historyRequestFor(identifier)\n\n    if (historyReq) {\n      req.history = historyReq\n\n      this.pendingHistory[identifier] = true\n    }\n\n    return req\n  }\n\n  // TODO: Which error can be non-recoverable?\n  recoverableClosure() {\n    return !!this.sessionId\n  }\n\n  historyRequestFor(identifier) {\n    let streams = {}\n    let hasStreams = false\n\n    if (this.subscriptionStreams[identifier]) {\n      for (let stream of this.subscriptionStreams[identifier]) {\n        let record = this.streamsPositions[stream]\n        if (record) {\n          hasStreams = true\n          streams[stream] = record\n        }\n      }\n    }\n\n    if (!hasStreams && !this.restoreSince) return\n\n    return { since: this.restoreSince, streams }\n  }\n\n  trackStreamPosition(identifier, stream, epoch, offset) {\n    if (!stream || !epoch) return\n\n    if (!this.subscriptionStreams[identifier]) {\n      this.subscriptionStreams[identifier] = new Set()\n    }\n\n    this.subscriptionStreams[identifier].add(stream)\n\n    this.streamsPositions[stream] = { epoch, offset }\n\n    return { stream, epoch, offset }\n  }\n\n  // Send pongs asynchrounously\u2014no need to block the main thread\n  async sendPong() {\n    await new Promise(resolve => setTimeout(resolve, 0))\n    // Only send pong if the connection is still open\n    if (this.cable.state === 'connected') {\n      this.cable.send({ command: 'pong' })\n    }\n  }\n}\n", "/*eslint n/no-unsupported-features/es-syntax: [\"error\", {version: \"14.0\"}] */\nimport { createNanoEvents } from 'nanoevents'\n\nimport { Hub } from '../hub/index.js'\nimport {\n  ReasonError,\n  DisconnectedError,\n  SubscriptionRejectedError\n} from '../protocol/index.js'\nimport { NoopLogger } from '../logger/index.js'\nimport { Channel } from '../channel/index.js'\n\nexport class NoConnectionError extends ReasonError {\n  constructor() {\n    super('No connection', 'closed')\n    this.name = 'NoConnectionError'\n  }\n}\n\nexport class GhostChannel extends Channel {\n  static identifier = '__ghost__'\n  constructor(channelId, params) {\n    super(params)\n    this.channelId = channelId\n  }\n\n  set channelId(val) {\n    this._channelId = val\n  }\n\n  get channelId() {\n    return this._channelId\n  }\n}\n\nexport const PUBSUB_CHANNEL = '$pubsub'\n\nexport class PubSubChannel extends Channel {\n  static identifier = PUBSUB_CHANNEL\n\n  async perform(action, payload) {\n    if (action === '$whisper') {\n      return super.perform(action, payload)\n    }\n\n    throw Error('not implemented')\n  }\n}\n\nexport const STATE = Symbol('state')\n\nexport class Cable {\n  constructor({ transport, protocol, encoder, logger, lazy, hubOptions }) {\n    this.emitter = createNanoEvents()\n    this.transport = transport\n    this.encoder = encoder\n    this.logger = logger || new NoopLogger()\n    this.protocol = protocol\n\n    this.protocol.attached(this)\n\n    this.hub = new Hub(hubOptions || {})\n\n    this[STATE] = 'idle'\n\n    this.handleClose = this.handleClose.bind(this)\n    this.handleIncoming = this.handleIncoming.bind(this)\n\n    this.transport.on('close', this.handleClose)\n    this.transport.on('data', this.handleIncoming)\n\n    this.initialConnect = true\n    this.recovering = false\n\n    if (lazy === false) {\n      this.connect().catch(() => {})\n    }\n  }\n\n  get state() {\n    return this[STATE]\n  }\n\n  async connect() {\n    if (this.state === 'connected') return Promise.resolve()\n    if (this.state === 'connecting') {\n      return this.pendingConnect()\n    }\n\n    this[STATE] = 'connecting'\n    let promise = this.pendingConnect()\n\n    this.logger.debug('connecting')\n\n    try {\n      await this.transport.open()\n    } catch (err) {\n      this.handleClose(err)\n    }\n\n    return promise\n  }\n\n  setSessionId(sessionId) {\n    this.sessionId = sessionId\n    this.transport.setParam('sid', sessionId)\n  }\n\n  connected() {\n    if (this.state === 'connected') return\n\n    this.logger.info('connected')\n\n    this[STATE] = 'connected'\n\n    if (this.recovering) {\n      // Make sure channels moved to disconnect state\n      this.hub.subscriptions\n        .all()\n        .forEach(subscription =>\n          subscription.notify(\n            'disconnected',\n            new DisconnectedError('recovery_failed')\n          )\n        )\n    }\n\n    // Re-subscribe channels\n    this.hub.subscriptions\n      .all()\n      .forEach(subscription => this._resubscribe(subscription))\n\n    let restored = false\n    this.recovering = false\n\n    if (this.initialConnect) {\n      this.initialConnect = false\n      this.emit('connect', { reconnect: false, restored })\n    } else {\n      this.emit('connect', { reconnect: true, restored })\n    }\n  }\n\n  restored(remoteIds) {\n    this.logger.info('connection recovered', { remoteIds })\n\n    this[STATE] = 'connected'\n\n    this.hub.subscriptions.all().forEach(subscription => {\n      if (\n        remoteIds &&\n        subscription.remoteId &&\n        remoteIds.includes(subscription.remoteId)\n      ) {\n        subscription.notify('restored')\n      } else {\n        subscription.notify(\n          'disconnected',\n          new DisconnectedError('recovery_failed')\n        )\n        this._resubscribe(subscription)\n      }\n    })\n\n    let reconnect = !this.initialConnect\n    let restored = true\n\n    this.recovering = false\n    this.initialConnect = false\n\n    this.emit('connect', { reconnect, restored })\n  }\n\n  handleClose(err) {\n    this.logger.debug('transport closed', { error: err })\n\n    this.disconnected(new DisconnectedError(err, 'transport_closed'))\n  }\n\n  disconnected(err) {\n    if (!(this.state === 'connected' || this.state === 'connecting')) {\n      return\n    }\n\n    this.logger.info('disconnected', { reason: err })\n\n    this[STATE] = 'disconnected'\n\n    this.recovering = this.protocol.recoverableClosure(err)\n\n    if (this.recovering) {\n      this.hub.subscriptions\n        .all()\n        .forEach(subscription => subscription.notify('connecting'))\n    } else {\n      this.hub.subscriptions.all().forEach(subscription => {\n        subscription.notify('disconnected', err)\n      })\n    }\n\n    this.protocol.reset(err)\n    this.hub.close()\n    this.transport.close()\n\n    this.emit('disconnect', err)\n  }\n\n  closed(reason) {\n    if (this.state === 'closed' || this.state === 'idle') return\n\n    let err\n\n    if (reason) {\n      err =\n        reason instanceof DisconnectedError\n          ? reason\n          : new DisconnectedError(reason, undefined)\n    }\n\n    this.logger.info('closed', { reason: reason || 'user' })\n\n    this[STATE] = 'closed'\n\n    // Channels must transition to the disconnected phase,\n    // since they got reconnected as soon as cable reconnects\n    let channelErr = err || new DisconnectedError('cable_closed')\n    this.hub.subscriptions\n      .all()\n      .forEach(subscription => subscription.notify('disconnected', channelErr))\n\n    this.hub.close()\n    this.protocol.reset()\n    this.transport.close()\n\n    this.initialConnect = true\n\n    this.emit('close', err)\n  }\n\n  disconnect() {\n    this.closed()\n  }\n\n  handleIncoming(raw) {\n    if (this.state === 'closed' || this.state === 'idle') {\n      return\n    }\n\n    let data = this.encoder.decode(raw)\n\n    if (data === undefined) {\n      this.logger.error('failed to decode message', { message: raw })\n      return\n    }\n\n    this.logger.debug('incoming data', data)\n\n    let processed = this.protocol.receive(data)\n\n    if (processed) {\n      this.logger.debug('processed incoming message', processed)\n\n      let { identifier, message, meta } = processed\n\n      this.hub.transmit(identifier, message, meta)\n    }\n  }\n\n  send(msg) {\n    if (this.state === 'closed') {\n      throw Error('Cable is closed')\n    }\n\n    let data = this.encoder.encode(msg)\n\n    if (data === undefined) {\n      this.logger.error('failed to encode message', { message: msg })\n      return\n    }\n\n    this.logger.debug('outgoing message', msg)\n\n    this.transport.send(data)\n  }\n\n  keepalive(msg) {\n    this.emit('keepalive', msg)\n  }\n\n  streamFrom(name) {\n    let channel = new PubSubChannel({ stream_name: name })\n\n    return this.subscribe(channel)\n  }\n\n  streamFromSigned(name) {\n    let channel = new PubSubChannel({ signed_stream_name: name })\n\n    return this.subscribe(channel)\n  }\n\n  subscribeTo(ChannelClass, params) {\n    let channel\n    let ghostName\n\n    if (typeof ChannelClass === 'string') {\n      ghostName = ChannelClass\n      ChannelClass = GhostChannel\n    }\n\n    channel = ghostName\n      ? new ChannelClass(ghostName, params)\n      : new ChannelClass(params)\n\n    return this.subscribe(channel)\n  }\n\n  subscribe(channel) {\n    // Return if channel has been already attached to the cable\n    if (!channel.attached(this)) return channel\n\n    let identifier = channel.identifier\n\n    channel.connecting()\n\n    let subscription =\n      this.hub.subscriptions.get(identifier) ||\n      this.hub.subscriptions.create(identifier, {\n        subscribe: sub => {\n          return this._subscribe(sub, channel.channelId, channel.params)\n        },\n        unsubscribe: sub => this._unsubscribe(sub)\n      })\n\n    subscription.add(channel)\n\n    if (\n      subscription.intent === 'subscribed' &&\n      subscription.state === 'connected'\n    ) {\n      channel.connected()\n    }\n\n    subscription.ensureSubscribed()\n\n    return channel\n  }\n\n  async _resubscribe(subscription) {\n    if (subscription.intent !== 'subscribed') return\n\n    let channel = subscription.channels[0]\n\n    if (!channel) return\n\n    subscription.notify('connecting')\n    subscription.ensureResubscribed()\n  }\n\n  async _subscribe(subscription, channelId, params) {\n    let identifier = subscription.id\n\n    if (this.state === 'idle') {\n      // Trigger connection initialization if it is lazy\n      this.connect().catch(() => {})\n    }\n\n    // We will call _subscribe again as soon as cable connected\n    if (this.state !== 'connected') {\n      this.logger.debug('cancel subscribe, no connection', { identifier })\n      return\n    }\n\n    this.logger.debug('acquiring subscribe lock', { identifier })\n\n    let lock = await subscription.acquire('subscribed')\n    if (lock.canceled) {\n      this.logger.debug('subscribe lock has been canceled', { identifier })\n      lock.release()\n      return\n    }\n\n    this.logger.debug('subscribe lock has been acquired', { identifier })\n\n    if (subscription.intent !== 'subscribed') {\n      this.logger.debug('cancel subscribe request, already unsubscribed')\n      lock.release()\n      return\n    }\n\n    // We need to check one more time after a lock has been acquired\n    if (this.state !== 'connected') {\n      this.logger.debug('cancel subscribe, no connection', { identifier })\n      lock.release()\n      return\n    }\n\n    // Finally, check whether we already connected \u2014 then we can skip the action\n    if (subscription.state === 'connected') {\n      this.logger.debug('already connected, skip subscribe command', {\n        identifier\n      })\n      subscription.notify('connected')\n      lock.release()\n      return\n    }\n\n    let channelMeta = {\n      identifier: channelId,\n      params\n    }\n\n    this.logger.debug('subscribing', channelMeta)\n\n    try {\n      let remoteId = await this.protocol.subscribe(channelId, params)\n\n      this.hub.subscribe(identifier, remoteId)\n\n      this.logger.debug('subscribed', { ...channelMeta, remoteId })\n      subscription.notify('connected')\n    } catch (err) {\n      if (err) {\n        if (err instanceof SubscriptionRejectedError) {\n          this.logger.warn('rejected', channelMeta)\n        }\n\n        if (err instanceof DisconnectedError) {\n          this.logger.debug(\n            'disconnected during subscription; will retry on connect',\n            channelMeta\n          )\n          lock.release()\n          return\n        }\n\n        this.logger.error('failed to subscribe', {\n          error: err,\n          ...channelMeta\n        })\n      }\n\n      subscription.close(err)\n      this.hub.unsubscribe(identifier)\n    }\n\n    lock.release()\n  }\n\n  unsubscribe(channel) {\n    let identifier = channel.identifier\n\n    let subscription = this.hub.subscriptions.get(identifier)\n\n    if (!subscription) {\n      throw Error(`Subscription not found: ${identifier}`)\n    }\n\n    subscription.remove(channel)\n    channel.closed()\n\n    subscription.maybeUnsubscribe()\n  }\n\n  async _unsubscribe(subscription) {\n    let identifier = subscription.id\n\n    this.logger.debug('acquiring unsubscribe lock', { identifier })\n\n    let lock = await subscription.acquire('unsubscribed')\n    if (lock.canceled) {\n      this.logger.debug('unsubscribe lock has been canceled', { identifier })\n      lock.release()\n      return\n    }\n\n    this.logger.debug('unsubscribe lock has been acquired', { identifier })\n\n    // Check if we still want to unsubscribe\n    if (subscription.intent !== 'unsubscribed') {\n      this.logger.debug('cancel unsubscribe, no longer needed', {\n        identifier,\n        intent: subscription.intent\n      })\n      lock.release()\n      return\n    }\n\n    // Finally, check whether we already disconnected \u2014 then we can skip the action\n    if (\n      subscription.state === 'disconnected' ||\n      subscription.state === 'closed'\n    ) {\n      this.logger.debug(\n        `already ${subscription.state} connected, skip unsubscribe command`,\n        { identifier }\n      )\n      lock.release()\n      return\n    }\n\n    let remoteId = subscription.remoteId\n\n    this.logger.debug('unsubscribing...', { remoteId })\n\n    if (this.state !== 'connected') {\n      this.logger.debug('unsubscribe skipped (cable is not connected)', {\n        id: identifier\n      })\n      subscription.close()\n      this.hub.unsubscribe(identifier)\n      lock.release()\n      return\n    }\n\n    try {\n      await this.protocol.unsubscribe(remoteId)\n      this.logger.debug('unsubscribed remotely', { id: identifier })\n    } catch (err) {\n      if (err) {\n        // We assume that server unsubscribes subscriptions on disconnect,\n        // So we can mark it as closed locally.\n        if (err instanceof DisconnectedError) {\n          this.logger.debug(\n            'cable disconnected during the unsubscribe command execution',\n            { id: identifier, error: err }\n          )\n        } else {\n          this.logger.error('unsubscribe failed', {\n            id: identifier,\n            error: err\n          })\n        }\n      }\n    }\n\n    if (subscription.intent === 'unsubscribed') {\n      subscription.close()\n      this.hub.unsubscribe(identifier)\n    } else {\n      // We rely on state when performing commands,\n      // make sure it's set to closed here (it shouldn't stay connected)\n      subscription.state = 'closed'\n    }\n\n    lock.release()\n  }\n\n  async perform(identifier, action, payload) {\n    if (this.state === 'connecting') {\n      await this.pendingConnect()\n    }\n\n    if (this.state === 'closed' || this.state === 'disconnected') {\n      throw new NoConnectionError()\n    }\n\n    let subscription = this.hub.subscriptions.get(identifier)\n\n    if (!subscription) {\n      throw Error(`Subscription not found: ${identifier}`)\n    }\n\n    await subscription.pending('subscribed')\n\n    if (subscription.intent !== 'subscribed') {\n      throw Error(`Subscription is closed: ${identifier}`)\n    }\n\n    let remoteId = subscription.remoteId\n\n    let performMeta = {\n      id: remoteId,\n      action,\n      payload\n    }\n\n    this.logger.debug('perform', performMeta)\n\n    try {\n      let res = await this.protocol.perform(remoteId, action, payload)\n\n      if (res) {\n        this.logger.debug('perform result', {\n          message: res,\n          request: performMeta\n        })\n      }\n\n      return res\n    } catch (err) {\n      this.logger.error('perform failed', {\n        error: err,\n        request: performMeta\n      })\n\n      throw err\n    }\n  }\n\n  on(event, callback) {\n    return this.emitter.on(event, callback)\n  }\n\n  once(event, callback) {\n    let unbind = this.emitter.on(event, (...args) => {\n      unbind()\n      callback(...args)\n    })\n    return unbind\n  }\n\n  emit(event, ...args) {\n    return this.emitter.emit(event, ...args)\n  }\n\n  pendingConnect() {\n    if (this._pendingConnect) return this._pendingConnect\n\n    this._pendingConnect = new Promise((resolve, reject) => {\n      let unbind = [() => delete this._pendingConnect]\n\n      unbind.push(\n        this.on('connect', () => {\n          unbind.forEach(clbk => clbk())\n          resolve()\n        })\n      )\n      unbind.push(\n        this.on('close', err => {\n          unbind.forEach(clbk => clbk())\n          reject(err)\n        })\n      )\n      unbind.push(\n        this.on('disconnect', err => {\n          unbind.forEach(clbk => clbk())\n          reject(err)\n        })\n      )\n    })\n\n    return this._pendingConnect\n  }\n}\n", "/*eslint n/no-unsupported-features/es-syntax: [\"error\", {version: \"14.0\"}] */\nimport { StaleConnectionError } from '../protocol/index.js'\nimport { NoopLogger } from '../logger/index.js'\n\nconst defaults = {\n  maxMissingPings: 2,\n  maxReconnectAttempts: Infinity\n}\n\nconst now = () => Date.now()\n\nexport const backoffWithJitter = (interval, opts) => {\n  opts = opts || {}\n  let { backoffRate, jitterRatio, maxInterval } = opts\n  backoffRate = backoffRate || 2\n  if (jitterRatio === undefined) jitterRatio = 0.5\n\n  return attempts => {\n    let left = interval * backoffRate ** attempts\n    let right = left * backoffRate\n\n    let delay = left + (right - left) * Math.random()\n\n    let deviation = 2 * (Math.random() - 0.5) * jitterRatio\n\n    delay = delay * (1 + deviation)\n\n    if (maxInterval && maxInterval < delay) delay = maxInterval\n\n    return delay\n  }\n}\n\nexport class Monitor {\n  constructor({ pingInterval, ...opts }) {\n    this.pingInterval = pingInterval\n\n    if (!this.pingInterval) {\n      throw Error(`Incorrect pingInterval is provided: ${pingInterval}`)\n    }\n\n    opts = Object.assign({}, defaults, opts)\n\n    this.strategy = opts.reconnectStrategy\n    if (!this.strategy) {\n      throw Error('Reconnect strategy must be provided')\n    }\n\n    this.maxMissingPings = opts.maxMissingPings\n    this.maxReconnectAttempts = opts.maxReconnectAttempts\n    this.logger = opts.logger || new NoopLogger()\n\n    this.state = 'pending_connect'\n    this.attempts = 0\n    this.disconnectedAt = now()\n  }\n\n  watch(target) {\n    this.target = target\n    this.initListeners()\n  }\n\n  reconnectNow() {\n    if (\n      this.state === 'connected' ||\n      this.state === 'pending_connect' ||\n      this.state === 'closed'\n    ) {\n      return false\n    }\n\n    this.cancelReconnect()\n\n    this.state = 'pending_connect'\n    this.target.connect().catch(err => {\n      this.logger.info('Failed at reconnecting: ' + err)\n    })\n\n    return true\n  }\n\n  initListeners() {\n    this.unbind = []\n\n    this.unbind.push(\n      this.target.on('connect', () => {\n        this.attempts = 0\n        this.pingedAt = now()\n        this.state = 'connected'\n\n        this.cancelReconnect()\n        this.startPolling()\n      })\n    )\n\n    this.unbind.push(\n      this.target.on('disconnect', () => {\n        this.disconnectedAt = now()\n        this.state = 'disconnected'\n\n        this.stopPolling()\n        this.scheduleReconnect()\n      })\n    )\n\n    this.unbind.push(\n      this.target.on('close', () => {\n        this.disconnectedAt = now()\n        this.state = 'closed'\n\n        this.cancelReconnect()\n        this.stopPolling()\n      })\n    )\n\n    this.unbind.push(\n      this.target.on('keepalive', () => {\n        this.pingedAt = now()\n      })\n    )\n\n    this.unbind.push(() => {\n      this.cancelReconnect()\n      this.stopPolling()\n    })\n  }\n\n  dispose() {\n    delete this.target\n    if (this.unbind) {\n      this.unbind.forEach(clbk => clbk())\n    }\n    delete this.unbind\n  }\n\n  startPolling() {\n    if (this.pollId) {\n      clearTimeout(this.pollId)\n    }\n\n    let pollDelay =\n      this.pingInterval + (Math.random() - 0.5) * this.pingInterval * 0.5\n\n    this.pollId = setTimeout(() => {\n      this.checkStale()\n      if (this.state === 'connected') this.startPolling()\n    }, pollDelay)\n  }\n\n  stopPolling() {\n    if (this.pollId) {\n      clearTimeout(this.pollId)\n    }\n  }\n\n  checkStale() {\n    let diff = now() - this.pingedAt\n\n    if (diff > this.maxMissingPings * this.pingInterval) {\n      this.logger.warn(`Stale connection: ${diff}ms without pings`)\n      this.state = 'pending_disconnect'\n      this.target.disconnected(new StaleConnectionError())\n    }\n  }\n\n  scheduleReconnect() {\n    if (this.attempts >= this.maxReconnectAttempts) {\n      this.target.close()\n      return\n    }\n\n    let delay = this.strategy(this.attempts)\n\n    this.attempts++\n\n    this.logger.info(`Reconnecting in ${delay}ms (${this.attempts} attempt)`)\n\n    this.state = 'pending_reconnect'\n\n    this.reconnnectId = setTimeout(() => this.reconnectNow(), delay)\n  }\n\n  cancelReconnect() {\n    if (this.reconnnectId) {\n      clearTimeout(this.reconnnectId)\n      delete this.reconnnectId\n    }\n  }\n}\n", "import { createNanoEvents } from 'nanoevents'\n\nimport { NoopLogger } from '../logger/index.js'\n\nexport class FallbackTransport {\n  constructor(transports, opts = {}) {\n    this.transports = transports\n    this.transport = null\n    this.emitter = createNanoEvents()\n    this.unbind = []\n\n    this.logger = opts.logger || new NoopLogger()\n  }\n\n  displayName() {\n    return 'fallbacked transport'\n  }\n\n  async open() {\n    for (let i = 0; i < this.transports.length; i++) {\n      let transport = this.transports[i]\n      try {\n        this.transport = transport\n        this.resetListeners()\n        this.logger.debug(`Trying to connect via ${transport.displayName()}`)\n        await transport.open()\n        this.logger.debug(`Connected via ${transport.displayName()}`)\n        return\n      } catch (e) {\n        this.logger.debug(\n          `Failed to connect via ${transport.displayName()}: ${e.message}`\n        )\n      }\n    }\n\n    this.transport = null\n    this.resetListeners()\n    throw new Error(`Couldn't connect via any available transport`)\n  }\n\n  send(data) {\n    if (!this.transport) {\n      throw new Error('No transport is open')\n    }\n\n    this.transport.send(data)\n  }\n\n  async close() {\n    if (!this.transport) {\n      throw new Error('No transport is open')\n    }\n\n    await this.transport.close()\n    this.transport = null\n  }\n\n  setURL() {\n    throw new Error('Not implemented. Set URL for each transport separately')\n  }\n\n  setParam(key, val) {\n    this.transports.forEach(transport => {\n      transport.setParam(key, val)\n    })\n  }\n\n  on(event, callback) {\n    return this.emitter.on(event, callback)\n  }\n\n  once(event, callback) {\n    let unbind = this.emitter.on(event, (...args) => {\n      unbind()\n      callback(...args)\n    })\n    return unbind\n  }\n\n  get url() {\n    if (!this.transport) return ''\n\n    return this.transport.url\n  }\n\n  resetListeners() {\n    this.unbind.forEach(clbk => clbk())\n    this.unbind.length = 0\n\n    if (!this.transport) return\n\n    this.unbind.push(\n      this.transport.on('open', () => {\n        this.emitter.emit('open')\n      }),\n      this.transport.on('data', data => {\n        this.emitter.emit('data', data)\n      }),\n      this.transport.on('close', ev => {\n        this.emitter.emit('close', ev)\n      }),\n      this.transport.on('error', ev => {\n        this.emitter.emit('error', ev)\n      })\n    )\n  }\n}\n", "import { createNanoEvents } from 'nanoevents'\n\nexport class WebSocketTransport {\n  constructor(url, opts = {}) {\n    this.url = url\n\n    let Impl = opts.websocketImplementation\n\n    if (Impl) {\n      this.Impl = Impl\n    } else if (typeof WebSocket !== 'undefined') {\n      this.Impl = WebSocket\n    } else {\n      throw new Error('No WebSocket support')\n    }\n\n    this.connected = false\n    this.emitter = createNanoEvents()\n\n    let { format, subprotocol } = opts\n\n    this.format = format || 'text'\n    this.connectionOptions = opts.websocketOptions\n    this.subprotocol = subprotocol\n  }\n\n  displayName() {\n    return 'WebSocket(' + this.url + ')'\n  }\n\n  open() {\n    if (this.connectionOptions) {\n      this.ws = new this.Impl(\n        this.url,\n        this.subprotocol,\n        this.connectionOptions\n      )\n    } else {\n      this.ws = new this.Impl(this.url, this.subprotocol)\n    }\n    this.ws.binaryType = 'arraybuffer'\n    this.initListeners()\n\n    return new Promise((resolve, reject) => {\n      let unbind = []\n\n      unbind.push(\n        this.once('open', () => {\n          unbind.forEach(clbk => clbk())\n          resolve()\n        })\n      )\n\n      unbind.push(\n        this.once('close', () => {\n          unbind.forEach(clbk => clbk())\n          reject(Error('WS connection closed'))\n        })\n      )\n    })\n  }\n\n  setURL(url) {\n    this.url = url\n  }\n\n  setParam(key, val) {\n    let url = new URL(this.url)\n    url.searchParams.set(key, val)\n    let newURL = `${url.protocol}//${url.host}${url.pathname}?${url.searchParams}`\n    this.setURL(newURL)\n  }\n\n  send(data) {\n    if (!this.ws || !this.connected) {\n      throw Error('WebSocket is not connected')\n    } else {\n      this.ws.send(data)\n    }\n  }\n\n  close() {\n    if (this.ws) {\n      this.onclose()\n    } else {\n      this.connected = false\n    }\n  }\n\n  on(event, callback) {\n    return this.emitter.on(event, callback)\n  }\n\n  once(event, callback) {\n    let unbind = this.emitter.on(event, (...args) => {\n      unbind()\n      callback(...args)\n    })\n    return unbind\n  }\n\n  initListeners() {\n    this.ws.onerror = event => {\n      // Only emit errors if the socket hasn't been closed\n      if (this.connected) {\n        this.emitter.emit('error', event.error || new Error('WS Error'))\n      }\n    }\n\n    this.ws.onclose = () => {\n      this.onclose()\n    }\n\n    this.ws.onmessage = event => {\n      let data = event.data\n      if (this.format === 'binary') {\n        data = new Uint8Array(data)\n      }\n\n      this.emitter.emit('data', data)\n    }\n\n    this.ws.onopen = () => {\n      this.connected = true\n      this.emitter.emit('open')\n    }\n  }\n\n  onclose() {\n    this.ws.onclose = undefined\n    this.ws.onmessage = undefined\n    this.ws.onopen = undefined\n    this.ws.close()\n    delete this.ws\n    this.connected = false\n\n    this.emitter.emit('close')\n  }\n}\n", "import { Cable, GhostChannel } from '../cable/index.js'\nimport { ActionCableProtocol } from '../action_cable/index.js'\nimport { ActionCableExtendedProtocol } from '../action_cable_ext/index.js'\nimport { JSONEncoder } from '../encoder/index.js'\nimport { NoopLogger } from '../logger/index.js'\nimport { WebSocketTransport } from '../websocket/index.js'\nimport { Monitor, backoffWithJitter } from '../monitor/index.js'\nimport { SubscriptionRejectedError } from '../protocol/index.js'\nimport { FallbackTransport } from '../transport/index.js'\n\nexport const DEFAULT_OPTIONS = {\n  protocol: 'actioncable-v1-json',\n  pingInterval: 3000,\n  maxReconnectAttempts: Infinity,\n  maxMissingPings: 2,\n  logLevel: 'warn',\n  lazy: true\n}\n\nexport function createCable(url, opts) {\n  if (typeof url === 'object' && typeof opts === 'undefined') {\n    opts = url\n    url = undefined\n  }\n\n  opts = opts || {}\n\n  if (!url && !opts.transport) throw Error('URL or transport must be specified')\n\n  opts = Object.assign({}, DEFAULT_OPTIONS, opts)\n\n  let {\n    protocol,\n    websocketImplementation,\n    websocketFormat,\n    websocketOptions,\n    fallbacks,\n    logLevel,\n    logger,\n    transport,\n    encoder,\n    lazy,\n    monitor,\n    pingInterval,\n    reconnectStrategy,\n    maxMissingPings,\n    maxReconnectAttempts,\n    subprotocol,\n    tokenRefresher,\n    historyTimestamp,\n    protocolOptions,\n    concurrentSubscribes\n  } = opts\n\n  logger = logger || new NoopLogger(logLevel)\n\n  if (typeof protocol === 'string') {\n    subprotocol = subprotocol || protocol\n\n    // split protocol into two parts by last '-' symbol\n    // e.g. actioncable-v1-json -> actioncable-v1, json\n    let protocolName = protocol.substring(0, protocol.lastIndexOf('-'))\n    let protocolEncoderName = protocol.substring(protocol.lastIndexOf('-') + 1)\n\n    protocolOptions = protocolOptions || {}\n\n    if (protocolName === 'actioncable-v1') {\n      protocol = new ActionCableProtocol({ logger, ...protocolOptions })\n    } else if (protocolName === 'actioncable-v1-ext') {\n      protocol = new ActionCableExtendedProtocol({\n        logger,\n        historyTimestamp,\n        ...protocolOptions\n      })\n    } else {\n      throw Error(`Protocol is not supported yet: ${protocol}`)\n    }\n\n    if (protocolEncoderName === 'json') {\n      encoder = encoder || new JSONEncoder()\n      websocketFormat = websocketFormat || 'text'\n    } else if (protocolEncoderName === 'msgpack') {\n      websocketFormat = 'binary'\n      if (!encoder) {\n        throw Error(\n          'Msgpack encoder must be specified explicitly. Use `@anycable/msgpack-encoder` package or build your own'\n        )\n      }\n    } else if (protocolEncoderName === 'protobuf') {\n      websocketFormat = websocketFormat || 'binary'\n      if (!encoder) {\n        throw Error(\n          'Protobuf encoder must be specified explicitly. Use `@anycable/protobuf-encoder` package or build your own'\n        )\n      }\n    } else {\n      throw Error(`Protocol is not supported yet: ${protocol}`)\n    }\n  }\n\n  if (!protocol) throw Error('Protocol must be specified')\n\n  transport =\n    transport ||\n    new WebSocketTransport(url, {\n      websocketImplementation,\n      websocketOptions,\n      subprotocol,\n      format: websocketFormat\n    })\n\n  if (fallbacks) {\n    transport = new FallbackTransport([transport, ...fallbacks], { logger })\n  }\n\n  reconnectStrategy = reconnectStrategy || backoffWithJitter(pingInterval)\n\n  if (monitor !== false) {\n    monitor =\n      monitor ||\n      new Monitor({\n        pingInterval,\n        reconnectStrategy,\n        maxMissingPings,\n        maxReconnectAttempts,\n        logger\n      })\n  }\n\n  let hubOptions = { concurrentSubscribes }\n\n  let cable = new Cable({\n    protocol,\n    transport,\n    encoder,\n    logger,\n    lazy,\n    hubOptions\n  })\n\n  if (monitor) {\n    monitor.watch(cable)\n    cable.monitor = monitor\n  }\n\n  if (tokenRefresher) {\n    watchForExpiredToken(cable, async () => {\n      try {\n        await tokenRefresher(transport)\n      } catch (err) {\n        logger.error('Failed to refresh authentication token: ' + err)\n        return false\n      }\n\n      // Initiate cable connection.\n      // No need to wait for it to complete, it could\n      // fail due to network errors (which is not our responsibility)\n      cable.connect().catch(() => {})\n\n      return true\n    })\n  }\n\n  return cable\n}\n\nfunction watchForExpiredToken(cable, callback) {\n  let attempted = false\n\n  cable.on('connect', () => (attempted = false))\n\n  cable.on('close', async ev => {\n    if (!ev) return\n\n    // If we closed by server two times in a row\n    if (attempted) {\n      cable.logger.warn('Token auto-refresh is disabled', ev)\n      return\n    }\n\n    if (ev.reason === 'token_expired') {\n      attempted = true\n\n      await callback()\n    }\n  })\n}\n\n// Wrapper over ActionCableChannel that acts like an Action Cable subscription object\nclass ActionCableSubscription {\n  constructor(channel) {\n    this.channel = channel\n  }\n\n  notify(callback, ...args) {\n    if (typeof this[callback] !== 'function') return\n\n    this[callback](...args)\n  }\n\n  perform(action, data = {}) {\n    this.channel.perform(action, data)\n  }\n\n  send(data) {\n    this.channel.send(data)\n  }\n\n  get identifier() {\n    return this.channel.identifier\n  }\n\n  unsubscribe() {\n    return this.channel.disconnect()\n  }\n}\n\nclass ActionCableChannel extends GhostChannel {\n  constructor(channelName, params, mixin) {\n    super(channelName, params)\n\n    this.subscription = new ActionCableSubscription(this)\n    Object.assign(this.subscription, mixin)\n\n    this.on('connect', () => this.subscription.notify('connected'))\n    this.on('disconnect', () =>\n      this.subscription.notify('disconnected', { allowReconnect: true })\n    )\n    this.on('message', val => this.subscription.notify('received', val))\n    this.on('close', err => {\n      if (err && err instanceof SubscriptionRejectedError) {\n        this.subscription.notify('rejected')\n      } else {\n        this.subscription.notify('disconnected', { allowReconnect: false })\n      }\n    })\n  }\n}\n\nexport class ActionCableSubscriptions {\n  constructor(cable) {\n    this.cable = cable\n  }\n\n  create(channel, mixin) {\n    let channelName\n    let params\n\n    if (typeof channel === 'object') {\n      channelName = channel.channel\n      delete channel.channel\n      params = channel\n    } else {\n      channelName = channel\n      params = {}\n    }\n\n    let cableChannel = new ActionCableChannel(channelName, params, mixin)\n    cableChannel.subscription.notify('initialized')\n\n    this.cable.subscribe(cableChannel)\n\n    return cableChannel.subscription\n  }\n\n  findAll(identifier) {\n    return this.cable.hub.channels\n      .filter(channel => channel.identifier === identifier)\n      .map(channel => channel.subscription)\n  }\n}\n\nexport class ActionCableConsumer {\n  constructor(cable) {\n    this.cable = cable\n    this.subscriptions = new ActionCableSubscriptions(cable)\n  }\n}\n\nexport function createConsumer(url, opts) {\n  let cable = createCable(url, opts)\n\n  return new ActionCableConsumer(cable)\n}\n", "import { BaseLogger } from '@anycable/core'\n\n/* eslint-disable no-console */\nexport class Logger extends BaseLogger {\n  writeLogEntry(level, msg, details) {\n    if (details) {\n      console[level](msg, details)\n    } else {\n      console[level](msg)\n    }\n  }\n}\n", "import { Monitor as BaseMonitor, DisconnectedError } from '@anycable/core'\n\nexport class Monitor extends BaseMonitor {\n  watch(cable) {\n    super.watch(cable)\n\n    this.initActivityListeners()\n  }\n\n  initActivityListeners() {\n    if (\n      typeof document !== 'undefined' &&\n      typeof window !== 'undefined' &&\n      document.addEventListener &&\n      window.addEventListener\n    ) {\n      let visibility = () => {\n        if (!document.hidden) {\n          if (this.reconnectNow()) {\n            this.logger.debug('Trigger reconnect due to visibility change')\n          }\n        }\n      }\n      let connect = event => {\n        if (this.reconnectNow()) {\n          this.logger.debug('Trigger reconnect', { event })\n        }\n      }\n      let disconnectFrozen = () =>\n        this.disconnect(new DisconnectedError('page_frozen'))\n\n      document.addEventListener('visibilitychange', visibility, false)\n      window.addEventListener('focus', connect, false)\n      window.addEventListener('online', connect, false)\n      window.addEventListener('resume', connect, false)\n      window.addEventListener('freeze', disconnectFrozen, false)\n\n      this.unbind.push(() => {\n        document.removeEventListener('visibilitychange', visibility, false)\n        window.removeEventListener('focus', connect, false)\n        window.removeEventListener('online', connect, false)\n        window.removeEventListener('resume', connect, false)\n        window.removeEventListener('freeze', disconnectFrozen, false)\n      })\n    }\n  }\n\n  disconnect(err) {\n    if (this.state === 'disconnected' || this.state === 'closed') return\n\n    this.logger.info('Disconnecting', { reason: err.message })\n\n    this.cancelReconnect()\n    this.stopPolling()\n\n    this.state = 'pending_disconnect'\n    this.target.disconnected(err)\n  }\n}\n", "// TODO: Export generateUrlFromDOM from the upstream:\n//       https://github.com/anycable/anycable-client/blob/master/packages/web/index.js\n\nconst metaPrefixes = ['cable', 'action-cable']\n\nconst defaultUrl = '/cable'\n\n/* eslint-disable consistent-return */\nconst fetchMeta = (doc, key) => {\n  for (let prefix of metaPrefixes) {\n    let element = doc.head.querySelector(`meta[name='${prefix}-${key}']`)\n\n    if (element) {\n      return element.getAttribute('content')\n    }\n  }\n}\n\nconst absoluteWSUrl = path => {\n  if (path.match(/wss?:\\/\\//)) return path\n\n  if (typeof window !== 'undefined') {\n    let proto = window.location.protocol.replace('http', 'ws')\n\n    return `${proto}//${window.location.host}${path}`\n  }\n\n  return path\n}\n\n/* eslint-disable consistent-return */\nconst generateUrlFromDOM = () => {\n  if (typeof document !== 'undefined' && document.head) {\n    let url = fetchMeta(document, 'url')\n    if (url) {\n      return absoluteWSUrl(url)\n    }\n  }\n\n  return absoluteWSUrl(defaultUrl)\n}\n\nexport default generateUrlFromDOM\n", "export { TurboChannel } from './channel.js'\nexport { start, DEFAULT_SOCKET_HEADER } from './start.js'\n", "import { Channel } from '@anycable/core'\n\nexport class TurboChannel extends Channel {\n  static identifier = '__turbo__'\n\n  constructor(element, channelId, params) {\n    super(params)\n    this.element = element\n    this.channelId = channelId\n  }\n\n  set channelId(val) {\n    this._channelId = val\n  }\n\n  get channelId() {\n    return this._channelId\n  }\n}\n", "import { TurboStreamSourceElement } from './stream_source_element.js'\nimport { TurboChannel } from './channel.js'\n\nexport const DEFAULT_SOCKET_HEADER = 'X-Socket-ID'\n\nexport function start(cable, opts = {}) {\n  let tagName = opts.tagName || 'turbo-cable-stream-source'\n  let channelClass = opts.channelClass || TurboChannel\n  let delayedUnsubscribe = opts.delayedUnsubscribe || 0\n\n  if (delayedUnsubscribe === true) delayedUnsubscribe = 300\n\n  let C = class extends TurboStreamSourceElement {}\n\n  C.cable = cable\n  C.channelClass = channelClass\n  C.delayedUnsubscribe = delayedUnsubscribe\n\n  if (customElements.get(tagName) === undefined) {\n    customElements.define(tagName, C)\n  }\n\n  if (opts.requestSocketIDHeader) {\n    let headerName =\n      opts.requestSocketIDHeader === true\n        ? DEFAULT_SOCKET_HEADER\n        : opts.requestSocketIDHeader\n\n    document.addEventListener('turbo:before-fetch-request', event => {\n      if (cable.sessionId && !event.detail.fetchOptions.headers[headerName]) {\n        event.detail.fetchOptions.headers[headerName] = cable.sessionId\n      }\n    })\n  }\n}\n", "import { connectStreamSource, disconnectStreamSource } from '@hotwired/turbo'\n\nimport snakeize from './snakeize.js'\nimport { isPreview } from './turbo.js'\n\nexport class TurboStreamSourceElement extends HTMLElement {\n  static cable\n  static channelClass\n  static delayedUnsubscribe\n\n  async connectedCallback() {\n    connectStreamSource(this)\n\n    if (isPreview()) return\n\n    let cable = this.constructor.cable\n    let ChannelClass = this.constructor.channelClass\n\n    let channelName = this.getAttribute('channel')\n    let signedStreamName = this.getAttribute('signed-stream-name')\n    let params = snakeize({ ...this.dataset })\n\n    this.listeners = []\n\n    this.channel = new ChannelClass(this, channelName, {\n      signed_stream_name: signedStreamName,\n      ...params\n    })\n\n    this.listeners.push(\n      this.channel.on('connect', () => this.setAttribute('connected', ''))\n    )\n\n    this.listeners.push(\n      this.channel.on('disconnect', () => this.removeAttribute('connected'))\n    )\n\n    this.listeners.push(\n      this.channel.on('message', this.dispatchMessageEvent.bind(this))\n    )\n\n    cable.subscribe(this.channel)\n  }\n\n  disconnectedCallback() {\n    disconnectStreamSource(this)\n    if (this.channel) {\n      for (let listener of this.listeners) {\n        listener()\n      }\n      this.listeners.length = 0\n\n      let ch = this.channel\n      let delay = this.constructor.delayedUnsubscribe\n\n      if (delay) {\n        setTimeout(() => ch.disconnect(), delay)\n      } else {\n        ch.disconnect()\n      }\n    }\n  }\n\n  dispatchMessageEvent(data) {\n    let event = new MessageEvent('message', { data })\n    return this.dispatchEvent(event)\n  }\n}\n", "// Based on https://github.com/nathan7/snakeize\n//\n// This software is released under the MIT license:\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\nexport default function walk(obj) {\n  if (!obj || typeof obj !== 'object') return obj\n  if (obj instanceof Date || obj instanceof RegExp) return obj\n  if (Array.isArray(obj)) return obj.map(walk)\n  return Object.keys(obj).reduce((acc, key) => {\n    let camel =\n      key[0].toLowerCase() +\n      key.slice(1).replace(/([A-Z]+)/g, (m, x) => {\n        return '_' + x.toLowerCase()\n      })\n    acc[camel] = walk(obj[key])\n    return acc\n  }, {})\n}\n", "// Returns true if the currently rendered HTML is Turbo preview\nexport function isPreview() {\n  return document.documentElement.hasAttribute('data-turbo-preview')\n}\n", "// Load all the channels within this directory and all subdirectories.\nimport * as Futurism from '@stimulus_reflex/futurism'\nimport consumer from 'cf-utils/application_cable'\n\n// Channel files must be named *_channel.js.\nimport { context as channelContext } from './**/*_channel.js'\n\nif (channelContext) {\n  /* no-op to prevent tree shaking */\n}\n\nFuturism.initializeElements()\nFuturism.createSubscription(consumer)\n", "/* global CustomEvent, setTimeout */\n\nimport CableReady from 'cable_ready'\n\nconst debounceEvents = (callback, delay = 20) => {\n  let timeoutId\n  let events = []\n  return (...args) => {\n    clearTimeout(timeoutId)\n    events = [...events, ...args]\n    timeoutId = setTimeout(() => {\n      timeoutId = null\n      callback(events)\n      events = []\n    }, delay)\n  }\n}\n\nexport const createSubscription = consumer => {\n  consumer.subscriptions.create('Futurism::Channel', {\n    connected () {\n      window.Futurism = this\n      document.addEventListener(\n        'futurism:appear',\n        debounceEvents(events => {\n          this.send({\n            signed_params: events.map(e => e.target.dataset.signedParams),\n            sgids: events.map(e => e.target.dataset.sgid),\n            signed_controllers: events.map(\n              e => e.target.dataset.signedController\n            ),\n            urls: events.map(_ => window.location.href),\n            broadcast_each: events.map(e => e.target.dataset.broadcastEach)\n          })\n        })\n      )\n    },\n\n    received (data) {\n      if (data.cableReady) {\n        CableReady.perform(data.operations, {\n          emitMissingElementWarnings: false\n        })\n\n        document.dispatchEvent(\n          new CustomEvent('futurism:appeared', {\n            bubbles: true,\n            cancelable: true\n          })\n        )\n      }\n    }\n  })\n}\n", "/* global IntersectionObserver, CustomEvent, setTimeout */\n\nconst dispatchAppearEvent = (entry, observer = null) => {\n  if (!window.Futurism) {\n    return () => {\n      setTimeout(() => dispatchAppearEvent(entry, observer)(), 1)\n    }\n  }\n\n  const target = entry.target ? entry.target : entry\n\n  const evt = new CustomEvent('futurism:appear', {\n    bubbles: true,\n    detail: {\n      target,\n      observer\n    }\n  })\n\n  return () => {\n    target.dispatchEvent(evt)\n  }\n}\n\n// from https://advancedweb.hu/how-to-implement-an-exponential-backoff-retry-strategy-in-javascript/#rejection-based-retrying\nconst wait = ms => new Promise(resolve => setTimeout(resolve, ms))\n\nconst callWithRetry = async (fn, depth = 0) => {\n  try {\n    return await fn()\n  } catch (e) {\n    if (depth > 10) {\n      throw e\n    }\n    await wait(1.15 ** depth * 2000)\n\n    return callWithRetry(fn, depth + 1)\n  }\n}\n\nconst observerCallback = (entries, observer) => {\n  entries.forEach(async entry => {\n    if (!entry.isIntersecting) return\n\n    await callWithRetry(dispatchAppearEvent(entry, observer))\n  })\n}\n\nexport const extendElementWithIntersectionObserver = element => {\n  Object.assign(element, {\n    observer: new IntersectionObserver(observerCallback.bind(element), {})\n  })\n\n  if (!element.hasAttribute('keep')) {\n    element.observer.observe(element)\n  }\n}\n\nexport const extendElementWithEagerLoading = element => {\n  if (element.dataset.eager === 'true') {\n    if (element.observer) element.observer.disconnect()\n    callWithRetry(dispatchAppearEvent(element))\n  }\n}\n", "/* global HTMLElement */\n\nimport {\n  extendElementWithIntersectionObserver,\n  extendElementWithEagerLoading\n} from './futurism_utils'\n\nexport default class FuturismElement extends HTMLElement {\n  connectedCallback () {\n    extendElementWithIntersectionObserver(this)\n    extendElementWithEagerLoading(this)\n  }\n}\n", "/* global HTMLTableRowElement */\n\nimport {\n  extendElementWithIntersectionObserver,\n  extendElementWithEagerLoading\n} from './futurism_utils'\n\nexport default class FuturismTableRow extends HTMLTableRowElement {\n  connectedCallback () {\n    extendElementWithIntersectionObserver(this)\n    extendElementWithEagerLoading(this)\n  }\n}\n", "/* global HTMLLIElement */\r\n\r\nimport {\r\n  extendElementWithIntersectionObserver,\r\n  extendElementWithEagerLoading\r\n} from './futurism_utils'\r\n\r\nexport default class FuturismLI extends HTMLLIElement {\r\n  connectedCallback () {\r\n    extendElementWithIntersectionObserver(this)\r\n    extendElementWithEagerLoading(this)\r\n  }\r\n}\r\n", "/* global customElements, sessionStorage */\n\nimport FuturismElement from './futurism_element'\nimport FuturismTableRow from './futurism_table_row'\nimport FuturismLI from './futurism_li'\n\nimport { sha256 } from '../utils/crypto'\n\nconst polyfillCustomElements = () => {\n  const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent)\n\n  if (customElements) {\n    if (isSafari) {\n      document.write(\n        '<script src=\"//unpkg.com/@ungap/custom-elements-builtin\"><\\x2fscript>'\n      )\n    } else {\n      try {\n        customElements.define(\n          'built-in',\n          document.createElement('tr').constructor,\n          { extends: 'tr' }\n        )\n      } catch (_) {\n        document.write(\n          '<script src=\"//unpkg.com/@ungap/custom-elements-builtin\"><\\x2fscript>'\n        )\n      }\n    }\n  } else {\n    document.write(\n      '<script src=\"//unpkg.com/document-register-element\"><\\x2fscript>'\n    )\n  }\n}\n\nconst defineElements = e => {\n  if (!customElements.get('futurism-element')) {\n    customElements.define('futurism-element', FuturismElement)\n    customElements.define('futurism-table-row', FuturismTableRow, {\n      extends: 'tr'\n    })\n    customElements.define('futurism-li', FuturismLI, { extends: 'li' })\n  }\n}\n\nconst cachePlaceholders = e => {\n  sha256(e.detail.element.outerHTML).then(hashedContent => {\n    e.detail.element.setAttribute('keep', '')\n    sessionStorage.setItem(\n      `futurism-${hashedContent}`,\n      e.detail.element.outerHTML\n    )\n    e.target.dataset.futurismHash = hashedContent\n  })\n}\n\nconst restorePlaceholders = e => {\n  const inNamespace = ([key, _payload]) => key.startsWith('futurism-')\n  Object.entries(sessionStorage)\n    .filter(inNamespace)\n    .forEach(([key, payload]) => {\n      const match = /^futurism-(.*)/.exec(key)\n      const targetElement = document.querySelector(\n        `[data-futurism-hash=\"${match[1]}\"]`\n      )\n\n      if (targetElement) {\n        targetElement.outerHTML = payload\n        sessionStorage.removeItem(key)\n      }\n    })\n}\n\nexport const initializeElements = () => {\n  polyfillCustomElements()\n  document.addEventListener('DOMContentLoaded', defineElements)\n  document.addEventListener('turbo:load', defineElements)\n  document.addEventListener('turbo:before-cache', restorePlaceholders)\n  document.addEventListener('turbolinks:load', defineElements)\n  document.addEventListener('turbolinks:before-cache', restorePlaceholders)\n  document.addEventListener('cable-ready:after-outer-html', cachePlaceholders)\n}\n", "/* global crypto */\n\nexport async function sha256 (message) {\n  // encode as UTF-8\n  const msgBuffer = new TextEncoder('utf-8').encode(message)\n\n  // hash the message\n  const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer)\n\n  // convert ArrayBuffer to Array\n  const hashArray = Array.from(new Uint8Array(hashBuffer))\n\n  // convert bytes to hex string\n  const hashHex = hashArray.map(b => ('00' + b.toString(16)).slice(-2)).join('')\n\n  return hashHex\n}\n", "\n          import * as module0 from './users_channel.js'\n          export default [module0.default];\n          export const context = {\n            'users_channel.js': module0.default\n          }\n        ", "import CableReady from 'cable_ready'\nimport consumer from 'cf-utils/application_cable'\n\nconst eventNamespace = 'users-channel'\n\nconst usersChannel = consumer.subscriptions.create('UsersChannel', {\n  connected() {\n    window.usersChannelConnected = true\n    document.dispatchEvent(new CustomEvent(`${eventNamespace}:connected`, { bubbles: true }))\n  },\n  disconnected() {\n    window.usersChannelConnected = false\n    document.dispatchEvent(new CustomEvent(`${eventNamespace}:disconnected`, { bubbles: true }))\n  },\n  received(data) {\n    if (data.cableReady) CableReady.perform(data.operations)\n  },\n})\n\nexport default usersChannel\n", "import { Application, Controller } from '@hotwired/stimulus'\n\n/* Shared/Imported from main application */\nimport AlertController from '../../controllers/alert_controller'\nimport AutoEnableController from '../../controllers/auto_enable_controller'\nimport AutofocusController from '../../controllers/autofocus_controller'\nimport ClasslistController from '../../controllers/classlist_controller'\nimport ClipboardCopyController from '../../controllers/clipboard_copy_controller'\nimport CodeController from '../../controllers/affiliates/code_controller'\nimport CountryAndRegionSelectController from '../../controllers/country_and_region_select_controller'\nimport FieldsPhoneController from '../../controllers/fields/phone_controller'\nimport FieldsPhoneVerificationController from '../../controllers/fields/phone_verification_controller'\nimport IframeMessageRelayController from '../../controllers/iframe_message_relay_controller'\nimport ImageLoaderController from '../../controllers/components/image_loader_controller'\nimport ImageFileFieldPreviewController from '../../controllers/image_file_field_preview_controller'\nimport OrdersPaymentMethodsController from '../../controllers/orders/payment_methods_controller'\nimport ReactivatePaymentGuardController from '../../controllers/orders/reactivate_payment_guard_controller'\nimport StripePaymentController from '../../controllers/orders/stripe_payment_controller.js'\nimport OrdersPlanPreviewController from '../../controllers/orders/plan_preview_controller'\nimport PaymentMethodFormController from '../../controllers/payment_method_form_controller'\nimport PrefetchHandlerController from '../../controllers/prefetch_handler_controller'\nimport RedirectActionController from '../../controllers/redirect_action_controller'\nimport ScrollToController from '../../controllers/scroll_to_controller'\nimport MixpanelController from '../../controllers/mixpanel_controller'\nimport ShareController from '../../controllers/share_controller'\nimport ShortTokenController from '../../controllers/short_token_controller'\nimport SuperSelectAddOptionController from '../../controllers/fields/super_select_add_option_controller'\nimport SuperSelectController from '../../controllers/fields/super_select_controller'\nimport ToggleController from '../../controllers/toggle_controller'\nimport TomSelectController from '../../controllers/fields/tom_select_controller'\nimport ComboboxController from '../../controllers/fields/combobox_controller'\nimport TooltipController from '../../controllers/tooltip_controller'\nimport TrixCodeBlockController from './trix_code_block_controller'\nimport TrixContentLinksTargetBlankController from '../../controllers/trix_content_links_target_blank_controller'\nimport TrixEditorController from '../../controllers/trix_editor_controller'\nimport TruncatedTooltipController from '../../controllers/truncated_tooltip_controller'\nimport UnsavedChangesController from '../../controllers/unsaved_changes_controller'\nimport { Trix, TrixEmbed } from '../../trix'\n\n/* Web Awesome */\nimport WebAwesomeAlertController from '../../controllers/web_awesome/alert_controller'\nimport WebAwesomeBaseController from '../../controllers/web_awesome/base_controller'\nimport WebAwesomeConfirmController from '../../controllers/web_awesome/confirm_controller'\nimport WebAwesomeDialogController from '../../controllers/web_awesome/dialog_controller'\nimport WebAwesomeDrawerController from '../../controllers/web_awesome/drawer_controller'\nimport WebAwesomeDropdownMenuController from '../../controllers/web_awesome/dropdown_menu_controller'\nimport WebAwesomeSwitchController from '../../controllers/web_awesome/switch_controller'\nimport WebAwesomeTabGroupController from '../../controllers/web_awesome/tab_group_controller'\n\n/* Customer Center Specific Controllers */\nimport MobileNavController from './mobile_nav_controller'\nimport DarkModeToggleController from './dark_mode_toggle_controller'\nimport CommunityPostController from './community_post_controller'\nimport CommunityPostViewController from './community_post_view_controller'\nimport CommentFormController from './comment_form_controller'\nimport ConfirmDeleteController from './confirm_delete_controller'\nimport WebAwesomeDropdownController from './dropdown_controller'\nimport LessonTreeController from './lesson_tree_controller'\nimport PostFormController from './post_form_controller'\nimport IframeResizerController from './iframe_resizer_controller'\nimport TrixMentionsController from './trix_mentions_controller'\nimport ActivityChartController from './activity_chart_controller'\nimport ImageCropController from './image_crop_controller'\nimport ToastController from './toast_controller'\nimport DirectImageUploadsController from './direct_image_uploads_controller'\nimport LightboxController from './lightbox_controller'\nimport VideoEmbedsController from './video_embeds_controller'\nimport EmojiDropdownController from './emoji_dropdown_controller'\nimport TrixEmojisController from './trix_emojis_controller'\nimport FormController from './form_controller'\nimport GuestInteractionPromptController from './guest_interaction_prompt_controller'\nimport ScrollNavController from './scroll_nav_controller'\nimport ReadMore from '@stimulus-components/read-more'\nimport SearchController from './search_controller'\nimport ScrollTabsController from './scroll_tabs_controller'\nimport NotificationsController from './notifications_controller'\nimport WebPushSubscriptionController from './web_push_subscription_controller'\nimport WebPushSignOutController from './web_push_sign_out_controller'\nimport WebPushSyncController from './web_push_sync_controller'\n\n/* Bridge Controllers for Hotwire Native */\nimport LeftButtonController from './bridge/left_button_controller'\nimport RightButtonController from './bridge/right_button_controller'\nimport FormControllerBridge from './bridge/form_controller'\nimport MenuController from './bridge/menu_controller'\nimport NavController from './bridge/nav_controller'\nimport NotificationBadgeController from './bridge/notification_badge_controller'\nimport NotificationTokenController from './bridge/notification_token_controller'\nimport NotificationPermissionController from './bridge/notification_permission_controller'\nimport OverflowMenuController from './bridge/overflow_menu_controller'\nimport ResetAppController from './bridge/reset_app_controller'\nimport ReviewPromptController from './bridge/review_prompt_controller'\nimport SignOutController from './bridge/sign_out_controller'\nimport OpenSettingsController from './bridge/open_settings_controller'\n\nconst application = Application.start()\n\napplication.register('activity-chart', ActivityChartController)\napplication.register('affiliates--code', CodeController)\napplication.register('alert', AlertController)\napplication.register('auto-enable', AutoEnableController)\napplication.register('autofocus', AutofocusController)\napplication.register('classlist', ClasslistController)\napplication.register('clipboard-copy', ClipboardCopyController)\napplication.register('comment-form', CommentFormController)\napplication.register('confirm-delete', ConfirmDeleteController)\napplication.register('community-post', CommunityPostController)\napplication.register('community-post-view', CommunityPostViewController)\napplication.register('components--image-loader', ImageLoaderController)\napplication.register('country-and-region-select', CountryAndRegionSelectController)\napplication.register('dark-mode-toggle', DarkModeToggleController)\napplication.register('direct-image-uploads', DirectImageUploadsController)\napplication.register('emoji-dropdown', EmojiDropdownController)\napplication.register('fields--phone', FieldsPhoneController)\napplication.register('fields--phone-verification', FieldsPhoneVerificationController)\napplication.register('fields--super-select', SuperSelectController)\napplication.register('fields--super-select-add-option', SuperSelectAddOptionController)\napplication.register('fields--tom-select', TomSelectController)\napplication.register('fields--combobox', ComboboxController)\napplication.register('form', FormController)\napplication.register('guest-interaction-prompt', GuestInteractionPromptController)\napplication.register('iframe-message-relay', IframeMessageRelayController)\napplication.register('iframe-resizer', IframeResizerController)\napplication.register('image-crop', ImageCropController)\napplication.register('image-file-field-preview', ImageFileFieldPreviewController)\napplication.register('lesson-tree', LessonTreeController)\napplication.register('lightbox', LightboxController)\napplication.register('mobile-nav', MobileNavController)\napplication.register('notifications', NotificationsController)\napplication.register('orders--payment-methods', OrdersPaymentMethodsController)\napplication.register('orders--reactivate-payment-guard', ReactivatePaymentGuardController)\napplication.register('orders--stripe-payment', StripePaymentController)\napplication.register('orders--plan-preview', OrdersPlanPreviewController)\napplication.register('payment-method-form', PaymentMethodFormController)\napplication.register('post-form', PostFormController)\napplication.register('prefetch-handler', PrefetchHandlerController)\napplication.register('redirect-action', RedirectActionController)\napplication.register('read-more', ReadMore)\napplication.register('scroll-to', ScrollToController)\napplication.register('scroll-nav', ScrollNavController)\napplication.register('search', SearchController)\napplication.register('mixpanel', MixpanelController)\napplication.register('share', ShareController)\napplication.register('scroll-tabs', ScrollTabsController)\napplication.register('short-token', ShortTokenController)\napplication.register('web-awesome--alert', WebAwesomeAlertController)\napplication.register('web-awesome--base', WebAwesomeBaseController)\napplication.register('web-awesome--confirm', WebAwesomeConfirmController)\napplication.register('web-awesome--dialog', WebAwesomeDialogController)\napplication.register('web-awesome--drawer', WebAwesomeDrawerController)\napplication.register('web-awesome--dropdown', WebAwesomeDropdownController)\napplication.register('web-awesome--dropdown-menu', WebAwesomeDropdownMenuController)\napplication.register('web-awesome--switch', WebAwesomeSwitchController)\napplication.register('web-awesome--tab-group', WebAwesomeTabGroupController)\napplication.register('toast', ToastController)\napplication.register('toggle', ToggleController)\napplication.register('tooltip', TooltipController)\napplication.register('trix-content-links-target-blank', TrixContentLinksTargetBlankController)\napplication.register('trix-editor', TrixEditorController)\napplication.register('trix-emojis', TrixEmojisController)\napplication.register('trix-mentions', TrixMentionsController)\napplication.register('trix-code-block', TrixCodeBlockController)\napplication.register('unsaved-changes', UnsavedChangesController)\napplication.register('video-embeds', VideoEmbedsController)\napplication.register('truncated-tooltip', TruncatedTooltipController)\napplication.register('web-push-subscription', WebPushSubscriptionController)\napplication.register('web-push-sign-out', WebPushSignOutController)\napplication.register('web-push-sync', WebPushSyncController)\n\n/* Bridge Controllers */\napplication.register('bridge--left-button', LeftButtonController)\napplication.register('bridge--right-button', RightButtonController)\napplication.register('bridge--form', FormControllerBridge)\napplication.register('bridge--menu', MenuController)\napplication.register('bridge--nav', NavController)\napplication.register('bridge--notification-badge', NotificationBadgeController)\napplication.register('bridge--notification-token', NotificationTokenController)\napplication.register('bridge--notification-permission', NotificationPermissionController)\napplication.register('bridge--overflow-menu', OverflowMenuController)\napplication.register('bridge--reset-app', ResetAppController)\napplication.register('bridge--review-prompt', ReviewPromptController)\napplication.register('bridge--sign-out', SignOutController)\napplication.register('bridge--open-settings', OpenSettingsController)\n\nTrixEmbed.initialize({ application, Controller, Trix })\n", "/*\nStimulus 3.2.1\nCopyright \u00A9 2023 Basecamp, LLC\n */\nclass EventListener {\n    constructor(eventTarget, eventName, eventOptions) {\n        this.eventTarget = eventTarget;\n        this.eventName = eventName;\n        this.eventOptions = eventOptions;\n        this.unorderedBindings = new Set();\n    }\n    connect() {\n        this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n    }\n    disconnect() {\n        this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n    }\n    bindingConnected(binding) {\n        this.unorderedBindings.add(binding);\n    }\n    bindingDisconnected(binding) {\n        this.unorderedBindings.delete(binding);\n    }\n    handleEvent(event) {\n        const extendedEvent = extendEvent(event);\n        for (const binding of this.bindings) {\n            if (extendedEvent.immediatePropagationStopped) {\n                break;\n            }\n            else {\n                binding.handleEvent(extendedEvent);\n            }\n        }\n    }\n    hasBindings() {\n        return this.unorderedBindings.size > 0;\n    }\n    get bindings() {\n        return Array.from(this.unorderedBindings).sort((left, right) => {\n            const leftIndex = left.index, rightIndex = right.index;\n            return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n        });\n    }\n}\nfunction extendEvent(event) {\n    if (\"immediatePropagationStopped\" in event) {\n        return event;\n    }\n    else {\n        const { stopImmediatePropagation } = event;\n        return Object.assign(event, {\n            immediatePropagationStopped: false,\n            stopImmediatePropagation() {\n                this.immediatePropagationStopped = true;\n                stopImmediatePropagation.call(this);\n            },\n        });\n    }\n}\n\nclass Dispatcher {\n    constructor(application) {\n        this.application = application;\n        this.eventListenerMaps = new Map();\n        this.started = false;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.eventListeners.forEach((eventListener) => eventListener.connect());\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n        }\n    }\n    get eventListeners() {\n        return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n    }\n    bindingConnected(binding) {\n        this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n    }\n    bindingDisconnected(binding, clearEventListeners = false) {\n        this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n        if (clearEventListeners)\n            this.clearEventListenersForBinding(binding);\n    }\n    handleError(error, message, detail = {}) {\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    clearEventListenersForBinding(binding) {\n        const eventListener = this.fetchEventListenerForBinding(binding);\n        if (!eventListener.hasBindings()) {\n            eventListener.disconnect();\n            this.removeMappedEventListenerFor(binding);\n        }\n    }\n    removeMappedEventListenerFor(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        eventListenerMap.delete(cacheKey);\n        if (eventListenerMap.size == 0)\n            this.eventListenerMaps.delete(eventTarget);\n    }\n    fetchEventListenerForBinding(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        return this.fetchEventListener(eventTarget, eventName, eventOptions);\n    }\n    fetchEventListener(eventTarget, eventName, eventOptions) {\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        let eventListener = eventListenerMap.get(cacheKey);\n        if (!eventListener) {\n            eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n            eventListenerMap.set(cacheKey, eventListener);\n        }\n        return eventListener;\n    }\n    createEventListener(eventTarget, eventName, eventOptions) {\n        const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n        if (this.started) {\n            eventListener.connect();\n        }\n        return eventListener;\n    }\n    fetchEventListenerMapForEventTarget(eventTarget) {\n        let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n        if (!eventListenerMap) {\n            eventListenerMap = new Map();\n            this.eventListenerMaps.set(eventTarget, eventListenerMap);\n        }\n        return eventListenerMap;\n    }\n    cacheKey(eventName, eventOptions) {\n        const parts = [eventName];\n        Object.keys(eventOptions)\n            .sort()\n            .forEach((key) => {\n            parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n        });\n        return parts.join(\":\");\n    }\n}\n\nconst defaultActionDescriptorFilters = {\n    stop({ event, value }) {\n        if (value)\n            event.stopPropagation();\n        return true;\n    },\n    prevent({ event, value }) {\n        if (value)\n            event.preventDefault();\n        return true;\n    },\n    self({ event, value, element }) {\n        if (value) {\n            return element === event.target;\n        }\n        else {\n            return true;\n        }\n    },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n    const source = descriptorString.trim();\n    const matches = source.match(descriptorPattern) || [];\n    let eventName = matches[2];\n    let keyFilter = matches[3];\n    if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n        eventName += `.${keyFilter}`;\n        keyFilter = \"\";\n    }\n    return {\n        eventTarget: parseEventTarget(matches[4]),\n        eventName,\n        eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n        identifier: matches[5],\n        methodName: matches[6],\n        keyFilter: matches[1] || keyFilter,\n    };\n}\nfunction parseEventTarget(eventTargetName) {\n    if (eventTargetName == \"window\") {\n        return window;\n    }\n    else if (eventTargetName == \"document\") {\n        return document;\n    }\n}\nfunction parseEventOptions(eventOptions) {\n    return eventOptions\n        .split(\":\")\n        .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n    if (eventTarget == window) {\n        return \"window\";\n    }\n    else if (eventTarget == document) {\n        return \"document\";\n    }\n}\n\nfunction camelize(value) {\n    return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n    return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n    return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n    return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n    return value.match(/[^\\s]+/g) || [];\n}\n\nfunction isSomething(object) {\n    return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n    return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n    constructor(element, index, descriptor, schema) {\n        this.element = element;\n        this.index = index;\n        this.eventTarget = descriptor.eventTarget || element;\n        this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n        this.eventOptions = descriptor.eventOptions || {};\n        this.identifier = descriptor.identifier || error(\"missing identifier\");\n        this.methodName = descriptor.methodName || error(\"missing method name\");\n        this.keyFilter = descriptor.keyFilter || \"\";\n        this.schema = schema;\n    }\n    static forToken(token, schema) {\n        return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n    }\n    toString() {\n        const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n        const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n        return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n    }\n    shouldIgnoreKeyboardEvent(event) {\n        if (!this.keyFilter) {\n            return false;\n        }\n        const filters = this.keyFilter.split(\"+\");\n        if (this.keyFilterDissatisfied(event, filters)) {\n            return true;\n        }\n        const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n        if (!standardFilter) {\n            return false;\n        }\n        if (!hasProperty(this.keyMappings, standardFilter)) {\n            error(`contains unknown key filter: ${this.keyFilter}`);\n        }\n        return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n    }\n    shouldIgnoreMouseEvent(event) {\n        if (!this.keyFilter) {\n            return false;\n        }\n        const filters = [this.keyFilter];\n        if (this.keyFilterDissatisfied(event, filters)) {\n            return true;\n        }\n        return false;\n    }\n    get params() {\n        const params = {};\n        const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n        for (const { name, value } of Array.from(this.element.attributes)) {\n            const match = name.match(pattern);\n            const key = match && match[1];\n            if (key) {\n                params[camelize(key)] = typecast(value);\n            }\n        }\n        return params;\n    }\n    get eventTargetName() {\n        return stringifyEventTarget(this.eventTarget);\n    }\n    get keyMappings() {\n        return this.schema.keyMappings;\n    }\n    keyFilterDissatisfied(event, filters) {\n        const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n        return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n    }\n}\nconst defaultEventNames = {\n    a: () => \"click\",\n    button: () => \"click\",\n    form: () => \"submit\",\n    details: () => \"toggle\",\n    input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n    select: () => \"change\",\n    textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n    const tagName = element.tagName.toLowerCase();\n    if (tagName in defaultEventNames) {\n        return defaultEventNames[tagName](element);\n    }\n}\nfunction error(message) {\n    throw new Error(message);\n}\nfunction typecast(value) {\n    try {\n        return JSON.parse(value);\n    }\n    catch (o_O) {\n        return value;\n    }\n}\n\nclass Binding {\n    constructor(context, action) {\n        this.context = context;\n        this.action = action;\n    }\n    get index() {\n        return this.action.index;\n    }\n    get eventTarget() {\n        return this.action.eventTarget;\n    }\n    get eventOptions() {\n        return this.action.eventOptions;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    handleEvent(event) {\n        const actionEvent = this.prepareActionEvent(event);\n        if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n            this.invokeWithEvent(actionEvent);\n        }\n    }\n    get eventName() {\n        return this.action.eventName;\n    }\n    get method() {\n        const method = this.controller[this.methodName];\n        if (typeof method == \"function\") {\n            return method;\n        }\n        throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n    }\n    applyEventModifiers(event) {\n        const { element } = this.action;\n        const { actionDescriptorFilters } = this.context.application;\n        const { controller } = this.context;\n        let passes = true;\n        for (const [name, value] of Object.entries(this.eventOptions)) {\n            if (name in actionDescriptorFilters) {\n                const filter = actionDescriptorFilters[name];\n                passes = passes && filter({ name, value, event, element, controller });\n            }\n            else {\n                continue;\n            }\n        }\n        return passes;\n    }\n    prepareActionEvent(event) {\n        return Object.assign(event, { params: this.action.params });\n    }\n    invokeWithEvent(event) {\n        const { target, currentTarget } = event;\n        try {\n            this.method.call(this.controller, event);\n            this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n        }\n        catch (error) {\n            const { identifier, controller, element, index } = this;\n            const detail = { identifier, controller, element, index, event };\n            this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n        }\n    }\n    willBeInvokedByEvent(event) {\n        const eventTarget = event.target;\n        if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n            return false;\n        }\n        if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n            return false;\n        }\n        if (this.element === eventTarget) {\n            return true;\n        }\n        else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n            return this.scope.containsElement(eventTarget);\n        }\n        else {\n            return this.scope.containsElement(this.action.element);\n        }\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    get methodName() {\n        return this.action.methodName;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nclass ElementObserver {\n    constructor(element, delegate) {\n        this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n        this.element = element;\n        this.started = false;\n        this.delegate = delegate;\n        this.elements = new Set();\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.refresh();\n        }\n    }\n    pause(callback) {\n        if (this.started) {\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n        callback();\n        if (!this.started) {\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            const matches = new Set(this.matchElementsInTree());\n            for (const element of Array.from(this.elements)) {\n                if (!matches.has(element)) {\n                    this.removeElement(element);\n                }\n            }\n            for (const element of Array.from(matches)) {\n                this.addElement(element);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        if (mutation.type == \"attributes\") {\n            this.processAttributeChange(mutation.target, mutation.attributeName);\n        }\n        else if (mutation.type == \"childList\") {\n            this.processRemovedNodes(mutation.removedNodes);\n            this.processAddedNodes(mutation.addedNodes);\n        }\n    }\n    processAttributeChange(element, attributeName) {\n        if (this.elements.has(element)) {\n            if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n                this.delegate.elementAttributeChanged(element, attributeName);\n            }\n            else {\n                this.removeElement(element);\n            }\n        }\n        else if (this.matchElement(element)) {\n            this.addElement(element);\n        }\n    }\n    processRemovedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element) {\n                this.processTree(element, this.removeElement);\n            }\n        }\n    }\n    processAddedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element && this.elementIsActive(element)) {\n                this.processTree(element, this.addElement);\n            }\n        }\n    }\n    matchElement(element) {\n        return this.delegate.matchElement(element);\n    }\n    matchElementsInTree(tree = this.element) {\n        return this.delegate.matchElementsInTree(tree);\n    }\n    processTree(tree, processor) {\n        for (const element of this.matchElementsInTree(tree)) {\n            processor.call(this, element);\n        }\n    }\n    elementFromNode(node) {\n        if (node.nodeType == Node.ELEMENT_NODE) {\n            return node;\n        }\n    }\n    elementIsActive(element) {\n        if (element.isConnected != this.element.isConnected) {\n            return false;\n        }\n        else {\n            return this.element.contains(element);\n        }\n    }\n    addElement(element) {\n        if (!this.elements.has(element)) {\n            if (this.elementIsActive(element)) {\n                this.elements.add(element);\n                if (this.delegate.elementMatched) {\n                    this.delegate.elementMatched(element);\n                }\n            }\n        }\n    }\n    removeElement(element) {\n        if (this.elements.has(element)) {\n            this.elements.delete(element);\n            if (this.delegate.elementUnmatched) {\n                this.delegate.elementUnmatched(element);\n            }\n        }\n    }\n}\n\nclass AttributeObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeName = attributeName;\n        this.delegate = delegate;\n        this.elementObserver = new ElementObserver(element, this);\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    get selector() {\n        return `[${this.attributeName}]`;\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    matchElement(element) {\n        return element.hasAttribute(this.attributeName);\n    }\n    matchElementsInTree(tree) {\n        const match = this.matchElement(tree) ? [tree] : [];\n        const matches = Array.from(tree.querySelectorAll(this.selector));\n        return match.concat(matches);\n    }\n    elementMatched(element) {\n        if (this.delegate.elementMatchedAttribute) {\n            this.delegate.elementMatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementUnmatched(element) {\n        if (this.delegate.elementUnmatchedAttribute) {\n            this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementAttributeChanged(element, attributeName) {\n        if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n            this.delegate.elementAttributeValueChanged(element, attributeName);\n        }\n    }\n}\n\nfunction add(map, key, value) {\n    fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n    fetch(map, key).delete(value);\n    prune(map, key);\n}\nfunction fetch(map, key) {\n    let values = map.get(key);\n    if (!values) {\n        values = new Set();\n        map.set(key, values);\n    }\n    return values;\n}\nfunction prune(map, key) {\n    const values = map.get(key);\n    if (values != null && values.size == 0) {\n        map.delete(key);\n    }\n}\n\nclass Multimap {\n    constructor() {\n        this.valuesByKey = new Map();\n    }\n    get keys() {\n        return Array.from(this.valuesByKey.keys());\n    }\n    get values() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n    }\n    get size() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((size, set) => size + set.size, 0);\n    }\n    add(key, value) {\n        add(this.valuesByKey, key, value);\n    }\n    delete(key, value) {\n        del(this.valuesByKey, key, value);\n    }\n    has(key, value) {\n        const values = this.valuesByKey.get(key);\n        return values != null && values.has(value);\n    }\n    hasKey(key) {\n        return this.valuesByKey.has(key);\n    }\n    hasValue(value) {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.some((set) => set.has(value));\n    }\n    getValuesForKey(key) {\n        const values = this.valuesByKey.get(key);\n        return values ? Array.from(values) : [];\n    }\n    getKeysForValue(value) {\n        return Array.from(this.valuesByKey)\n            .filter(([_key, values]) => values.has(value))\n            .map(([key, _values]) => key);\n    }\n}\n\nclass IndexedMultimap extends Multimap {\n    constructor() {\n        super();\n        this.keysByValue = new Map();\n    }\n    get values() {\n        return Array.from(this.keysByValue.keys());\n    }\n    add(key, value) {\n        super.add(key, value);\n        add(this.keysByValue, value, key);\n    }\n    delete(key, value) {\n        super.delete(key, value);\n        del(this.keysByValue, value, key);\n    }\n    hasValue(value) {\n        return this.keysByValue.has(value);\n    }\n    getKeysForValue(value) {\n        const set = this.keysByValue.get(value);\n        return set ? Array.from(set) : [];\n    }\n}\n\nclass SelectorObserver {\n    constructor(element, selector, delegate, details) {\n        this._selector = selector;\n        this.details = details;\n        this.elementObserver = new ElementObserver(element, this);\n        this.delegate = delegate;\n        this.matchesByElement = new Multimap();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    get selector() {\n        return this._selector;\n    }\n    set selector(selector) {\n        this._selector = selector;\n        this.refresh();\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    matchElement(element) {\n        const { selector } = this;\n        if (selector) {\n            const matches = element.matches(selector);\n            if (this.delegate.selectorMatchElement) {\n                return matches && this.delegate.selectorMatchElement(element, this.details);\n            }\n            return matches;\n        }\n        else {\n            return false;\n        }\n    }\n    matchElementsInTree(tree) {\n        const { selector } = this;\n        if (selector) {\n            const match = this.matchElement(tree) ? [tree] : [];\n            const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n            return match.concat(matches);\n        }\n        else {\n            return [];\n        }\n    }\n    elementMatched(element) {\n        const { selector } = this;\n        if (selector) {\n            this.selectorMatched(element, selector);\n        }\n    }\n    elementUnmatched(element) {\n        const selectors = this.matchesByElement.getKeysForValue(element);\n        for (const selector of selectors) {\n            this.selectorUnmatched(element, selector);\n        }\n    }\n    elementAttributeChanged(element, _attributeName) {\n        const { selector } = this;\n        if (selector) {\n            const matches = this.matchElement(element);\n            const matchedBefore = this.matchesByElement.has(selector, element);\n            if (matches && !matchedBefore) {\n                this.selectorMatched(element, selector);\n            }\n            else if (!matches && matchedBefore) {\n                this.selectorUnmatched(element, selector);\n            }\n        }\n    }\n    selectorMatched(element, selector) {\n        this.delegate.selectorMatched(element, selector, this.details);\n        this.matchesByElement.add(selector, element);\n    }\n    selectorUnmatched(element, selector) {\n        this.delegate.selectorUnmatched(element, selector, this.details);\n        this.matchesByElement.delete(selector, element);\n    }\n}\n\nclass StringMapObserver {\n    constructor(element, delegate) {\n        this.element = element;\n        this.delegate = delegate;\n        this.started = false;\n        this.stringMap = new Map();\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n            this.refresh();\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            for (const attributeName of this.knownAttributeNames) {\n                this.refreshAttribute(attributeName, null);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        const attributeName = mutation.attributeName;\n        if (attributeName) {\n            this.refreshAttribute(attributeName, mutation.oldValue);\n        }\n    }\n    refreshAttribute(attributeName, oldValue) {\n        const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n        if (key != null) {\n            if (!this.stringMap.has(attributeName)) {\n                this.stringMapKeyAdded(key, attributeName);\n            }\n            const value = this.element.getAttribute(attributeName);\n            if (this.stringMap.get(attributeName) != value) {\n                this.stringMapValueChanged(value, key, oldValue);\n            }\n            if (value == null) {\n                const oldValue = this.stringMap.get(attributeName);\n                this.stringMap.delete(attributeName);\n                if (oldValue)\n                    this.stringMapKeyRemoved(key, attributeName, oldValue);\n            }\n            else {\n                this.stringMap.set(attributeName, value);\n            }\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        if (this.delegate.stringMapKeyAdded) {\n            this.delegate.stringMapKeyAdded(key, attributeName);\n        }\n    }\n    stringMapValueChanged(value, key, oldValue) {\n        if (this.delegate.stringMapValueChanged) {\n            this.delegate.stringMapValueChanged(value, key, oldValue);\n        }\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        if (this.delegate.stringMapKeyRemoved) {\n            this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n        }\n    }\n    get knownAttributeNames() {\n        return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n    }\n    get currentAttributeNames() {\n        return Array.from(this.element.attributes).map((attribute) => attribute.name);\n    }\n    get recordedAttributeNames() {\n        return Array.from(this.stringMap.keys());\n    }\n}\n\nclass TokenListObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeObserver = new AttributeObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.tokensByElement = new Multimap();\n    }\n    get started() {\n        return this.attributeObserver.started;\n    }\n    start() {\n        this.attributeObserver.start();\n    }\n    pause(callback) {\n        this.attributeObserver.pause(callback);\n    }\n    stop() {\n        this.attributeObserver.stop();\n    }\n    refresh() {\n        this.attributeObserver.refresh();\n    }\n    get element() {\n        return this.attributeObserver.element;\n    }\n    get attributeName() {\n        return this.attributeObserver.attributeName;\n    }\n    elementMatchedAttribute(element) {\n        this.tokensMatched(this.readTokensForElement(element));\n    }\n    elementAttributeValueChanged(element) {\n        const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n        this.tokensUnmatched(unmatchedTokens);\n        this.tokensMatched(matchedTokens);\n    }\n    elementUnmatchedAttribute(element) {\n        this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n    }\n    tokensMatched(tokens) {\n        tokens.forEach((token) => this.tokenMatched(token));\n    }\n    tokensUnmatched(tokens) {\n        tokens.forEach((token) => this.tokenUnmatched(token));\n    }\n    tokenMatched(token) {\n        this.delegate.tokenMatched(token);\n        this.tokensByElement.add(token.element, token);\n    }\n    tokenUnmatched(token) {\n        this.delegate.tokenUnmatched(token);\n        this.tokensByElement.delete(token.element, token);\n    }\n    refreshTokensForElement(element) {\n        const previousTokens = this.tokensByElement.getValuesForKey(element);\n        const currentTokens = this.readTokensForElement(element);\n        const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n        if (firstDifferingIndex == -1) {\n            return [[], []];\n        }\n        else {\n            return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n        }\n    }\n    readTokensForElement(element) {\n        const attributeName = this.attributeName;\n        const tokenString = element.getAttribute(attributeName) || \"\";\n        return parseTokenString(tokenString, element, attributeName);\n    }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n    return tokenString\n        .trim()\n        .split(/\\s+/)\n        .filter((content) => content.length)\n        .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n    const length = Math.max(left.length, right.length);\n    return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n    return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n    constructor(element, attributeName, delegate) {\n        this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.parseResultsByToken = new WeakMap();\n        this.valuesByTokenByElement = new WeakMap();\n    }\n    get started() {\n        return this.tokenListObserver.started;\n    }\n    start() {\n        this.tokenListObserver.start();\n    }\n    stop() {\n        this.tokenListObserver.stop();\n    }\n    refresh() {\n        this.tokenListObserver.refresh();\n    }\n    get element() {\n        return this.tokenListObserver.element;\n    }\n    get attributeName() {\n        return this.tokenListObserver.attributeName;\n    }\n    tokenMatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).set(token, value);\n            this.delegate.elementMatchedValue(element, value);\n        }\n    }\n    tokenUnmatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).delete(token);\n            this.delegate.elementUnmatchedValue(element, value);\n        }\n    }\n    fetchParseResultForToken(token) {\n        let parseResult = this.parseResultsByToken.get(token);\n        if (!parseResult) {\n            parseResult = this.parseToken(token);\n            this.parseResultsByToken.set(token, parseResult);\n        }\n        return parseResult;\n    }\n    fetchValuesByTokenForElement(element) {\n        let valuesByToken = this.valuesByTokenByElement.get(element);\n        if (!valuesByToken) {\n            valuesByToken = new Map();\n            this.valuesByTokenByElement.set(element, valuesByToken);\n        }\n        return valuesByToken;\n    }\n    parseToken(token) {\n        try {\n            const value = this.delegate.parseValueForToken(token);\n            return { value };\n        }\n        catch (error) {\n            return { error };\n        }\n    }\n}\n\nclass BindingObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.bindingsByAction = new Map();\n    }\n    start() {\n        if (!this.valueListObserver) {\n            this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n            this.valueListObserver.start();\n        }\n    }\n    stop() {\n        if (this.valueListObserver) {\n            this.valueListObserver.stop();\n            delete this.valueListObserver;\n            this.disconnectAllActions();\n        }\n    }\n    get element() {\n        return this.context.element;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get actionAttribute() {\n        return this.schema.actionAttribute;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get bindings() {\n        return Array.from(this.bindingsByAction.values());\n    }\n    connectAction(action) {\n        const binding = new Binding(this.context, action);\n        this.bindingsByAction.set(action, binding);\n        this.delegate.bindingConnected(binding);\n    }\n    disconnectAction(action) {\n        const binding = this.bindingsByAction.get(action);\n        if (binding) {\n            this.bindingsByAction.delete(action);\n            this.delegate.bindingDisconnected(binding);\n        }\n    }\n    disconnectAllActions() {\n        this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n        this.bindingsByAction.clear();\n    }\n    parseValueForToken(token) {\n        const action = Action.forToken(token, this.schema);\n        if (action.identifier == this.identifier) {\n            return action;\n        }\n    }\n    elementMatchedValue(element, action) {\n        this.connectAction(action);\n    }\n    elementUnmatchedValue(element, action) {\n        this.disconnectAction(action);\n    }\n}\n\nclass ValueObserver {\n    constructor(context, receiver) {\n        this.context = context;\n        this.receiver = receiver;\n        this.stringMapObserver = new StringMapObserver(this.element, this);\n        this.valueDescriptorMap = this.controller.valueDescriptorMap;\n    }\n    start() {\n        this.stringMapObserver.start();\n        this.invokeChangedCallbacksForDefaultValues();\n    }\n    stop() {\n        this.stringMapObserver.stop();\n    }\n    get element() {\n        return this.context.element;\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    getStringMapKeyForAttribute(attributeName) {\n        if (attributeName in this.valueDescriptorMap) {\n            return this.valueDescriptorMap[attributeName].name;\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        const descriptor = this.valueDescriptorMap[attributeName];\n        if (!this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n        }\n    }\n    stringMapValueChanged(value, name, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[name];\n        if (value === null)\n            return;\n        if (oldValue === null) {\n            oldValue = descriptor.writer(descriptor.defaultValue);\n        }\n        this.invokeChangedCallback(name, value, oldValue);\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[key];\n        if (this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n        }\n        else {\n            this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n        }\n    }\n    invokeChangedCallbacksForDefaultValues() {\n        for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n            if (defaultValue != undefined && !this.controller.data.has(key)) {\n                this.invokeChangedCallback(name, writer(defaultValue), undefined);\n            }\n        }\n    }\n    invokeChangedCallback(name, rawValue, rawOldValue) {\n        const changedMethodName = `${name}Changed`;\n        const changedMethod = this.receiver[changedMethodName];\n        if (typeof changedMethod == \"function\") {\n            const descriptor = this.valueDescriptorNameMap[name];\n            try {\n                const value = descriptor.reader(rawValue);\n                let oldValue = rawOldValue;\n                if (rawOldValue) {\n                    oldValue = descriptor.reader(rawOldValue);\n                }\n                changedMethod.call(this.receiver, value, oldValue);\n            }\n            catch (error) {\n                if (error instanceof TypeError) {\n                    error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n                }\n                throw error;\n            }\n        }\n    }\n    get valueDescriptors() {\n        const { valueDescriptorMap } = this;\n        return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n    }\n    get valueDescriptorNameMap() {\n        const descriptors = {};\n        Object.keys(this.valueDescriptorMap).forEach((key) => {\n            const descriptor = this.valueDescriptorMap[key];\n            descriptors[descriptor.name] = descriptor;\n        });\n        return descriptors;\n    }\n    hasValue(attributeName) {\n        const descriptor = this.valueDescriptorNameMap[attributeName];\n        const hasMethodName = `has${capitalize(descriptor.name)}`;\n        return this.receiver[hasMethodName];\n    }\n}\n\nclass TargetObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.targetsByName = new Multimap();\n    }\n    start() {\n        if (!this.tokenListObserver) {\n            this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n            this.tokenListObserver.start();\n        }\n    }\n    stop() {\n        if (this.tokenListObserver) {\n            this.disconnectAllTargets();\n            this.tokenListObserver.stop();\n            delete this.tokenListObserver;\n        }\n    }\n    tokenMatched({ element, content: name }) {\n        if (this.scope.containsElement(element)) {\n            this.connectTarget(element, name);\n        }\n    }\n    tokenUnmatched({ element, content: name }) {\n        this.disconnectTarget(element, name);\n    }\n    connectTarget(element, name) {\n        var _a;\n        if (!this.targetsByName.has(name, element)) {\n            this.targetsByName.add(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n        }\n    }\n    disconnectTarget(element, name) {\n        var _a;\n        if (this.targetsByName.has(name, element)) {\n            this.targetsByName.delete(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n        }\n    }\n    disconnectAllTargets() {\n        for (const name of this.targetsByName.keys) {\n            for (const element of this.targetsByName.getValuesForKey(name)) {\n                this.disconnectTarget(element, name);\n            }\n        }\n    }\n    get attributeName() {\n        return `data-${this.context.identifier}-target`;\n    }\n    get element() {\n        return this.context.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return Array.from(ancestors.reduce((values, constructor) => {\n        getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n        return values;\n    }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return ancestors.reduce((pairs, constructor) => {\n        pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n        return pairs;\n    }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n    const ancestors = [];\n    while (constructor) {\n        ancestors.push(constructor);\n        constructor = Object.getPrototypeOf(constructor);\n    }\n    return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n    constructor(context, delegate) {\n        this.started = false;\n        this.context = context;\n        this.delegate = delegate;\n        this.outletsByName = new Multimap();\n        this.outletElementsByName = new Multimap();\n        this.selectorObserverMap = new Map();\n        this.attributeObserverMap = new Map();\n    }\n    start() {\n        if (!this.started) {\n            this.outletDefinitions.forEach((outletName) => {\n                this.setupSelectorObserverForOutlet(outletName);\n                this.setupAttributeObserverForOutlet(outletName);\n            });\n            this.started = true;\n            this.dependentContexts.forEach((context) => context.refresh());\n        }\n    }\n    refresh() {\n        this.selectorObserverMap.forEach((observer) => observer.refresh());\n        this.attributeObserverMap.forEach((observer) => observer.refresh());\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.disconnectAllOutlets();\n            this.stopSelectorObservers();\n            this.stopAttributeObservers();\n        }\n    }\n    stopSelectorObservers() {\n        if (this.selectorObserverMap.size > 0) {\n            this.selectorObserverMap.forEach((observer) => observer.stop());\n            this.selectorObserverMap.clear();\n        }\n    }\n    stopAttributeObservers() {\n        if (this.attributeObserverMap.size > 0) {\n            this.attributeObserverMap.forEach((observer) => observer.stop());\n            this.attributeObserverMap.clear();\n        }\n    }\n    selectorMatched(element, _selector, { outletName }) {\n        const outlet = this.getOutlet(element, outletName);\n        if (outlet) {\n            this.connectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorUnmatched(element, _selector, { outletName }) {\n        const outlet = this.getOutletFromMap(element, outletName);\n        if (outlet) {\n            this.disconnectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorMatchElement(element, { outletName }) {\n        const selector = this.selector(outletName);\n        const hasOutlet = this.hasOutlet(element, outletName);\n        const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n        if (selector) {\n            return hasOutlet && hasOutletController && element.matches(selector);\n        }\n        else {\n            return false;\n        }\n    }\n    elementMatchedAttribute(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    elementAttributeValueChanged(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    elementUnmatchedAttribute(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    connectOutlet(outlet, element, outletName) {\n        var _a;\n        if (!this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.add(outletName, outlet);\n            this.outletElementsByName.add(outletName, element);\n            (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n        }\n    }\n    disconnectOutlet(outlet, element, outletName) {\n        var _a;\n        if (this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.delete(outletName, outlet);\n            this.outletElementsByName.delete(outletName, element);\n            (_a = this.selectorObserverMap\n                .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n        }\n    }\n    disconnectAllOutlets() {\n        for (const outletName of this.outletElementsByName.keys) {\n            for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n                for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n                    this.disconnectOutlet(outlet, element, outletName);\n                }\n            }\n        }\n    }\n    updateSelectorObserverForOutlet(outletName) {\n        const observer = this.selectorObserverMap.get(outletName);\n        if (observer) {\n            observer.selector = this.selector(outletName);\n        }\n    }\n    setupSelectorObserverForOutlet(outletName) {\n        const selector = this.selector(outletName);\n        const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n        this.selectorObserverMap.set(outletName, selectorObserver);\n        selectorObserver.start();\n    }\n    setupAttributeObserverForOutlet(outletName) {\n        const attributeName = this.attributeNameForOutletName(outletName);\n        const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n        this.attributeObserverMap.set(outletName, attributeObserver);\n        attributeObserver.start();\n    }\n    selector(outletName) {\n        return this.scope.outlets.getSelectorForOutletName(outletName);\n    }\n    attributeNameForOutletName(outletName) {\n        return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n    }\n    getOutletNameFromOutletAttributeName(attributeName) {\n        return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n    }\n    get outletDependencies() {\n        const dependencies = new Multimap();\n        this.router.modules.forEach((module) => {\n            const constructor = module.definition.controllerConstructor;\n            const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n            outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n        });\n        return dependencies;\n    }\n    get outletDefinitions() {\n        return this.outletDependencies.getKeysForValue(this.identifier);\n    }\n    get dependentControllerIdentifiers() {\n        return this.outletDependencies.getValuesForKey(this.identifier);\n    }\n    get dependentContexts() {\n        const identifiers = this.dependentControllerIdentifiers;\n        return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n    }\n    hasOutlet(element, outletName) {\n        return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n    }\n    getOutlet(element, outletName) {\n        return this.application.getControllerForElementAndIdentifier(element, outletName);\n    }\n    getOutletFromMap(element, outletName) {\n        return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get router() {\n        return this.application.router;\n    }\n}\n\nclass Context {\n    constructor(module, scope) {\n        this.logDebugActivity = (functionName, detail = {}) => {\n            const { identifier, controller, element } = this;\n            detail = Object.assign({ identifier, controller, element }, detail);\n            this.application.logDebugActivity(this.identifier, functionName, detail);\n        };\n        this.module = module;\n        this.scope = scope;\n        this.controller = new module.controllerConstructor(this);\n        this.bindingObserver = new BindingObserver(this, this.dispatcher);\n        this.valueObserver = new ValueObserver(this, this.controller);\n        this.targetObserver = new TargetObserver(this, this);\n        this.outletObserver = new OutletObserver(this, this);\n        try {\n            this.controller.initialize();\n            this.logDebugActivity(\"initialize\");\n        }\n        catch (error) {\n            this.handleError(error, \"initializing controller\");\n        }\n    }\n    connect() {\n        this.bindingObserver.start();\n        this.valueObserver.start();\n        this.targetObserver.start();\n        this.outletObserver.start();\n        try {\n            this.controller.connect();\n            this.logDebugActivity(\"connect\");\n        }\n        catch (error) {\n            this.handleError(error, \"connecting controller\");\n        }\n    }\n    refresh() {\n        this.outletObserver.refresh();\n    }\n    disconnect() {\n        try {\n            this.controller.disconnect();\n            this.logDebugActivity(\"disconnect\");\n        }\n        catch (error) {\n            this.handleError(error, \"disconnecting controller\");\n        }\n        this.outletObserver.stop();\n        this.targetObserver.stop();\n        this.valueObserver.stop();\n        this.bindingObserver.stop();\n    }\n    get application() {\n        return this.module.application;\n    }\n    get identifier() {\n        return this.module.identifier;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get dispatcher() {\n        return this.application.dispatcher;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get parentElement() {\n        return this.element.parentElement;\n    }\n    handleError(error, message, detail = {}) {\n        const { identifier, controller, element } = this;\n        detail = Object.assign({ identifier, controller, element }, detail);\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    targetConnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetConnected`, element);\n    }\n    targetDisconnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n    }\n    outletConnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n    }\n    outletDisconnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n    }\n    invokeControllerMethod(methodName, ...args) {\n        const controller = this.controller;\n        if (typeof controller[methodName] == \"function\") {\n            controller[methodName](...args);\n        }\n    }\n}\n\nfunction bless(constructor) {\n    return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n    const shadowConstructor = extend(constructor);\n    const shadowProperties = getShadowProperties(constructor.prototype, properties);\n    Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n    return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n    const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n    return blessings.reduce((blessedProperties, blessing) => {\n        const properties = blessing(constructor);\n        for (const key in properties) {\n            const descriptor = blessedProperties[key] || {};\n            blessedProperties[key] = Object.assign(descriptor, properties[key]);\n        }\n        return blessedProperties;\n    }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n    return getOwnKeys(properties).reduce((shadowProperties, key) => {\n        const descriptor = getShadowedDescriptor(prototype, properties, key);\n        if (descriptor) {\n            Object.assign(shadowProperties, { [key]: descriptor });\n        }\n        return shadowProperties;\n    }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n    const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n    const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n    if (!shadowedByValue) {\n        const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n        if (shadowingDescriptor) {\n            descriptor.get = shadowingDescriptor.get || descriptor.get;\n            descriptor.set = shadowingDescriptor.set || descriptor.set;\n        }\n        return descriptor;\n    }\n}\nconst getOwnKeys = (() => {\n    if (typeof Object.getOwnPropertySymbols == \"function\") {\n        return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n    }\n    else {\n        return Object.getOwnPropertyNames;\n    }\n})();\nconst extend = (() => {\n    function extendWithReflect(constructor) {\n        function extended() {\n            return Reflect.construct(constructor, arguments, new.target);\n        }\n        extended.prototype = Object.create(constructor.prototype, {\n            constructor: { value: extended },\n        });\n        Reflect.setPrototypeOf(extended, constructor);\n        return extended;\n    }\n    function testReflectExtension() {\n        const a = function () {\n            this.a.call(this);\n        };\n        const b = extendWithReflect(a);\n        b.prototype.a = function () { };\n        return new b();\n    }\n    try {\n        testReflectExtension();\n        return extendWithReflect;\n    }\n    catch (error) {\n        return (constructor) => class extended extends constructor {\n        };\n    }\n})();\n\nfunction blessDefinition(definition) {\n    return {\n        identifier: definition.identifier,\n        controllerConstructor: bless(definition.controllerConstructor),\n    };\n}\n\nclass Module {\n    constructor(application, definition) {\n        this.application = application;\n        this.definition = blessDefinition(definition);\n        this.contextsByScope = new WeakMap();\n        this.connectedContexts = new Set();\n    }\n    get identifier() {\n        return this.definition.identifier;\n    }\n    get controllerConstructor() {\n        return this.definition.controllerConstructor;\n    }\n    get contexts() {\n        return Array.from(this.connectedContexts);\n    }\n    connectContextForScope(scope) {\n        const context = this.fetchContextForScope(scope);\n        this.connectedContexts.add(context);\n        context.connect();\n    }\n    disconnectContextForScope(scope) {\n        const context = this.contextsByScope.get(scope);\n        if (context) {\n            this.connectedContexts.delete(context);\n            context.disconnect();\n        }\n    }\n    fetchContextForScope(scope) {\n        let context = this.contextsByScope.get(scope);\n        if (!context) {\n            context = new Context(this, scope);\n            this.contextsByScope.set(scope, context);\n        }\n        return context;\n    }\n}\n\nclass ClassMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    has(name) {\n        return this.data.has(this.getDataKey(name));\n    }\n    get(name) {\n        return this.getAll(name)[0];\n    }\n    getAll(name) {\n        const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n        return tokenize(tokenString);\n    }\n    getAttributeName(name) {\n        return this.data.getAttributeNameForKey(this.getDataKey(name));\n    }\n    getDataKey(name) {\n        return `${name}-class`;\n    }\n    get data() {\n        return this.scope.data;\n    }\n}\n\nclass DataMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.getAttribute(name);\n    }\n    set(key, value) {\n        const name = this.getAttributeNameForKey(key);\n        this.element.setAttribute(name, value);\n        return this.get(key);\n    }\n    has(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.hasAttribute(name);\n    }\n    delete(key) {\n        if (this.has(key)) {\n            const name = this.getAttributeNameForKey(key);\n            this.element.removeAttribute(name);\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    getAttributeNameForKey(key) {\n        return `data-${this.identifier}-${dasherize(key)}`;\n    }\n}\n\nclass Guide {\n    constructor(logger) {\n        this.warnedKeysByObject = new WeakMap();\n        this.logger = logger;\n    }\n    warn(object, key, message) {\n        let warnedKeys = this.warnedKeysByObject.get(object);\n        if (!warnedKeys) {\n            warnedKeys = new Set();\n            this.warnedKeysByObject.set(object, warnedKeys);\n        }\n        if (!warnedKeys.has(key)) {\n            warnedKeys.add(key);\n            this.logger.warn(message, object);\n        }\n    }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n    return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(targetName) {\n        return this.find(targetName) != null;\n    }\n    find(...targetNames) {\n        return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n    }\n    findAll(...targetNames) {\n        return targetNames.reduce((targets, targetName) => [\n            ...targets,\n            ...this.findAllTargets(targetName),\n            ...this.findAllLegacyTargets(targetName),\n        ], []);\n    }\n    findTarget(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findElement(selector);\n    }\n    findAllTargets(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector);\n    }\n    getSelectorForTargetName(targetName) {\n        const attributeName = this.schema.targetAttributeForScope(this.identifier);\n        return attributeValueContainsToken(attributeName, targetName);\n    }\n    findLegacyTarget(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.deprecate(this.scope.findElement(selector), targetName);\n    }\n    findAllLegacyTargets(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n    }\n    getLegacySelectorForTargetName(targetName) {\n        const targetDescriptor = `${this.identifier}.${targetName}`;\n        return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n    }\n    deprecate(element, targetName) {\n        if (element) {\n            const { identifier } = this;\n            const attributeName = this.schema.targetAttribute;\n            const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n            this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n                `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n        }\n        return element;\n    }\n    get guide() {\n        return this.scope.guide;\n    }\n}\n\nclass OutletSet {\n    constructor(scope, controllerElement) {\n        this.scope = scope;\n        this.controllerElement = controllerElement;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(outletName) {\n        return this.find(outletName) != null;\n    }\n    find(...outletNames) {\n        return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n    }\n    findAll(...outletNames) {\n        return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n    }\n    getSelectorForOutletName(outletName) {\n        const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n        return this.controllerElement.getAttribute(attributeName);\n    }\n    findOutlet(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        if (selector)\n            return this.findElement(selector, outletName);\n    }\n    findAllOutlets(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        return selector ? this.findAllElements(selector, outletName) : [];\n    }\n    findElement(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n    }\n    findAllElements(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName));\n    }\n    matchesElement(element, selector, outletName) {\n        const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n        return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n    }\n}\n\nclass Scope {\n    constructor(schema, element, identifier, logger) {\n        this.targets = new TargetSet(this);\n        this.classes = new ClassMap(this);\n        this.data = new DataMap(this);\n        this.containsElement = (element) => {\n            return element.closest(this.controllerSelector) === this.element;\n        };\n        this.schema = schema;\n        this.element = element;\n        this.identifier = identifier;\n        this.guide = new Guide(logger);\n        this.outlets = new OutletSet(this.documentScope, element);\n    }\n    findElement(selector) {\n        return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n    }\n    findAllElements(selector) {\n        return [\n            ...(this.element.matches(selector) ? [this.element] : []),\n            ...this.queryElements(selector).filter(this.containsElement),\n        ];\n    }\n    queryElements(selector) {\n        return Array.from(this.element.querySelectorAll(selector));\n    }\n    get controllerSelector() {\n        return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n    }\n    get isDocumentScope() {\n        return this.element === document.documentElement;\n    }\n    get documentScope() {\n        return this.isDocumentScope\n            ? this\n            : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n    }\n}\n\nclass ScopeObserver {\n    constructor(element, schema, delegate) {\n        this.element = element;\n        this.schema = schema;\n        this.delegate = delegate;\n        this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n        this.scopesByIdentifierByElement = new WeakMap();\n        this.scopeReferenceCounts = new WeakMap();\n    }\n    start() {\n        this.valueListObserver.start();\n    }\n    stop() {\n        this.valueListObserver.stop();\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    parseValueForToken(token) {\n        const { element, content: identifier } = token;\n        return this.parseValueForElementAndIdentifier(element, identifier);\n    }\n    parseValueForElementAndIdentifier(element, identifier) {\n        const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n        let scope = scopesByIdentifier.get(identifier);\n        if (!scope) {\n            scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n            scopesByIdentifier.set(identifier, scope);\n        }\n        return scope;\n    }\n    elementMatchedValue(element, value) {\n        const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n        this.scopeReferenceCounts.set(value, referenceCount);\n        if (referenceCount == 1) {\n            this.delegate.scopeConnected(value);\n        }\n    }\n    elementUnmatchedValue(element, value) {\n        const referenceCount = this.scopeReferenceCounts.get(value);\n        if (referenceCount) {\n            this.scopeReferenceCounts.set(value, referenceCount - 1);\n            if (referenceCount == 1) {\n                this.delegate.scopeDisconnected(value);\n            }\n        }\n    }\n    fetchScopesByIdentifierForElement(element) {\n        let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n        if (!scopesByIdentifier) {\n            scopesByIdentifier = new Map();\n            this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n        }\n        return scopesByIdentifier;\n    }\n}\n\nclass Router {\n    constructor(application) {\n        this.application = application;\n        this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n        this.scopesByIdentifier = new Multimap();\n        this.modulesByIdentifier = new Map();\n    }\n    get element() {\n        return this.application.element;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get logger() {\n        return this.application.logger;\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    get modules() {\n        return Array.from(this.modulesByIdentifier.values());\n    }\n    get contexts() {\n        return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n    }\n    start() {\n        this.scopeObserver.start();\n    }\n    stop() {\n        this.scopeObserver.stop();\n    }\n    loadDefinition(definition) {\n        this.unloadIdentifier(definition.identifier);\n        const module = new Module(this.application, definition);\n        this.connectModule(module);\n        const afterLoad = definition.controllerConstructor.afterLoad;\n        if (afterLoad) {\n            afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n        }\n    }\n    unloadIdentifier(identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            this.disconnectModule(module);\n        }\n    }\n    getContextForElementAndIdentifier(element, identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            return module.contexts.find((context) => context.element == element);\n        }\n    }\n    proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n        const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n        if (scope) {\n            this.scopeObserver.elementMatchedValue(scope.element, scope);\n        }\n        else {\n            console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n        }\n    }\n    handleError(error, message, detail) {\n        this.application.handleError(error, message, detail);\n    }\n    createScopeForElementAndIdentifier(element, identifier) {\n        return new Scope(this.schema, element, identifier, this.logger);\n    }\n    scopeConnected(scope) {\n        this.scopesByIdentifier.add(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.connectContextForScope(scope);\n        }\n    }\n    scopeDisconnected(scope) {\n        this.scopesByIdentifier.delete(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.disconnectContextForScope(scope);\n        }\n    }\n    connectModule(module) {\n        this.modulesByIdentifier.set(module.identifier, module);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach((scope) => module.connectContextForScope(scope));\n    }\n    disconnectModule(module) {\n        this.modulesByIdentifier.delete(module.identifier);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach((scope) => module.disconnectContextForScope(scope));\n    }\n}\n\nconst defaultSchema = {\n    controllerAttribute: \"data-controller\",\n    actionAttribute: \"data-action\",\n    targetAttribute: \"data-target\",\n    targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n    outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n    keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n    return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n    constructor(element = document.documentElement, schema = defaultSchema) {\n        this.logger = console;\n        this.debug = false;\n        this.logDebugActivity = (identifier, functionName, detail = {}) => {\n            if (this.debug) {\n                this.logFormattedMessage(identifier, functionName, detail);\n            }\n        };\n        this.element = element;\n        this.schema = schema;\n        this.dispatcher = new Dispatcher(this);\n        this.router = new Router(this);\n        this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n    }\n    static start(element, schema) {\n        const application = new this(element, schema);\n        application.start();\n        return application;\n    }\n    async start() {\n        await domReady();\n        this.logDebugActivity(\"application\", \"starting\");\n        this.dispatcher.start();\n        this.router.start();\n        this.logDebugActivity(\"application\", \"start\");\n    }\n    stop() {\n        this.logDebugActivity(\"application\", \"stopping\");\n        this.dispatcher.stop();\n        this.router.stop();\n        this.logDebugActivity(\"application\", \"stop\");\n    }\n    register(identifier, controllerConstructor) {\n        this.load({ identifier, controllerConstructor });\n    }\n    registerActionOption(name, filter) {\n        this.actionDescriptorFilters[name] = filter;\n    }\n    load(head, ...rest) {\n        const definitions = Array.isArray(head) ? head : [head, ...rest];\n        definitions.forEach((definition) => {\n            if (definition.controllerConstructor.shouldLoad) {\n                this.router.loadDefinition(definition);\n            }\n        });\n    }\n    unload(head, ...rest) {\n        const identifiers = Array.isArray(head) ? head : [head, ...rest];\n        identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n    }\n    get controllers() {\n        return this.router.contexts.map((context) => context.controller);\n    }\n    getControllerForElementAndIdentifier(element, identifier) {\n        const context = this.router.getContextForElementAndIdentifier(element, identifier);\n        return context ? context.controller : null;\n    }\n    handleError(error, message, detail) {\n        var _a;\n        this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n        (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n    }\n    logFormattedMessage(identifier, functionName, detail = {}) {\n        detail = Object.assign({ application: this }, detail);\n        this.logger.groupCollapsed(`${identifier} #${functionName}`);\n        this.logger.log(\"details:\", Object.assign({}, detail));\n        this.logger.groupEnd();\n    }\n}\nfunction domReady() {\n    return new Promise((resolve) => {\n        if (document.readyState == \"loading\") {\n            document.addEventListener(\"DOMContentLoaded\", () => resolve());\n        }\n        else {\n            resolve();\n        }\n    });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n    const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n    return classes.reduce((properties, classDefinition) => {\n        return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n    }, {});\n}\nfunction propertiesForClassDefinition(key) {\n    return {\n        [`${key}Class`]: {\n            get() {\n                const { classes } = this;\n                if (classes.has(key)) {\n                    return classes.get(key);\n                }\n                else {\n                    const attribute = classes.getAttributeName(key);\n                    throw new Error(`Missing attribute \"${attribute}\"`);\n                }\n            },\n        },\n        [`${key}Classes`]: {\n            get() {\n                return this.classes.getAll(key);\n            },\n        },\n        [`has${capitalize(key)}Class`]: {\n            get() {\n                return this.classes.has(key);\n            },\n        },\n    };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n    const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n    return outlets.reduce((properties, outletDefinition) => {\n        return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n    }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n    return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n    let outletController = getOutletController(controller, element, outletName);\n    if (outletController)\n        return outletController;\n    controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n    outletController = getOutletController(controller, element, outletName);\n    if (outletController)\n        return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n    const camelizedName = namespaceCamelize(name);\n    return {\n        [`${camelizedName}Outlet`]: {\n            get() {\n                const outletElement = this.outlets.find(name);\n                const selector = this.outlets.getSelectorForOutletName(name);\n                if (outletElement) {\n                    const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n                    if (outletController)\n                        return outletController;\n                    throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n                }\n                throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n            },\n        },\n        [`${camelizedName}Outlets`]: {\n            get() {\n                const outlets = this.outlets.findAll(name);\n                if (outlets.length > 0) {\n                    return outlets\n                        .map((outletElement) => {\n                        const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n                        if (outletController)\n                            return outletController;\n                        console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n                    })\n                        .filter((controller) => controller);\n                }\n                return [];\n            },\n        },\n        [`${camelizedName}OutletElement`]: {\n            get() {\n                const outletElement = this.outlets.find(name);\n                const selector = this.outlets.getSelectorForOutletName(name);\n                if (outletElement) {\n                    return outletElement;\n                }\n                else {\n                    throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n                }\n            },\n        },\n        [`${camelizedName}OutletElements`]: {\n            get() {\n                return this.outlets.findAll(name);\n            },\n        },\n        [`has${capitalize(camelizedName)}Outlet`]: {\n            get() {\n                return this.outlets.has(name);\n            },\n        },\n    };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n    const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n    return targets.reduce((properties, targetDefinition) => {\n        return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n    }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n    return {\n        [`${name}Target`]: {\n            get() {\n                const target = this.targets.find(name);\n                if (target) {\n                    return target;\n                }\n                else {\n                    throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n                }\n            },\n        },\n        [`${name}Targets`]: {\n            get() {\n                return this.targets.findAll(name);\n            },\n        },\n        [`has${capitalize(name)}Target`]: {\n            get() {\n                return this.targets.has(name);\n            },\n        },\n    };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n    const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n    const propertyDescriptorMap = {\n        valueDescriptorMap: {\n            get() {\n                return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n                    const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n                    const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n                    return Object.assign(result, { [attributeName]: valueDescriptor });\n                }, {});\n            },\n        },\n    };\n    return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n        return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n    }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n    const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n    const { key, name, reader: read, writer: write } = definition;\n    return {\n        [name]: {\n            get() {\n                const value = this.data.get(key);\n                if (value !== null) {\n                    return read(value);\n                }\n                else {\n                    return definition.defaultValue;\n                }\n            },\n            set(value) {\n                if (value === undefined) {\n                    this.data.delete(key);\n                }\n                else {\n                    this.data.set(key, write(value));\n                }\n            },\n        },\n        [`has${capitalize(name)}`]: {\n            get() {\n                return this.data.has(key) || definition.hasCustomDefaultValue;\n            },\n        },\n    };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n    return valueDescriptorForTokenAndTypeDefinition({\n        controller,\n        token,\n        typeDefinition,\n    });\n}\nfunction parseValueTypeConstant(constant) {\n    switch (constant) {\n        case Array:\n            return \"array\";\n        case Boolean:\n            return \"boolean\";\n        case Number:\n            return \"number\";\n        case Object:\n            return \"object\";\n        case String:\n            return \"string\";\n    }\n}\nfunction parseValueTypeDefault(defaultValue) {\n    switch (typeof defaultValue) {\n        case \"boolean\":\n            return \"boolean\";\n        case \"number\":\n            return \"number\";\n        case \"string\":\n            return \"string\";\n    }\n    if (Array.isArray(defaultValue))\n        return \"array\";\n    if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n        return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n    const { controller, token, typeObject } = payload;\n    const hasType = isSomething(typeObject.type);\n    const hasDefault = isSomething(typeObject.default);\n    const fullObject = hasType && hasDefault;\n    const onlyType = hasType && !hasDefault;\n    const onlyDefault = !hasType && hasDefault;\n    const typeFromObject = parseValueTypeConstant(typeObject.type);\n    const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n    if (onlyType)\n        return typeFromObject;\n    if (onlyDefault)\n        return typeFromDefaultValue;\n    if (typeFromObject !== typeFromDefaultValue) {\n        const propertyPath = controller ? `${controller}.${token}` : token;\n        throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n    }\n    if (fullObject)\n        return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n    const { controller, token, typeDefinition } = payload;\n    const typeObject = { controller, token, typeObject: typeDefinition };\n    const typeFromObject = parseValueTypeObject(typeObject);\n    const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n    const typeFromConstant = parseValueTypeConstant(typeDefinition);\n    const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n    if (type)\n        return type;\n    const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n    throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n    const constant = parseValueTypeConstant(typeDefinition);\n    if (constant)\n        return defaultValuesByType[constant];\n    const hasDefault = hasProperty(typeDefinition, \"default\");\n    const hasType = hasProperty(typeDefinition, \"type\");\n    const typeObject = typeDefinition;\n    if (hasDefault)\n        return typeObject.default;\n    if (hasType) {\n        const { type } = typeObject;\n        const constantFromType = parseValueTypeConstant(type);\n        if (constantFromType)\n            return defaultValuesByType[constantFromType];\n    }\n    return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n    const { token, typeDefinition } = payload;\n    const key = `${dasherize(token)}-value`;\n    const type = parseValueTypeDefinition(payload);\n    return {\n        type,\n        key,\n        name: camelize(key),\n        get defaultValue() {\n            return defaultValueForDefinition(typeDefinition);\n        },\n        get hasCustomDefaultValue() {\n            return parseValueTypeDefault(typeDefinition) !== undefined;\n        },\n        reader: readers[type],\n        writer: writers[type] || writers.default,\n    };\n}\nconst defaultValuesByType = {\n    get array() {\n        return [];\n    },\n    boolean: false,\n    number: 0,\n    get object() {\n        return {};\n    },\n    string: \"\",\n};\nconst readers = {\n    array(value) {\n        const array = JSON.parse(value);\n        if (!Array.isArray(array)) {\n            throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n        }\n        return array;\n    },\n    boolean(value) {\n        return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n    },\n    number(value) {\n        return Number(value.replace(/_/g, \"\"));\n    },\n    object(value) {\n        const object = JSON.parse(value);\n        if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n            throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n        }\n        return object;\n    },\n    string(value) {\n        return value;\n    },\n};\nconst writers = {\n    default: writeString,\n    array: writeJSON,\n    object: writeJSON,\n};\nfunction writeJSON(value) {\n    return JSON.stringify(value);\n}\nfunction writeString(value) {\n    return `${value}`;\n}\n\nclass Controller {\n    constructor(context) {\n        this.context = context;\n    }\n    static get shouldLoad() {\n        return true;\n    }\n    static afterLoad(_identifier, _application) {\n        return;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get targets() {\n        return this.scope.targets;\n    }\n    get outlets() {\n        return this.scope.outlets;\n    }\n    get classes() {\n        return this.scope.classes;\n    }\n    get data() {\n        return this.scope.data;\n    }\n    initialize() {\n    }\n    connect() {\n    }\n    disconnect() {\n    }\n    dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true, } = {}) {\n        const type = prefix ? `${prefix}:${eventName}` : eventName;\n        const event = new CustomEvent(type, { detail, bubbles, cancelable });\n        target.dispatchEvent(event);\n        return event;\n    }\n}\nController.blessings = [\n    ClassPropertiesBlessing,\n    TargetPropertiesBlessing,\n    ValuePropertiesBlessing,\n    OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n", "import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n  static values = {\n    fadeIn: String,\n    delay: String,\n    fadeOut: String,\n  }\n\n  connect() {\n    this.alert()\n  }\n\n  alert() {\n    this.fadeInCurrentAlert()\n    this.fadeOutCurrentAlert()\n  }\n\n  fadeInCurrentAlert() {\n    const fadeIn = this.spread() + parseInt(this.fadeInValue)\n\n    $(this.element).fadeIn(fadeIn)\n  }\n\n  fadeOutCurrentAlert() {\n    const delay = this.spread() + parseInt(this.delayValue)\n\n    $(this.element)\n      .delay(delay)\n      .fadeOut(this.fadeOutValue, () => {\n        this.remove()\n      })\n  }\n\n  spread() {\n    let spread = 0\n    if (this.domAlertsLength() > 1) {\n      spread = this.alertIndex() * 300\n    }\n    return spread\n  }\n\n  previousAlert() {\n    return $(this.allAlerts()[this.alertIndex() - 1])\n  }\n\n  nextAlert() {\n    return $(this.allAlerts()[this.alertIndex() + 1])\n  }\n\n  allAlerts() {\n    return $(\"[data-controller='alert']\")\n  }\n\n  domAlertsLength() {\n    return this.allAlerts().length\n  }\n\n  alertIndex() {\n    return this.allAlerts().index(this.element)\n  }\n\n  remove() {\n    this.element.remove()\n  }\n\n  close(event) {\n    event.preventDefault()\n    $(this.element).hide()\n    this.remove()\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n  handleError = (error, message, detail) => {\n    const context = {\n      controller: this.identifier,\n      ...detail,\n    }\n    this.application.handleError(error, message, context)\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n  static targets = ['group']\n  static values = {\n    delay: { type: Number, default: 20000 },\n  }\n\n  connect() {\n    setTimeout(() => {\n      this.groupTarget.dataset.disabled = false\n    }, this.delayValue)\n  }\n}\n", "import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n  connect() {\n    // updateComplete() tells us Web Awesome elements have finished hydrating\n    if (typeof this.element.updateComplete !== 'undefined') {\n      this.element.updateComplete.then(() => {\n        this.element.focus()\n      })\n    } else {\n      this.element.focus()\n    }\n  }\n}\n", "import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n  static targets = ['domElement']\n  static classes = ['add', 'remove', 'toggle']\n  static outlets = ['classlist']\n\n  /*\n    A controller that makes it simple to add, remove, replace, or toggle classes.\n  */\n\n  connect() {\n    this.htmlElements = this.hasDomElementTarget ? this.domElementTargets : [this.element]\n  }\n\n  add() {\n    this.htmlElements.forEach((element) => element.classList.add(...this.addClasses))\n  }\n\n  remove() {\n    this.htmlElements.forEach((element) => element.classList.remove(...this.removeClasses))\n  }\n\n  toggle() {\n    this.htmlElements.forEach((element) => {\n      this.toggleClasses.forEach((className) => element.classList.toggle(className))\n    })\n  }\n\n  // Methods to interact with outlet controllers\n  addToOutlets() {\n    this.classlistOutlets.forEach((outlet) => outlet.add())\n  }\n\n  removeFromOutlets() {\n    this.classlistOutlets.forEach((outlet) => outlet.remove())\n  }\n\n  toggleOutlets() {\n    this.classlistOutlets.forEach((outlet) => outlet.toggle())\n  }\n}\n", "import '@github/clipboard-copy-element'\nimport tippy from 'tippy.js'\nimport ApplicationController from './application_controller'\nimport { i18n } from '../i18n-js/config'\nimport Cookies from 'js-cookie'\n\n/* A stimulus controller that wraps the clipboard-copy web component.\n\n  USAGE:\n  1. Wrap an icon (or whatever you intend for the user to click) with the\n     <clipboard-copy> custom element.\n  2. Add the data-controller=\"clipboard-copy\" attribute\n  3. Optionally pass in custom class names if you need to apply different\n     classnames to the copy button after it is clicked. By default, we apply\n     'fa fa-check text-green-500'.\n  4. Let stimulus know about the copy button by adding data-clipboard-copy-target=\"copyBtn\"\n     to the icon or whatever you wrapped with the custom element in step 1.\n\n    See https://github.com/github/clipboard-copy-element#data-sources\n    for the various ways you can identify the source data to copy. Here's\n    an example using the `for` attribute:\n\n    <div id=\"site-url\">Something something</div> // The thing you want to copy\n\n    <clipboard-copy for=\"site-url\"\n      class= \"cf-button-icon cf-button-secondary\"\n      data-controller=\"clipboard-copy\"\n      data-action=\"clipboard-copy->clipboard-copy#handleCopy\"\n      data-clipboard-copy-copied-class-value=\"far fa-check text-green-500\"\n    >\n      <i class=\"far fa-link\" data-clipboard-copy-target=\"copyBtn\"></i>\n    </clipboard-copy>\n*/\n\nexport default class extends ApplicationController {\n  static targets = ['copyBtn']\n  static values = {\n    copiedClass: String,\n    tooltipMessage: { type: String, default: 'Click to Copy' },\n  }\n\n  connect() {\n    const locale = Cookies.get('locale') || 'en'\n    tippy(this.element, {\n      content:\n        this.tooltipMessageValue == 'Click to Copy'\n          ? i18n.t('stimulus.clipboard_copy.click_to_copy', { lng: locale })\n          : this.tooltipMessageValue,\n    })\n  }\n\n  handleCopy() {\n    const copyBtnTargetClasses = [...this.copyBtnTarget.classList]\n    const isCopiedClasses = (this.copiedClassValue || 'far fa-check text-green-500').split(' ')\n\n    copyBtnTargetClasses.forEach((c) => this.copyBtnTarget.classList.remove(c))\n    isCopiedClasses.forEach((c) => this.copyBtnTarget.classList.add(c))\n\n    setTimeout(() => {\n      isCopiedClasses.forEach((c) => this.copyBtnTarget.classList.remove(c))\n      copyBtnTargetClasses.forEach((c) => this.copyBtnTarget.classList.add(c))\n      this.element.blur()\n    }, 1500)\n  }\n}\n", "function createNode(text) {\n  const node = document.createElement('pre');\n  node.style.width = '1px';\n  node.style.height = '1px';\n  node.style.position = 'fixed';\n  node.style.top = '5px';\n  node.textContent = text;\n  return node;\n}\n\nfunction copyNode(node) {\n  if ('clipboard' in navigator) {\n    // eslint-disable-next-line flowtype/no-flow-fix-me-comments\n    // $FlowFixMe Clipboard is not defined in Flow yet.\n    return navigator.clipboard.writeText(node.textContent);\n  }\n\n  const selection = getSelection();\n\n  if (selection == null) {\n    return Promise.reject(new Error());\n  }\n\n  selection.removeAllRanges();\n  const range = document.createRange();\n  range.selectNodeContents(node);\n  selection.addRange(range);\n  document.execCommand('copy');\n  selection.removeAllRanges();\n  return Promise.resolve();\n}\nfunction copyText(text) {\n  if ('clipboard' in navigator) {\n    // eslint-disable-next-line flowtype/no-flow-fix-me-comments\n    // $FlowFixMe Clipboard is not defined in Flow yet.\n    return navigator.clipboard.writeText(text);\n  }\n\n  const body = document.body;\n\n  if (!body) {\n    return Promise.reject(new Error());\n  }\n\n  const node = createNode(text);\n  body.appendChild(node);\n  copyNode(node);\n  body.removeChild(node);\n  return Promise.resolve();\n}\n\nfunction copy(button) {\n  const id = button.getAttribute('for');\n  const text = button.getAttribute('value');\n\n  function trigger() {\n    button.dispatchEvent(new CustomEvent('clipboard-copy', {\n      bubbles: true\n    }));\n  }\n\n  if (text) {\n    copyText(text).then(trigger);\n  } else if (id) {\n    const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument;\n    if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return;\n    const node = root.getElementById(id);\n    if (node) copyTarget(node).then(trigger);\n  }\n}\n\nfunction copyTarget(content) {\n  if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) {\n    return copyText(content.value);\n  } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) {\n    return copyText(content.href);\n  } else {\n    return copyNode(content);\n  }\n}\n\nfunction clicked(event) {\n  const button = event.currentTarget;\n\n  if (button instanceof HTMLElement) {\n    copy(button);\n  }\n}\n\nfunction keydown(event) {\n  if (event.key === ' ' || event.key === 'Enter') {\n    const button = event.currentTarget;\n\n    if (button instanceof HTMLElement) {\n      event.preventDefault();\n      copy(button);\n    }\n  }\n}\n\nfunction focused(event) {\n  event.currentTarget.addEventListener('keydown', keydown);\n}\n\nfunction blurred(event) {\n  event.currentTarget.removeEventListener('keydown', keydown);\n}\n\nclass ClipboardCopyElement extends HTMLElement {\n  constructor() {\n    super();\n    this.addEventListener('click', clicked);\n    this.addEventListener('focus', focused);\n    this.addEventListener('blur', blurred);\n  }\n\n  connectedCallback() {\n    if (!this.hasAttribute('tabindex')) {\n      this.setAttribute('tabindex', '0');\n    }\n\n    if (!this.hasAttribute('role')) {\n      this.setAttribute('role', 'button');\n    }\n  }\n\n  get value() {\n    return this.getAttribute('value') || '';\n  }\n\n  set value(text) {\n    this.setAttribute('value', text);\n  }\n\n}\n\nif (!window.customElements.get('clipboard-copy')) {\n  window.ClipboardCopyElement = ClipboardCopyElement;\n  window.customElements.define('clipboard-copy', ClipboardCopyElement);\n}\n\nexport default ClipboardCopyElement;\n", "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 as applyStyles } from \"./applyStyles.js\";\nexport { default as arrow } from \"./arrow.js\";\nexport { default as computeStyles } from \"./computeStyles.js\";\nexport { default as eventListeners } from \"./eventListeners.js\";\nexport { default as flip } from \"./flip.js\";\nexport { default as hide } from \"./hide.js\";\nexport { default as offset } from \"./offset.js\";\nexport { default as popperOffsets } from \"./popperOffsets.js\";\nexport { default as preventOverflow } from \"./preventOverflow.js\";", "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};", "export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\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 };", "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 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};", "import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\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 { isHTMLElement } from \"./instanceOf.js\";\nvar round = Math.round;\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    // Fallback to 1 in case both values are `0`\n    scaleX = rect.width / element.offsetWidth || 1;\n    scaleY = rect.height / element.offsetHeight || 1;\n  }\n\n  return {\n    width: round(rect.width / scaleX),\n    height: round(rect.height / scaleY),\n    top: round(rect.top / scaleY),\n    right: round(rect.right / scaleX),\n    bottom: round(rect.bottom / scaleY),\n    left: round(rect.left / scaleX),\n    x: round(rect.left / scaleX),\n    y: round(rect.top / scaleY)\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\";\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}", "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 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 { 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}", "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 default function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}", "export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;", "import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}", "export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}", "export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}", "import { top, left, right, bottom } 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 { 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(round(x * dpr) / dpr) || 0,\n    y: round(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      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets;\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') {\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) {\n      sideY = bottom; // $FlowFixMe[prop-missing]\n\n      y -= offsetParent[heightProp] - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left) {\n      sideX = right; // $FlowFixMe[prop-missing]\n\n      x -= offsetParent[widthProp] - 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) < 2 ? \"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    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration\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};", "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};", "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 getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.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 referenceElement = state.elements.reference;\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(referenceElement);\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 { 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)) : isHTMLElement(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';\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 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 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\";\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 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 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}", "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 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}", "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 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}", "export default function getVariation(placement) {\n  return placement.split('-')[1];\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 { 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\";\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};", "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 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 { max as mathMax, min as mathMin } 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 data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis || checkAltAxis) {\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 = popperOffsets[mainAxis] + overflow[mainSide];\n    var max = popperOffsets[mainAxis] - 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 - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\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 = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n    var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n    if (checkMainAxis) {\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 _mainSide = mainAxis === 'x' ? top : left;\n\n      var _altSide = mainAxis === 'x' ? bottom : right;\n\n      var _offset = popperOffsets[altAxis];\n\n      var _min = _offset + overflow[_mainSide];\n\n      var _max = _offset - overflow[_altSide];\n\n      var _preventedOffset = within(tether ? mathMin(_min, tetherMin) : _min, _offset, tether ? mathMax(_max, tetherMax) : _max);\n\n      popperOffsets[altAxis] = _preventedOffset;\n      data[altAxis] = _preventedOffset - _offset;\n    }\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 getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\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(options) {\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 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\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = rect.width / element.offsetWidth || 1;\n  var scaleY = 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 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}", "export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\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}", "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    Object.keys(modifier).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        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 (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 (!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 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}", "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 { 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\";", "export const ROUND_ARROW =\n  '<svg width=\"16\" height=\"6\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 6s1.796-.013 4.67-3.615C5.851.9 6.93.006 8 0c1.07-.006 2.148.887 3.343 2.385C14.233 6.005 16 6 16 6H0z\"></svg>';\n\nexport const BOX_CLASS = `__NAMESPACE_PREFIX__-box`;\nexport const CONTENT_CLASS = `__NAMESPACE_PREFIX__-content`;\nexport const BACKDROP_CLASS = `__NAMESPACE_PREFIX__-backdrop`;\nexport const ARROW_CLASS = `__NAMESPACE_PREFIX__-arrow`;\nexport const SVG_ARROW_CLASS = `__NAMESPACE_PREFIX__-svg-arrow`;\n\nexport const TOUCH_OPTIONS = {passive: true, capture: true};\n", "import {BasePlacement, Placement} from './types';\n\nexport function hasOwnProperty(obj: object, key: string): boolean {\n  return {}.hasOwnProperty.call(obj, key);\n}\n\nexport function getValueAtIndexOrReturn<T>(\n  value: T | [T | null, T | null],\n  index: number,\n  defaultValue: T | [T, T]\n): T {\n  if (Array.isArray(value)) {\n    const v = value[index];\n    return v == null\n      ? Array.isArray(defaultValue)\n        ? defaultValue[index]\n        : defaultValue\n      : v;\n  }\n\n  return value;\n}\n\nexport function isType(value: any, type: string): boolean {\n  const str = {}.toString.call(value);\n  return str.indexOf('[object') === 0 && str.indexOf(`${type}]`) > -1;\n}\n\nexport function invokeWithArgsOrReturn(value: any, args: any[]): any {\n  return typeof value === 'function' ? value(...args) : value;\n}\n\nexport function debounce<T>(\n  fn: (arg: T) => void,\n  ms: number\n): (arg: T) => void {\n  // Avoid wrapping in `setTimeout` if ms is 0 anyway\n  if (ms === 0) {\n    return fn;\n  }\n\n  let timeout: any;\n\n  return (arg): void => {\n    clearTimeout(timeout);\n    timeout = setTimeout(() => {\n      fn(arg);\n    }, ms);\n  };\n}\n\nexport function removeProperties<T>(obj: T, keys: string[]): Partial<T> {\n  const clone = {...obj};\n  keys.forEach((key) => {\n    delete (clone as any)[key];\n  });\n  return clone;\n}\n\nexport function splitBySpaces(value: string): string[] {\n  return value.split(/\\s+/).filter(Boolean);\n}\n\nexport function normalizeToArray<T>(value: T | T[]): T[] {\n  return ([] as T[]).concat(value);\n}\n\nexport function pushIfUnique<T>(arr: T[], value: T): void {\n  if (arr.indexOf(value) === -1) {\n    arr.push(value);\n  }\n}\n\nexport function appendPxIfNumber(value: string | number): string {\n  return typeof value === 'number' ? `${value}px` : value;\n}\n\nexport function unique<T>(arr: T[]): T[] {\n  return arr.filter((item, index) => arr.indexOf(item) === index);\n}\n\nexport function getNumber(value: string | number): number {\n  return typeof value === 'number' ? value : parseFloat(value);\n}\n\nexport function getBasePlacement(placement: Placement): BasePlacement {\n  return placement.split('-')[0] as BasePlacement;\n}\n\nexport function arrayFrom(value: ArrayLike<any>): any[] {\n  return [].slice.call(value);\n}\n\nexport function removeUndefinedProps(\n  obj: Record<string, unknown>\n): Partial<Record<string, unknown>> {\n  return Object.keys(obj).reduce((acc, key) => {\n    if (obj[key] !== undefined) {\n      (acc as any)[key] = obj[key];\n    }\n\n    return acc;\n  }, {});\n}\n", "import {ReferenceElement, Targets} from './types';\nimport {PopperTreeData} from './types-internal';\nimport {arrayFrom, isType, normalizeToArray, getBasePlacement} from './utils';\n\nexport function div(): HTMLDivElement {\n  return document.createElement('div');\n}\n\nexport function isElement(value: unknown): value is Element | DocumentFragment {\n  return ['Element', 'Fragment'].some((type) => isType(value, type));\n}\n\nexport function isNodeList(value: unknown): value is NodeList {\n  return isType(value, 'NodeList');\n}\n\nexport function isMouseEvent(value: unknown): value is MouseEvent {\n  return isType(value, 'MouseEvent');\n}\n\nexport function isReferenceElement(value: any): value is ReferenceElement {\n  return !!(value && value._tippy && value._tippy.reference === value);\n}\n\nexport function getArrayOfElements(value: Targets): Element[] {\n  if (isElement(value)) {\n    return [value];\n  }\n\n  if (isNodeList(value)) {\n    return arrayFrom(value);\n  }\n\n  if (Array.isArray(value)) {\n    return value;\n  }\n\n  return arrayFrom(document.querySelectorAll(value));\n}\n\nexport function setTransitionDuration(\n  els: (HTMLDivElement | null)[],\n  value: number\n): void {\n  els.forEach((el) => {\n    if (el) {\n      el.style.transitionDuration = `${value}ms`;\n    }\n  });\n}\n\nexport function setVisibilityState(\n  els: (HTMLDivElement | null)[],\n  state: 'visible' | 'hidden'\n): void {\n  els.forEach((el) => {\n    if (el) {\n      el.setAttribute('data-state', state);\n    }\n  });\n}\n\nexport function getOwnerDocument(\n  elementOrElements: Element | Element[]\n): Document {\n  const [element] = normalizeToArray(elementOrElements);\n\n  // Elements created via a <template> have an ownerDocument with no reference to the body\n  return element?.ownerDocument?.body ? element.ownerDocument : document;\n}\n\nexport function isCursorOutsideInteractiveBorder(\n  popperTreeData: PopperTreeData[],\n  event: MouseEvent\n): boolean {\n  const {clientX, clientY} = event;\n\n  return popperTreeData.every(({popperRect, popperState, props}) => {\n    const {interactiveBorder} = props;\n    const basePlacement = getBasePlacement(popperState.placement);\n    const offsetData = popperState.modifiersData.offset;\n\n    if (!offsetData) {\n      return true;\n    }\n\n    const topDistance = basePlacement === 'bottom' ? offsetData.top!.y : 0;\n    const bottomDistance = basePlacement === 'top' ? offsetData.bottom!.y : 0;\n    const leftDistance = basePlacement === 'right' ? offsetData.left!.x : 0;\n    const rightDistance = basePlacement === 'left' ? offsetData.right!.x : 0;\n\n    const exceedsTop =\n      popperRect.top - clientY + topDistance > interactiveBorder;\n    const exceedsBottom =\n      clientY - popperRect.bottom - bottomDistance > interactiveBorder;\n    const exceedsLeft =\n      popperRect.left - clientX + leftDistance > interactiveBorder;\n    const exceedsRight =\n      clientX - popperRect.right - rightDistance > interactiveBorder;\n\n    return exceedsTop || exceedsBottom || exceedsLeft || exceedsRight;\n  });\n}\n\nexport function updateTransitionEndListener(\n  box: HTMLDivElement,\n  action: 'add' | 'remove',\n  listener: (event: TransitionEvent) => void\n): void {\n  const method = `${action}EventListener` as\n    | 'addEventListener'\n    | 'removeEventListener';\n\n  // some browsers apparently support `transition` (unprefixed) but only fire\n  // `webkitTransitionEnd`...\n  ['transitionend', 'webkitTransitionEnd'].forEach((event) => {\n    box[method](event, listener as EventListener);\n  });\n}\n", "import {TOUCH_OPTIONS} from './constants';\nimport {isReferenceElement} from './dom-utils';\n\nexport const currentInput = {isTouch: false};\nlet lastMouseMoveTime = 0;\n\n/**\n * When a `touchstart` event is fired, it's assumed the user is using touch\n * input. We'll bind a `mousemove` event listener to listen for mouse input in\n * the future. This way, the `isTouch` property is fully dynamic and will handle\n * hybrid devices that use a mix of touch + mouse input.\n */\nexport function onDocumentTouchStart(): void {\n  if (currentInput.isTouch) {\n    return;\n  }\n\n  currentInput.isTouch = true;\n\n  if (window.performance) {\n    document.addEventListener('mousemove', onDocumentMouseMove);\n  }\n}\n\n/**\n * When two `mousemove` event are fired consecutively within 20ms, it's assumed\n * the user is using mouse input again. `mousemove` can fire on touch devices as\n * well, but very rarely that quickly.\n */\nexport function onDocumentMouseMove(): void {\n  const now = performance.now();\n\n  if (now - lastMouseMoveTime < 20) {\n    currentInput.isTouch = false;\n\n    document.removeEventListener('mousemove', onDocumentMouseMove);\n  }\n\n  lastMouseMoveTime = now;\n}\n\n/**\n * When an element is in focus and has a tippy, leaving the tab/window and\n * returning causes it to show again. For mouse users this is unexpected, but\n * for keyboard use it makes sense.\n * TODO: find a better technique to solve this problem\n */\nexport function onWindowBlur(): void {\n  const activeElement = document.activeElement as HTMLElement | null;\n\n  if (isReferenceElement(activeElement)) {\n    const instance = activeElement._tippy!;\n\n    if (activeElement.blur && !instance.state.isVisible) {\n      activeElement.blur();\n    }\n  }\n}\n\nexport default function bindGlobalEventListeners(): void {\n  document.addEventListener('touchstart', onDocumentTouchStart, TOUCH_OPTIONS);\n  window.addEventListener('blur', onWindowBlur);\n}\n", "export const isBrowser =\n  typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst ua = isBrowser ? navigator.userAgent : '';\n\nexport const isIE = /MSIE |Trident\\//.test(ua);\n", "import {Targets} from './types';\n\nexport function createMemoryLeakWarning(method: string): string {\n  const txt = method === 'destroy' ? 'n already-' : ' ';\n\n  return [\n    `${method}() was called on a${txt}destroyed instance. This is a no-op but`,\n    'indicates a potential memory leak.',\n  ].join(' ');\n}\n\nexport function clean(value: string): string {\n  const spacesAndTabs = /[ \\t]{2,}/g;\n  const lineStartWithSpaces = /^[ \\t]*/gm;\n\n  return value\n    .replace(spacesAndTabs, ' ')\n    .replace(lineStartWithSpaces, '')\n    .trim();\n}\n\nfunction getDevMessage(message: string): string {\n  return clean(`\n  %ctippy.js\n\n  %c${clean(message)}\n\n  %c👷‍ This is a development-only message. It will be removed in production.\n  `);\n}\n\nexport function getFormattedMessage(message: string): string[] {\n  return [\n    getDevMessage(message),\n    // title\n    'color: #00C584; font-size: 1.3em; font-weight: bold;',\n    // message\n    'line-height: 1.5',\n    // footer\n    'color: #a6a095;',\n  ];\n}\n\n// Assume warnings and errors never have the same message\nlet visitedMessages: Set<string>;\nif (__DEV__) {\n  resetVisitedMessages();\n}\n\nexport function resetVisitedMessages(): void {\n  visitedMessages = new Set();\n}\n\nexport function warnWhen(condition: boolean, message: string): void {\n  if (condition && !visitedMessages.has(message)) {\n    visitedMessages.add(message);\n    console.warn(...getFormattedMessage(message));\n  }\n}\n\nexport function errorWhen(condition: boolean, message: string): void {\n  if (condition && !visitedMessages.has(message)) {\n    visitedMessages.add(message);\n    console.error(...getFormattedMessage(message));\n  }\n}\n\nexport function validateTargets(targets: Targets): void {\n  const didPassFalsyValue = !targets;\n  const didPassPlainObject =\n    Object.prototype.toString.call(targets) === '[object Object]' &&\n    !(targets as any).addEventListener;\n\n  errorWhen(\n    didPassFalsyValue,\n    [\n      'tippy() was passed',\n      '`' + String(targets) + '`',\n      'as its targets (first) argument. Valid types are: String, Element,',\n      'Element[], or NodeList.',\n    ].join(' ')\n  );\n\n  errorWhen(\n    didPassPlainObject,\n    [\n      'tippy() was passed a plain object which is not supported as an argument',\n      'for virtual positioning. Use props.getReferenceClientRect instead.',\n    ].join(' ')\n  );\n}\n", "import {DefaultProps, Plugin, Props, ReferenceElement, Tippy} from './types';\nimport {\n  hasOwnProperty,\n  removeProperties,\n  invokeWithArgsOrReturn,\n} from './utils';\nimport {warnWhen} from './validation';\n\nconst pluginProps = {\n  animateFill: false,\n  followCursor: false,\n  inlinePositioning: false,\n  sticky: false,\n};\n\nconst renderProps = {\n  allowHTML: false,\n  animation: 'fade',\n  arrow: true,\n  content: '',\n  inertia: false,\n  maxWidth: 350,\n  role: 'tooltip',\n  theme: '',\n  zIndex: 9999,\n};\n\nexport const defaultProps: DefaultProps = {\n  appendTo: () => document.body,\n  aria: {\n    content: 'auto',\n    expanded: 'auto',\n  },\n  delay: 0,\n  duration: [300, 250],\n  getReferenceClientRect: null,\n  hideOnClick: true,\n  ignoreAttributes: false,\n  interactive: false,\n  interactiveBorder: 2,\n  interactiveDebounce: 0,\n  moveTransition: '',\n  offset: [0, 10],\n  onAfterUpdate() {},\n  onBeforeUpdate() {},\n  onCreate() {},\n  onDestroy() {},\n  onHidden() {},\n  onHide() {},\n  onMount() {},\n  onShow() {},\n  onShown() {},\n  onTrigger() {},\n  onUntrigger() {},\n  onClickOutside() {},\n  placement: 'top',\n  plugins: [],\n  popperOptions: {},\n  render: null,\n  showOnCreate: false,\n  touch: true,\n  trigger: 'mouseenter focus',\n  triggerTarget: null,\n  ...pluginProps,\n  ...renderProps,\n};\n\nconst defaultKeys = Object.keys(defaultProps);\n\nexport const setDefaultProps: Tippy['setDefaultProps'] = (partialProps) => {\n  /* istanbul ignore else */\n  if (__DEV__) {\n    validateProps(partialProps, []);\n  }\n\n  const keys = Object.keys(partialProps) as Array<keyof DefaultProps>;\n  keys.forEach((key) => {\n    (defaultProps as any)[key] = partialProps[key];\n  });\n};\n\nexport function getExtendedPassedProps(\n  passedProps: Partial<Props> & Record<string, unknown>\n): Partial<Props> {\n  const plugins = passedProps.plugins || [];\n  const pluginProps = plugins.reduce<Record<string, unknown>>((acc, plugin) => {\n    const {name, defaultValue} = plugin;\n\n    if (name) {\n      acc[name] =\n        passedProps[name] !== undefined ? passedProps[name] : defaultValue;\n    }\n\n    return acc;\n  }, {});\n\n  return {\n    ...passedProps,\n    ...pluginProps,\n  };\n}\n\nexport function getDataAttributeProps(\n  reference: ReferenceElement,\n  plugins: Plugin[]\n): Record<string, unknown> {\n  const propKeys = plugins\n    ? Object.keys(getExtendedPassedProps({...defaultProps, plugins}))\n    : defaultKeys;\n\n  const props = propKeys.reduce(\n    (acc: Partial<Props> & Record<string, unknown>, key) => {\n      const valueAsString = (\n        reference.getAttribute(`data-tippy-${key}`) || ''\n      ).trim();\n\n      if (!valueAsString) {\n        return acc;\n      }\n\n      if (key === 'content') {\n        acc[key] = valueAsString;\n      } else {\n        try {\n          acc[key] = JSON.parse(valueAsString);\n        } catch (e) {\n          acc[key] = valueAsString;\n        }\n      }\n\n      return acc;\n    },\n    {}\n  );\n\n  return props;\n}\n\nexport function evaluateProps(\n  reference: ReferenceElement,\n  props: Props\n): Props {\n  const out = {\n    ...props,\n    content: invokeWithArgsOrReturn(props.content, [reference]),\n    ...(props.ignoreAttributes\n      ? {}\n      : getDataAttributeProps(reference, props.plugins)),\n  };\n\n  out.aria = {\n    ...defaultProps.aria,\n    ...out.aria,\n  };\n\n  out.aria = {\n    expanded:\n      out.aria.expanded === 'auto' ? props.interactive : out.aria.expanded,\n    content:\n      out.aria.content === 'auto'\n        ? props.interactive\n          ? null\n          : 'describedby'\n        : out.aria.content,\n  };\n\n  return out;\n}\n\nexport function validateProps(\n  partialProps: Partial<Props> = {},\n  plugins: Plugin[] = []\n): void {\n  const keys = Object.keys(partialProps) as Array<keyof Props>;\n  keys.forEach((prop) => {\n    const nonPluginProps = removeProperties(\n      defaultProps,\n      Object.keys(pluginProps)\n    );\n\n    let didPassUnknownProp = !hasOwnProperty(nonPluginProps, prop);\n\n    // Check if the prop exists in `plugins`\n    if (didPassUnknownProp) {\n      didPassUnknownProp =\n        plugins.filter((plugin) => plugin.name === prop).length === 0;\n    }\n\n    warnWhen(\n      didPassUnknownProp,\n      [\n        `\\`${prop}\\``,\n        \"is not a valid prop. You may have spelled it incorrectly, or if it's\",\n        'a plugin, forgot to pass it in an array as props.plugins.',\n        '\\n\\n',\n        'All props: https://atomiks.github.io/tippyjs/v6/all-props/\\n',\n        'Plugins: https://atomiks.github.io/tippyjs/v6/plugins/',\n      ].join(' ')\n    );\n  });\n}\n", "import {\n  ARROW_CLASS,\n  BACKDROP_CLASS,\n  BOX_CLASS,\n  CONTENT_CLASS,\n  SVG_ARROW_CLASS,\n} from './constants';\nimport {div, isElement} from './dom-utils';\nimport {Instance, PopperElement, Props} from './types';\nimport {PopperChildren} from './types-internal';\nimport {arrayFrom} from './utils';\n\n// Firefox extensions don't allow .innerHTML = \"...\" property. This tricks it.\nconst innerHTML = (): 'innerHTML' => 'innerHTML';\n\nfunction dangerouslySetInnerHTML(element: Element, html: string): void {\n  element[innerHTML()] = html;\n}\n\nfunction createArrowElement(value: Props['arrow']): HTMLDivElement {\n  const arrow = div();\n\n  if (value === true) {\n    arrow.className = ARROW_CLASS;\n  } else {\n    arrow.className = SVG_ARROW_CLASS;\n\n    if (isElement(value)) {\n      arrow.appendChild(value);\n    } else {\n      dangerouslySetInnerHTML(arrow, value as string);\n    }\n  }\n\n  return arrow;\n}\n\nexport function setContent(content: HTMLDivElement, props: Props): void {\n  if (isElement(props.content)) {\n    dangerouslySetInnerHTML(content, '');\n    content.appendChild(props.content);\n  } else if (typeof props.content !== 'function') {\n    if (props.allowHTML) {\n      dangerouslySetInnerHTML(content, props.content);\n    } else {\n      content.textContent = props.content;\n    }\n  }\n}\n\nexport function getChildren(popper: PopperElement): PopperChildren {\n  const box = popper.firstElementChild as HTMLDivElement;\n  const boxChildren = arrayFrom(box.children);\n\n  return {\n    box,\n    content: boxChildren.find((node) => node.classList.contains(CONTENT_CLASS)),\n    arrow: boxChildren.find(\n      (node) =>\n        node.classList.contains(ARROW_CLASS) ||\n        node.classList.contains(SVG_ARROW_CLASS)\n    ),\n    backdrop: boxChildren.find((node) =>\n      node.classList.contains(BACKDROP_CLASS)\n    ),\n  };\n}\n\nexport function render(\n  instance: Instance\n): {\n  popper: PopperElement;\n  onUpdate?: (prevProps: Props, nextProps: Props) => void;\n} {\n  const popper = div();\n\n  const box = div();\n  box.className = BOX_CLASS;\n  box.setAttribute('data-state', 'hidden');\n  box.setAttribute('tabindex', '-1');\n\n  const content = div();\n  content.className = CONTENT_CLASS;\n  content.setAttribute('data-state', 'hidden');\n\n  setContent(content, instance.props);\n\n  popper.appendChild(box);\n  box.appendChild(content);\n\n  onUpdate(instance.props, instance.props);\n\n  function onUpdate(prevProps: Props, nextProps: Props): void {\n    const {box, content, arrow} = getChildren(popper);\n\n    if (nextProps.theme) {\n      box.setAttribute('data-theme', nextProps.theme);\n    } else {\n      box.removeAttribute('data-theme');\n    }\n\n    if (typeof nextProps.animation === 'string') {\n      box.setAttribute('data-animation', nextProps.animation);\n    } else {\n      box.removeAttribute('data-animation');\n    }\n\n    if (nextProps.inertia) {\n      box.setAttribute('data-inertia', '');\n    } else {\n      box.removeAttribute('data-inertia');\n    }\n\n    box.style.maxWidth =\n      typeof nextProps.maxWidth === 'number'\n        ? `${nextProps.maxWidth}px`\n        : nextProps.maxWidth;\n\n    if (nextProps.role) {\n      box.setAttribute('role', nextProps.role);\n    } else {\n      box.removeAttribute('role');\n    }\n\n    if (\n      prevProps.content !== nextProps.content ||\n      prevProps.allowHTML !== nextProps.allowHTML\n    ) {\n      setContent(content, instance.props);\n    }\n\n    if (nextProps.arrow) {\n      if (!arrow) {\n        box.appendChild(createArrowElement(nextProps.arrow));\n      } else if (prevProps.arrow !== nextProps.arrow) {\n        box.removeChild(arrow);\n        box.appendChild(createArrowElement(nextProps.arrow));\n      }\n    } else if (arrow) {\n      box.removeChild(arrow!);\n    }\n  }\n\n  return {\n    popper,\n    onUpdate,\n  };\n}\n\n// Runtime check to identify if the render function is the default one; this\n// way we can apply default CSS transitions logic and it can be tree-shaken away\nrender.$$tippy = true;\n", "import {createPopper, StrictModifiers, Modifier} from '@popperjs/core';\nimport {currentInput} from './bindGlobalEventListeners';\nimport {isIE} from './browser';\nimport {TOUCH_OPTIONS} from './constants';\nimport {\n  div,\n  getOwnerDocument,\n  isCursorOutsideInteractiveBorder,\n  isMouseEvent,\n  setTransitionDuration,\n  setVisibilityState,\n  updateTransitionEndListener,\n} from './dom-utils';\nimport {defaultProps, evaluateProps, getExtendedPassedProps} from './props';\nimport {getChildren} from './template';\nimport {\n  Content,\n  Instance,\n  LifecycleHooks,\n  PopperElement,\n  Props,\n  ReferenceElement,\n} from './types';\nimport {ListenerObject, PopperTreeData, PopperChildren} from './types-internal';\nimport {\n  arrayFrom,\n  debounce,\n  getValueAtIndexOrReturn,\n  invokeWithArgsOrReturn,\n  normalizeToArray,\n  pushIfUnique,\n  splitBySpaces,\n  unique,\n  removeUndefinedProps,\n} from './utils';\nimport {createMemoryLeakWarning, errorWhen, warnWhen} from './validation';\n\nlet idCounter = 1;\nlet mouseMoveListeners: ((event: MouseEvent) => void)[] = [];\n\n// Used by `hideAll()`\nexport let mountedInstances: Instance[] = [];\n\nexport default function createTippy(\n  reference: ReferenceElement,\n  passedProps: Partial<Props>\n): Instance {\n  const props = evaluateProps(reference, {\n    ...defaultProps,\n    ...getExtendedPassedProps(removeUndefinedProps(passedProps)),\n  });\n\n  // ===========================================================================\n  // 🔒 Private members\n  // ===========================================================================\n  let showTimeout: any;\n  let hideTimeout: any;\n  let scheduleHideAnimationFrame: number;\n  let isVisibleFromClick = false;\n  let didHideDueToDocumentMouseDown = false;\n  let didTouchMove = false;\n  let ignoreOnFirstUpdate = false;\n  let lastTriggerEvent: Event | undefined;\n  let currentTransitionEndListener: (event: TransitionEvent) => void;\n  let onFirstUpdate: () => void;\n  let listeners: ListenerObject[] = [];\n  let debouncedOnMouseMove = debounce(onMouseMove, props.interactiveDebounce);\n  let currentTarget: Element;\n\n  // ===========================================================================\n  // 🔑 Public members\n  // ===========================================================================\n  const id = idCounter++;\n  const popperInstance = null;\n  const plugins = unique(props.plugins);\n\n  const state = {\n    // Is the instance currently enabled?\n    isEnabled: true,\n    // Is the tippy currently showing and not transitioning out?\n    isVisible: false,\n    // Has the instance been destroyed?\n    isDestroyed: false,\n    // Is the tippy currently mounted to the DOM?\n    isMounted: false,\n    // Has the tippy finished transitioning in?\n    isShown: false,\n  };\n\n  const instance: Instance = {\n    // properties\n    id,\n    reference,\n    popper: div(),\n    popperInstance,\n    props,\n    state,\n    plugins,\n    // methods\n    clearDelayTimeouts,\n    setProps,\n    setContent,\n    show,\n    hide,\n    hideWithInteractivity,\n    enable,\n    disable,\n    unmount,\n    destroy,\n  };\n\n  // TODO: Investigate why this early return causes a TDZ error in the tests —\n  // it doesn't seem to happen in the browser\n  /* istanbul ignore if */\n  if (!props.render) {\n    if (__DEV__) {\n      errorWhen(true, 'render() function has not been supplied.');\n    }\n\n    return instance;\n  }\n\n  // ===========================================================================\n  // Initial mutations\n  // ===========================================================================\n  const {popper, onUpdate} = props.render(instance);\n\n  popper.setAttribute('data-__NAMESPACE_PREFIX__-root', '');\n  popper.id = `__NAMESPACE_PREFIX__-${instance.id}`;\n\n  instance.popper = popper;\n  reference._tippy = instance;\n  popper._tippy = instance;\n\n  const pluginsHooks = plugins.map((plugin) => plugin.fn(instance));\n  const hasAriaExpanded = reference.hasAttribute('aria-expanded');\n\n  addListeners();\n  handleAriaExpandedAttribute();\n  handleStyles();\n\n  invokeHook('onCreate', [instance]);\n\n  if (props.showOnCreate) {\n    scheduleShow();\n  }\n\n  // Prevent a tippy with a delay from hiding if the cursor left then returned\n  // before it started hiding\n  popper.addEventListener('mouseenter', () => {\n    if (instance.props.interactive && instance.state.isVisible) {\n      instance.clearDelayTimeouts();\n    }\n  });\n\n  popper.addEventListener('mouseleave', (event) => {\n    if (\n      instance.props.interactive &&\n      instance.props.trigger.indexOf('mouseenter') >= 0\n    ) {\n      getDocument().addEventListener('mousemove', debouncedOnMouseMove);\n      debouncedOnMouseMove(event);\n    }\n  });\n\n  return instance;\n\n  // ===========================================================================\n  // 🔒 Private methods\n  // ===========================================================================\n  function getNormalizedTouchSettings(): [string | boolean, number] {\n    const {touch} = instance.props;\n    return Array.isArray(touch) ? touch : [touch, 0];\n  }\n\n  function getIsCustomTouchBehavior(): boolean {\n    return getNormalizedTouchSettings()[0] === 'hold';\n  }\n\n  function getIsDefaultRenderFn(): boolean {\n    // @ts-ignore\n    return !!instance.props.render?.$$tippy;\n  }\n\n  function getCurrentTarget(): Element {\n    return currentTarget || reference;\n  }\n\n  function getDocument(): Document {\n    const parent = getCurrentTarget().parentNode as Element;\n    return parent ? getOwnerDocument(parent) : document;\n  }\n\n  function getDefaultTemplateChildren(): PopperChildren {\n    return getChildren(popper);\n  }\n\n  function getDelay(isShow: boolean): number {\n    // For touch or keyboard input, force `0` delay for UX reasons\n    // Also if the instance is mounted but not visible (transitioning out),\n    // ignore delay\n    if (\n      (instance.state.isMounted && !instance.state.isVisible) ||\n      currentInput.isTouch ||\n      (lastTriggerEvent && lastTriggerEvent.type === 'focus')\n    ) {\n      return 0;\n    }\n\n    return getValueAtIndexOrReturn(\n      instance.props.delay,\n      isShow ? 0 : 1,\n      defaultProps.delay\n    );\n  }\n\n  function handleStyles(): void {\n    popper.style.pointerEvents =\n      instance.props.interactive && instance.state.isVisible ? '' : 'none';\n    popper.style.zIndex = `${instance.props.zIndex}`;\n  }\n\n  function invokeHook(\n    hook: keyof LifecycleHooks,\n    args: [Instance, any?],\n    shouldInvokePropsHook = true\n  ): void {\n    pluginsHooks.forEach((pluginHooks) => {\n      if (pluginHooks[hook]) {\n        pluginHooks[hook]!(...args);\n      }\n    });\n\n    if (shouldInvokePropsHook) {\n      instance.props[hook](...args);\n    }\n  }\n\n  function handleAriaContentAttribute(): void {\n    const {aria} = instance.props;\n\n    if (!aria.content) {\n      return;\n    }\n\n    const attr = `aria-${aria.content}`;\n    const id = popper.id;\n    const nodes = normalizeToArray(instance.props.triggerTarget || reference);\n\n    nodes.forEach((node) => {\n      const currentValue = node.getAttribute(attr);\n\n      if (instance.state.isVisible) {\n        node.setAttribute(attr, currentValue ? `${currentValue} ${id}` : id);\n      } else {\n        const nextValue = currentValue && currentValue.replace(id, '').trim();\n\n        if (nextValue) {\n          node.setAttribute(attr, nextValue);\n        } else {\n          node.removeAttribute(attr);\n        }\n      }\n    });\n  }\n\n  function handleAriaExpandedAttribute(): void {\n    if (hasAriaExpanded || !instance.props.aria.expanded) {\n      return;\n    }\n\n    const nodes = normalizeToArray(instance.props.triggerTarget || reference);\n\n    nodes.forEach((node) => {\n      if (instance.props.interactive) {\n        node.setAttribute(\n          'aria-expanded',\n          instance.state.isVisible && node === getCurrentTarget()\n            ? 'true'\n            : 'false'\n        );\n      } else {\n        node.removeAttribute('aria-expanded');\n      }\n    });\n  }\n\n  function cleanupInteractiveMouseListeners(): void {\n    getDocument().removeEventListener('mousemove', debouncedOnMouseMove);\n    mouseMoveListeners = mouseMoveListeners.filter(\n      (listener) => listener !== debouncedOnMouseMove\n    );\n  }\n\n  function onDocumentPress(event: MouseEvent | TouchEvent): void {\n    // Moved finger to scroll instead of an intentional tap outside\n    if (currentInput.isTouch) {\n      if (didTouchMove || event.type === 'mousedown') {\n        return;\n      }\n    }\n\n    // Clicked on interactive popper\n    if (\n      instance.props.interactive &&\n      popper.contains(event.target as Element)\n    ) {\n      return;\n    }\n\n    // Clicked on the event listeners target\n    if (getCurrentTarget().contains(event.target as Element)) {\n      if (currentInput.isTouch) {\n        return;\n      }\n\n      if (\n        instance.state.isVisible &&\n        instance.props.trigger.indexOf('click') >= 0\n      ) {\n        return;\n      }\n    } else {\n      invokeHook('onClickOutside', [instance, event]);\n    }\n\n    if (instance.props.hideOnClick === true) {\n      instance.clearDelayTimeouts();\n      instance.hide();\n\n      // `mousedown` event is fired right before `focus` if pressing the\n      // currentTarget. This lets a tippy with `focus` trigger know that it\n      // should not show\n      didHideDueToDocumentMouseDown = true;\n      setTimeout(() => {\n        didHideDueToDocumentMouseDown = false;\n      });\n\n      // The listener gets added in `scheduleShow()`, but this may be hiding it\n      // before it shows, and hide()'s early bail-out behavior can prevent it\n      // from being cleaned up\n      if (!instance.state.isMounted) {\n        removeDocumentPress();\n      }\n    }\n  }\n\n  function onTouchMove(): void {\n    didTouchMove = true;\n  }\n\n  function onTouchStart(): void {\n    didTouchMove = false;\n  }\n\n  function addDocumentPress(): void {\n    const doc = getDocument();\n    doc.addEventListener('mousedown', onDocumentPress, true);\n    doc.addEventListener('touchend', onDocumentPress, TOUCH_OPTIONS);\n    doc.addEventListener('touchstart', onTouchStart, TOUCH_OPTIONS);\n    doc.addEventListener('touchmove', onTouchMove, TOUCH_OPTIONS);\n  }\n\n  function removeDocumentPress(): void {\n    const doc = getDocument();\n    doc.removeEventListener('mousedown', onDocumentPress, true);\n    doc.removeEventListener('touchend', onDocumentPress, TOUCH_OPTIONS);\n    doc.removeEventListener('touchstart', onTouchStart, TOUCH_OPTIONS);\n    doc.removeEventListener('touchmove', onTouchMove, TOUCH_OPTIONS);\n  }\n\n  function onTransitionedOut(duration: number, callback: () => void): void {\n    onTransitionEnd(duration, () => {\n      if (\n        !instance.state.isVisible &&\n        popper.parentNode &&\n        popper.parentNode.contains(popper)\n      ) {\n        callback();\n      }\n    });\n  }\n\n  function onTransitionedIn(duration: number, callback: () => void): void {\n    onTransitionEnd(duration, callback);\n  }\n\n  function onTransitionEnd(duration: number, callback: () => void): void {\n    const box = getDefaultTemplateChildren().box;\n\n    function listener(event: TransitionEvent): void {\n      if (event.target === box) {\n        updateTransitionEndListener(box, 'remove', listener);\n        callback();\n      }\n    }\n\n    // Make callback synchronous if duration is 0\n    // `transitionend` won't fire otherwise\n    if (duration === 0) {\n      return callback();\n    }\n\n    updateTransitionEndListener(box, 'remove', currentTransitionEndListener);\n    updateTransitionEndListener(box, 'add', listener);\n\n    currentTransitionEndListener = listener;\n  }\n\n  function on(\n    eventType: string,\n    handler: EventListener,\n    options: boolean | object = false\n  ): void {\n    const nodes = normalizeToArray(instance.props.triggerTarget || reference);\n    nodes.forEach((node) => {\n      node.addEventListener(eventType, handler, options);\n      listeners.push({node, eventType, handler, options});\n    });\n  }\n\n  function addListeners(): void {\n    if (getIsCustomTouchBehavior()) {\n      on('touchstart', onTrigger, {passive: true});\n      on('touchend', onMouseLeave as EventListener, {passive: true});\n    }\n\n    splitBySpaces(instance.props.trigger).forEach((eventType) => {\n      if (eventType === 'manual') {\n        return;\n      }\n\n      on(eventType, onTrigger);\n\n      switch (eventType) {\n        case 'mouseenter':\n          on('mouseleave', onMouseLeave as EventListener);\n          break;\n        case 'focus':\n          on(isIE ? 'focusout' : 'blur', onBlurOrFocusOut as EventListener);\n          break;\n        case 'focusin':\n          on('focusout', onBlurOrFocusOut as EventListener);\n          break;\n      }\n    });\n  }\n\n  function removeListeners(): void {\n    listeners.forEach(({node, eventType, handler, options}: ListenerObject) => {\n      node.removeEventListener(eventType, handler, options);\n    });\n    listeners = [];\n  }\n\n  function onTrigger(event: Event): void {\n    let shouldScheduleClickHide = false;\n\n    if (\n      !instance.state.isEnabled ||\n      isEventListenerStopped(event) ||\n      didHideDueToDocumentMouseDown\n    ) {\n      return;\n    }\n\n    const wasFocused = lastTriggerEvent?.type === 'focus';\n\n    lastTriggerEvent = event;\n    currentTarget = event.currentTarget as Element;\n\n    handleAriaExpandedAttribute();\n\n    if (!instance.state.isVisible && isMouseEvent(event)) {\n      // If scrolling, `mouseenter` events can be fired if the cursor lands\n      // over a new target, but `mousemove` events don't get fired. This\n      // causes interactive tooltips to get stuck open until the cursor is\n      // moved\n      mouseMoveListeners.forEach((listener) => listener(event));\n    }\n\n    // Toggle show/hide when clicking click-triggered tooltips\n    if (\n      event.type === 'click' &&\n      (instance.props.trigger.indexOf('mouseenter') < 0 ||\n        isVisibleFromClick) &&\n      instance.props.hideOnClick !== false &&\n      instance.state.isVisible\n    ) {\n      shouldScheduleClickHide = true;\n    } else {\n      scheduleShow(event);\n    }\n\n    if (event.type === 'click') {\n      isVisibleFromClick = !shouldScheduleClickHide;\n    }\n\n    if (shouldScheduleClickHide && !wasFocused) {\n      scheduleHide(event);\n    }\n  }\n\n  function onMouseMove(event: MouseEvent): void {\n    const target = event.target as Node;\n    const isCursorOverReferenceOrPopper =\n      getCurrentTarget().contains(target) || popper.contains(target);\n\n    if (event.type === 'mousemove' && isCursorOverReferenceOrPopper) {\n      return;\n    }\n\n    const popperTreeData = getNestedPopperTree()\n      .concat(popper)\n      .map((popper) => {\n        const instance = popper._tippy!;\n        const state = instance.popperInstance?.state;\n\n        if (state) {\n          return {\n            popperRect: popper.getBoundingClientRect(),\n            popperState: state,\n            props,\n          };\n        }\n\n        return null;\n      })\n      .filter(Boolean) as PopperTreeData[];\n\n    if (isCursorOutsideInteractiveBorder(popperTreeData, event)) {\n      cleanupInteractiveMouseListeners();\n      scheduleHide(event);\n    }\n  }\n\n  function onMouseLeave(event: MouseEvent): void {\n    const shouldBail =\n      isEventListenerStopped(event) ||\n      (instance.props.trigger.indexOf('click') >= 0 && isVisibleFromClick);\n\n    if (shouldBail) {\n      return;\n    }\n\n    if (instance.props.interactive) {\n      instance.hideWithInteractivity(event);\n      return;\n    }\n\n    scheduleHide(event);\n  }\n\n  function onBlurOrFocusOut(event: FocusEvent): void {\n    if (\n      instance.props.trigger.indexOf('focusin') < 0 &&\n      event.target !== getCurrentTarget()\n    ) {\n      return;\n    }\n\n    // If focus was moved to within the popper\n    if (\n      instance.props.interactive &&\n      event.relatedTarget &&\n      popper.contains(event.relatedTarget as Element)\n    ) {\n      return;\n    }\n\n    scheduleHide(event);\n  }\n\n  function isEventListenerStopped(event: Event): boolean {\n    return currentInput.isTouch\n      ? getIsCustomTouchBehavior() !== event.type.indexOf('touch') >= 0\n      : false;\n  }\n\n  function createPopperInstance(): void {\n    destroyPopperInstance();\n\n    const {\n      popperOptions,\n      placement,\n      offset,\n      getReferenceClientRect,\n      moveTransition,\n    } = instance.props;\n\n    const arrow = getIsDefaultRenderFn() ? getChildren(popper).arrow : null;\n\n    const computedReference = getReferenceClientRect\n      ? {\n          getBoundingClientRect: getReferenceClientRect,\n          contextElement:\n            getReferenceClientRect.contextElement || getCurrentTarget(),\n        }\n      : reference;\n\n    const tippyModifier: Modifier<'$$tippy', {}> = {\n      name: '$$tippy',\n      enabled: true,\n      phase: 'beforeWrite',\n      requires: ['computeStyles'],\n      fn({state}) {\n        if (getIsDefaultRenderFn()) {\n          const {box} = getDefaultTemplateChildren();\n\n          ['placement', 'reference-hidden', 'escaped'].forEach((attr) => {\n            if (attr === 'placement') {\n              box.setAttribute('data-placement', state.placement);\n            } else {\n              if (state.attributes.popper[`data-popper-${attr}`]) {\n                box.setAttribute(`data-${attr}`, '');\n              } else {\n                box.removeAttribute(`data-${attr}`);\n              }\n            }\n          });\n\n          state.attributes.popper = {};\n        }\n      },\n    };\n\n    type TippyModifier = Modifier<'$$tippy', {}>;\n    type ExtendedModifiers = StrictModifiers | Partial<TippyModifier>;\n\n    const modifiers: Array<ExtendedModifiers> = [\n      {\n        name: 'offset',\n        options: {\n          offset,\n        },\n      },\n      {\n        name: 'preventOverflow',\n        options: {\n          padding: {\n            top: 2,\n            bottom: 2,\n            left: 5,\n            right: 5,\n          },\n        },\n      },\n      {\n        name: 'flip',\n        options: {\n          padding: 5,\n        },\n      },\n      {\n        name: 'computeStyles',\n        options: {\n          adaptive: !moveTransition,\n        },\n      },\n      tippyModifier,\n    ];\n\n    if (getIsDefaultRenderFn() && arrow) {\n      modifiers.push({\n        name: 'arrow',\n        options: {\n          element: arrow,\n          padding: 3,\n        },\n      });\n    }\n\n    modifiers.push(...(popperOptions?.modifiers || []));\n\n    instance.popperInstance = createPopper<ExtendedModifiers>(\n      computedReference,\n      popper,\n      {\n        ...popperOptions,\n        placement,\n        onFirstUpdate,\n        modifiers,\n      }\n    );\n  }\n\n  function destroyPopperInstance(): void {\n    if (instance.popperInstance) {\n      instance.popperInstance.destroy();\n      instance.popperInstance = null;\n    }\n  }\n\n  function mount(): void {\n    const {appendTo} = instance.props;\n\n    let parentNode: any;\n\n    // By default, we'll append the popper to the triggerTargets's parentNode so\n    // it's directly after the reference element so the elements inside the\n    // tippy can be tabbed to\n    // If there are clipping issues, the user can specify a different appendTo\n    // and ensure focus management is handled correctly manually\n    const node = getCurrentTarget();\n\n    if (\n      (instance.props.interactive && appendTo === defaultProps.appendTo) ||\n      appendTo === 'parent'\n    ) {\n      parentNode = node.parentNode;\n    } else {\n      parentNode = invokeWithArgsOrReturn(appendTo, [node]);\n    }\n\n    // The popper element needs to exist on the DOM before its position can be\n    // updated as Popper needs to read its dimensions\n    if (!parentNode.contains(popper)) {\n      parentNode.appendChild(popper);\n    }\n\n    createPopperInstance();\n\n    /* istanbul ignore else */\n    if (__DEV__) {\n      // Accessibility check\n      warnWhen(\n        instance.props.interactive &&\n          appendTo === defaultProps.appendTo &&\n          node.nextElementSibling !== popper,\n        [\n          'Interactive tippy element may not be accessible via keyboard',\n          'navigation because it is not directly after the reference element',\n          'in the DOM source order.',\n          '\\n\\n',\n          'Using a wrapper <div> or <span> tag around the reference element',\n          'solves this by creating a new parentNode context.',\n          '\\n\\n',\n          'Specifying `appendTo: document.body` silences this warning, but it',\n          'assumes you are using a focus management solution to handle',\n          'keyboard navigation.',\n          '\\n\\n',\n          'See: https://atomiks.github.io/tippyjs/v6/accessibility/#interactivity',\n        ].join(' ')\n      );\n    }\n  }\n\n  function getNestedPopperTree(): PopperElement[] {\n    return arrayFrom(\n      popper.querySelectorAll('[data-__NAMESPACE_PREFIX__-root]')\n    );\n  }\n\n  function scheduleShow(event?: Event): void {\n    instance.clearDelayTimeouts();\n\n    if (event) {\n      invokeHook('onTrigger', [instance, event]);\n    }\n\n    addDocumentPress();\n\n    let delay = getDelay(true);\n    const [touchValue, touchDelay] = getNormalizedTouchSettings();\n\n    if (currentInput.isTouch && touchValue === 'hold' && touchDelay) {\n      delay = touchDelay;\n    }\n\n    if (delay) {\n      showTimeout = setTimeout(() => {\n        instance.show();\n      }, delay);\n    } else {\n      instance.show();\n    }\n  }\n\n  function scheduleHide(event: Event): void {\n    instance.clearDelayTimeouts();\n\n    invokeHook('onUntrigger', [instance, event]);\n\n    if (!instance.state.isVisible) {\n      removeDocumentPress();\n\n      return;\n    }\n\n    // For interactive tippies, scheduleHide is added to a document.body handler\n    // from onMouseLeave so must intercept scheduled hides from mousemove/leave\n    // events when trigger contains mouseenter and click, and the tip is\n    // currently shown as a result of a click.\n    if (\n      instance.props.trigger.indexOf('mouseenter') >= 0 &&\n      instance.props.trigger.indexOf('click') >= 0 &&\n      ['mouseleave', 'mousemove'].indexOf(event.type) >= 0 &&\n      isVisibleFromClick\n    ) {\n      return;\n    }\n\n    const delay = getDelay(false);\n\n    if (delay) {\n      hideTimeout = setTimeout(() => {\n        if (instance.state.isVisible) {\n          instance.hide();\n        }\n      }, delay);\n    } else {\n      // Fixes a `transitionend` problem when it fires 1 frame too\n      // late sometimes, we don't want hide() to be called.\n      scheduleHideAnimationFrame = requestAnimationFrame(() => {\n        instance.hide();\n      });\n    }\n  }\n\n  // ===========================================================================\n  // 🔑 Public methods\n  // ===========================================================================\n  function enable(): void {\n    instance.state.isEnabled = true;\n  }\n\n  function disable(): void {\n    // Disabling the instance should also hide it\n    // https://github.com/atomiks/tippy.js-react/issues/106\n    instance.hide();\n    instance.state.isEnabled = false;\n  }\n\n  function clearDelayTimeouts(): void {\n    clearTimeout(showTimeout);\n    clearTimeout(hideTimeout);\n    cancelAnimationFrame(scheduleHideAnimationFrame);\n  }\n\n  function setProps(partialProps: Partial<Props>): void {\n    /* istanbul ignore else */\n    if (__DEV__) {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('setProps'));\n    }\n\n    if (instance.state.isDestroyed) {\n      return;\n    }\n\n    invokeHook('onBeforeUpdate', [instance, partialProps]);\n\n    removeListeners();\n\n    const prevProps = instance.props;\n    const nextProps = evaluateProps(reference, {\n      ...instance.props,\n      ...partialProps,\n      ignoreAttributes: true,\n    });\n\n    instance.props = nextProps;\n\n    addListeners();\n\n    if (prevProps.interactiveDebounce !== nextProps.interactiveDebounce) {\n      cleanupInteractiveMouseListeners();\n      debouncedOnMouseMove = debounce(\n        onMouseMove,\n        nextProps.interactiveDebounce\n      );\n    }\n\n    // Ensure stale aria-expanded attributes are removed\n    if (prevProps.triggerTarget && !nextProps.triggerTarget) {\n      normalizeToArray(prevProps.triggerTarget).forEach((node) => {\n        node.removeAttribute('aria-expanded');\n      });\n    } else if (nextProps.triggerTarget) {\n      reference.removeAttribute('aria-expanded');\n    }\n\n    handleAriaExpandedAttribute();\n    handleStyles();\n\n    if (onUpdate) {\n      onUpdate(prevProps, nextProps);\n    }\n\n    if (instance.popperInstance) {\n      createPopperInstance();\n\n      // Fixes an issue with nested tippies if they are all getting re-rendered,\n      // and the nested ones get re-rendered first.\n      // https://github.com/atomiks/tippyjs-react/issues/177\n      // TODO: find a cleaner / more efficient solution(!)\n      getNestedPopperTree().forEach((nestedPopper) => {\n        // React (and other UI libs likely) requires a rAF wrapper as it flushes\n        // its work in one\n        requestAnimationFrame(nestedPopper._tippy!.popperInstance!.forceUpdate);\n      });\n    }\n\n    invokeHook('onAfterUpdate', [instance, partialProps]);\n  }\n\n  function setContent(content: Content): void {\n    instance.setProps({content});\n  }\n\n  function show(): void {\n    /* istanbul ignore else */\n    if (__DEV__) {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('show'));\n    }\n\n    // Early bail-out\n    const isAlreadyVisible = instance.state.isVisible;\n    const isDestroyed = instance.state.isDestroyed;\n    const isDisabled = !instance.state.isEnabled;\n    const isTouchAndTouchDisabled =\n      currentInput.isTouch && !instance.props.touch;\n    const duration = getValueAtIndexOrReturn(\n      instance.props.duration,\n      0,\n      defaultProps.duration\n    );\n\n    if (\n      isAlreadyVisible ||\n      isDestroyed ||\n      isDisabled ||\n      isTouchAndTouchDisabled\n    ) {\n      return;\n    }\n\n    // Normalize `disabled` behavior across browsers.\n    // Firefox allows events on disabled elements, but Chrome doesn't.\n    // Using a wrapper element (i.e. <span>) is recommended.\n    if (getCurrentTarget().hasAttribute('disabled')) {\n      return;\n    }\n\n    invokeHook('onShow', [instance], false);\n    if (instance.props.onShow(instance) === false) {\n      return;\n    }\n\n    instance.state.isVisible = true;\n\n    if (getIsDefaultRenderFn()) {\n      popper.style.visibility = 'visible';\n    }\n\n    handleStyles();\n    addDocumentPress();\n\n    if (!instance.state.isMounted) {\n      popper.style.transition = 'none';\n    }\n\n    // If flipping to the opposite side after hiding at least once, the\n    // animation will use the wrong placement without resetting the duration\n    if (getIsDefaultRenderFn()) {\n      const {box, content} = getDefaultTemplateChildren();\n      setTransitionDuration([box, content], 0);\n    }\n\n    onFirstUpdate = (): void => {\n      if (!instance.state.isVisible || ignoreOnFirstUpdate) {\n        return;\n      }\n\n      ignoreOnFirstUpdate = true;\n\n      // reflow\n      void popper.offsetHeight;\n\n      popper.style.transition = instance.props.moveTransition;\n\n      if (getIsDefaultRenderFn() && instance.props.animation) {\n        const {box, content} = getDefaultTemplateChildren();\n        setTransitionDuration([box, content], duration);\n        setVisibilityState([box, content], 'visible');\n      }\n\n      handleAriaContentAttribute();\n      handleAriaExpandedAttribute();\n\n      pushIfUnique(mountedInstances, instance);\n\n      // certain modifiers (e.g. `maxSize`) require a second update after the\n      // popper has been positioned for the first time\n      instance.popperInstance?.forceUpdate();\n\n      instance.state.isMounted = true;\n      invokeHook('onMount', [instance]);\n\n      if (instance.props.animation && getIsDefaultRenderFn()) {\n        onTransitionedIn(duration, () => {\n          instance.state.isShown = true;\n          invokeHook('onShown', [instance]);\n        });\n      }\n    };\n\n    mount();\n  }\n\n  function hide(): void {\n    /* istanbul ignore else */\n    if (__DEV__) {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('hide'));\n    }\n\n    // Early bail-out\n    const isAlreadyHidden = !instance.state.isVisible;\n    const isDestroyed = instance.state.isDestroyed;\n    const isDisabled = !instance.state.isEnabled;\n    const duration = getValueAtIndexOrReturn(\n      instance.props.duration,\n      1,\n      defaultProps.duration\n    );\n\n    if (isAlreadyHidden || isDestroyed || isDisabled) {\n      return;\n    }\n\n    invokeHook('onHide', [instance], false);\n    if (instance.props.onHide(instance) === false) {\n      return;\n    }\n\n    instance.state.isVisible = false;\n    instance.state.isShown = false;\n    ignoreOnFirstUpdate = false;\n    isVisibleFromClick = false;\n\n    if (getIsDefaultRenderFn()) {\n      popper.style.visibility = 'hidden';\n    }\n\n    cleanupInteractiveMouseListeners();\n    removeDocumentPress();\n    handleStyles();\n\n    if (getIsDefaultRenderFn()) {\n      const {box, content} = getDefaultTemplateChildren();\n\n      if (instance.props.animation) {\n        setTransitionDuration([box, content], duration);\n        setVisibilityState([box, content], 'hidden');\n      }\n    }\n\n    handleAriaContentAttribute();\n    handleAriaExpandedAttribute();\n\n    if (instance.props.animation) {\n      if (getIsDefaultRenderFn()) {\n        onTransitionedOut(duration, instance.unmount);\n      }\n    } else {\n      instance.unmount();\n    }\n  }\n\n  function hideWithInteractivity(event: MouseEvent): void {\n    /* istanbul ignore else */\n    if (__DEV__) {\n      warnWhen(\n        instance.state.isDestroyed,\n        createMemoryLeakWarning('hideWithInteractivity')\n      );\n    }\n\n    getDocument().addEventListener('mousemove', debouncedOnMouseMove);\n    pushIfUnique(mouseMoveListeners, debouncedOnMouseMove);\n    debouncedOnMouseMove(event);\n  }\n\n  function unmount(): void {\n    /* istanbul ignore else */\n    if (__DEV__) {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('unmount'));\n    }\n\n    if (instance.state.isVisible) {\n      instance.hide();\n    }\n\n    if (!instance.state.isMounted) {\n      return;\n    }\n\n    destroyPopperInstance();\n\n    // If a popper is not interactive, it will be appended outside the popper\n    // tree by default. This seems mainly for interactive tippies, but we should\n    // find a workaround if possible\n    getNestedPopperTree().forEach((nestedPopper) => {\n      nestedPopper._tippy!.unmount();\n    });\n\n    if (popper.parentNode) {\n      popper.parentNode.removeChild(popper);\n    }\n\n    mountedInstances = mountedInstances.filter((i) => i !== instance);\n\n    instance.state.isMounted = false;\n    invokeHook('onHidden', [instance]);\n  }\n\n  function destroy(): void {\n    /* istanbul ignore else */\n    if (__DEV__) {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('destroy'));\n    }\n\n    if (instance.state.isDestroyed) {\n      return;\n    }\n\n    instance.clearDelayTimeouts();\n    instance.unmount();\n\n    removeListeners();\n\n    delete reference._tippy;\n\n    instance.state.isDestroyed = true;\n\n    invokeHook('onDestroy', [instance]);\n  }\n}\n", "import bindGlobalEventListeners, {\n  currentInput,\n} from './bindGlobalEventListeners';\nimport createTippy, {mountedInstances} from './createTippy';\nimport {getArrayOfElements, isElement, isReferenceElement} from './dom-utils';\nimport {defaultProps, setDefaultProps, validateProps} from './props';\nimport {HideAll, HideAllOptions, Instance, Props, Targets} from './types';\nimport {validateTargets, warnWhen} from './validation';\n\nfunction tippy(\n  targets: Targets,\n  optionalProps: Partial<Props> = {}\n): Instance | Instance[] {\n  const plugins = defaultProps.plugins.concat(optionalProps.plugins || []);\n\n  /* istanbul ignore else */\n  if (__DEV__) {\n    validateTargets(targets);\n    validateProps(optionalProps, plugins);\n  }\n\n  bindGlobalEventListeners();\n\n  const passedProps: Partial<Props> = {...optionalProps, plugins};\n\n  const elements = getArrayOfElements(targets);\n\n  /* istanbul ignore else */\n  if (__DEV__) {\n    const isSingleContentElement = isElement(passedProps.content);\n    const isMoreThanOneReferenceElement = elements.length > 1;\n    warnWhen(\n      isSingleContentElement && isMoreThanOneReferenceElement,\n      [\n        'tippy() was passed an Element as the `content` prop, but more than',\n        'one tippy instance was created by this invocation. This means the',\n        'content element will only be appended to the last tippy instance.',\n        '\\n\\n',\n        'Instead, pass the .innerHTML of the element, or use a function that',\n        'returns a cloned version of the element instead.',\n        '\\n\\n',\n        '1) content: element.innerHTML\\n',\n        '2) content: () => element.cloneNode(true)',\n      ].join(' ')\n    );\n  }\n\n  const instances = elements.reduce<Instance[]>(\n    (acc, reference): Instance[] => {\n      const instance = reference && createTippy(reference, passedProps);\n\n      if (instance) {\n        acc.push(instance);\n      }\n\n      return acc;\n    },\n    []\n  );\n\n  return isElement(targets) ? instances[0] : instances;\n}\n\ntippy.defaultProps = defaultProps;\ntippy.setDefaultProps = setDefaultProps;\ntippy.currentInput = currentInput;\n\nexport default tippy;\n\nexport const hideAll: HideAll = ({\n  exclude: excludedReferenceOrInstance,\n  duration,\n}: HideAllOptions = {}) => {\n  mountedInstances.forEach((instance) => {\n    let isExcluded = false;\n\n    if (excludedReferenceOrInstance) {\n      isExcluded = isReferenceElement(excludedReferenceOrInstance)\n        ? instance.reference === excludedReferenceOrInstance\n        : instance.popper === (excludedReferenceOrInstance as Instance).popper;\n    }\n\n    if (!isExcluded) {\n      const originalDuration = instance.props.duration;\n\n      instance.setProps({duration});\n      instance.hide();\n\n      if (!instance.state.isDestroyed) {\n        instance.setProps({duration: originalDuration});\n      }\n    }\n  });\n};\n", "import tippy from '..';\nimport {div} from '../dom-utils';\nimport {\n  CreateSingleton,\n  Plugin,\n  CreateSingletonProps,\n  ReferenceElement,\n  CreateSingletonInstance,\n  Instance,\n  Props,\n} from '../types';\nimport {removeProperties} from '../utils';\nimport {errorWhen} from '../validation';\nimport {applyStyles, Modifier} from '@popperjs/core';\n\n// The default `applyStyles` modifier has a cleanup function that gets called\n// every time the popper is destroyed (i.e. a new target), removing the styles\n// and causing transitions to break for singletons when the console is open, but\n// most notably for non-transform styles being used, `gpuAcceleration: false`.\nconst applyStylesModifier: Modifier<'applyStyles', {}> = {\n  ...applyStyles,\n  effect({state}) {\n    const 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\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    // intentionally return no cleanup function\n    // return () => { ... }\n  },\n};\n\nconst createSingleton: CreateSingleton = (\n  tippyInstances,\n  optionalProps = {}\n) => {\n  /* istanbul ignore else */\n  if (__DEV__) {\n    errorWhen(\n      !Array.isArray(tippyInstances),\n      [\n        'The first argument passed to createSingleton() must be an array of',\n        'tippy instances. The passed value was',\n        String(tippyInstances),\n      ].join(' ')\n    );\n  }\n\n  let individualInstances = tippyInstances;\n  let references: Array<ReferenceElement> = [];\n  let currentTarget: Element | null;\n  let overrides = optionalProps.overrides;\n  let interceptSetPropsCleanups: Array<() => void> = [];\n  let shownOnCreate = false;\n\n  function setReferences(): void {\n    references = individualInstances.map((instance) => instance.reference);\n  }\n\n  function enableInstances(isEnabled: boolean): void {\n    individualInstances.forEach((instance) => {\n      if (isEnabled) {\n        instance.enable();\n      } else {\n        instance.disable();\n      }\n    });\n  }\n\n  function interceptSetProps(singleton: Instance): Array<() => void> {\n    return individualInstances.map((instance) => {\n      const originalSetProps = instance.setProps;\n\n      instance.setProps = (props): void => {\n        originalSetProps(props);\n\n        if (instance.reference === currentTarget) {\n          singleton.setProps(props);\n        }\n      };\n\n      return (): void => {\n        instance.setProps = originalSetProps;\n      };\n    });\n  }\n\n  // have to pass singleton, as it maybe undefined on first call\n  function prepareInstance(\n    singleton: Instance,\n    target: ReferenceElement\n  ): void {\n    const index = references.indexOf(target);\n\n    // bail-out\n    if (target === currentTarget) {\n      return;\n    }\n\n    currentTarget = target;\n\n    const overrideProps: Partial<Props> = (overrides || [])\n      .concat('content')\n      .reduce((acc, prop) => {\n        (acc as any)[prop] = individualInstances[index].props[prop];\n        return acc;\n      }, {});\n\n    singleton.setProps({\n      ...overrideProps,\n      getReferenceClientRect:\n        typeof overrideProps.getReferenceClientRect === 'function'\n          ? overrideProps.getReferenceClientRect\n          : (): ClientRect => target.getBoundingClientRect(),\n    });\n  }\n\n  enableInstances(false);\n  setReferences();\n\n  const plugin: Plugin = {\n    fn() {\n      return {\n        onDestroy(): void {\n          enableInstances(true);\n        },\n        onHidden(): void {\n          currentTarget = null;\n        },\n        onClickOutside(instance): void {\n          if (instance.props.showOnCreate && !shownOnCreate) {\n            shownOnCreate = true;\n            currentTarget = null;\n          }\n        },\n        onShow(instance): void {\n          if (instance.props.showOnCreate && !shownOnCreate) {\n            shownOnCreate = true;\n            prepareInstance(instance, references[0]);\n          }\n        },\n        onTrigger(instance, event): void {\n          prepareInstance(instance, event.currentTarget as Element);\n        },\n      };\n    },\n  };\n\n  const singleton = tippy(div(), {\n    ...removeProperties(optionalProps, ['overrides']),\n    plugins: [plugin, ...(optionalProps.plugins || [])],\n    triggerTarget: references,\n    popperOptions: {\n      ...optionalProps.popperOptions,\n      modifiers: [\n        ...(optionalProps.popperOptions?.modifiers || []),\n        applyStylesModifier,\n      ],\n    },\n  }) as CreateSingletonInstance<CreateSingletonProps>;\n\n  const originalShow = singleton.show;\n\n  singleton.show = (target?: ReferenceElement | Instance | number): void => {\n    originalShow();\n\n    // first time, showOnCreate or programmatic call with no params\n    // default to showing first instance\n    if (!currentTarget && target == null) {\n      return prepareInstance(singleton, references[0]);\n    }\n\n    // triggered from event (do nothing as prepareInstance already called by onTrigger)\n    // programmatic call with no params when already visible (do nothing again)\n    if (currentTarget && target == null) {\n      return;\n    }\n\n    // target is index of instance\n    if (typeof target === 'number') {\n      return (\n        references[target] && prepareInstance(singleton, references[target])\n      );\n    }\n\n    // target is a child tippy instance\n    if (individualInstances.includes(target as Instance)) {\n      const ref = (target as Instance).reference;\n      return prepareInstance(singleton, ref);\n    }\n\n    // target is a ReferenceElement\n    if (references.includes(target as ReferenceElement)) {\n      return prepareInstance(singleton, target as ReferenceElement);\n    }\n  };\n\n  singleton.showNext = (): void => {\n    const first = references[0];\n    if (!currentTarget) {\n      return singleton.show(0);\n    }\n    const index = references.indexOf(currentTarget);\n    singleton.show(references[index + 1] || first);\n  };\n\n  singleton.showPrevious = (): void => {\n    const last = references[references.length - 1];\n    if (!currentTarget) {\n      return singleton.show(last);\n    }\n    const index = references.indexOf(currentTarget);\n    const target = references[index - 1] || last;\n    singleton.show(target);\n  };\n\n  const originalSetProps = singleton.setProps;\n\n  singleton.setProps = (props): void => {\n    overrides = props.overrides || overrides;\n    originalSetProps(props);\n  };\n\n  singleton.setInstances = (nextInstances): void => {\n    enableInstances(true);\n    interceptSetPropsCleanups.forEach((fn) => fn());\n\n    individualInstances = nextInstances;\n\n    enableInstances(false);\n    setReferences();\n    interceptSetProps(singleton);\n\n    singleton.setProps({triggerTarget: references});\n  };\n\n  interceptSetPropsCleanups = interceptSetProps(singleton);\n\n  return singleton;\n};\n\nexport default createSingleton;\n", "import tippy from '..';\nimport {TOUCH_OPTIONS} from '../constants';\nimport {defaultProps} from '../props';\nimport {Instance, Props, Targets} from '../types';\nimport {ListenerObject} from '../types-internal';\nimport {normalizeToArray, removeProperties} from '../utils';\nimport {errorWhen} from '../validation';\n\nconst BUBBLING_EVENTS_MAP = {\n  mouseover: 'mouseenter',\n  focusin: 'focus',\n  click: 'click',\n};\n\n/**\n * Creates a delegate instance that controls the creation of tippy instances\n * for child elements (`target` CSS selector).\n */\nfunction delegate(\n  targets: Targets,\n  props: Partial<Props> & {target: string}\n): Instance | Instance[] {\n  /* istanbul ignore else */\n  if (__DEV__) {\n    errorWhen(\n      !(props && props.target),\n      [\n        'You must specity a `target` prop indicating a CSS selector string matching',\n        'the target elements that should receive a tippy.',\n      ].join(' ')\n    );\n  }\n\n  let listeners: ListenerObject[] = [];\n  let childTippyInstances: Instance[] = [];\n  let disabled = false;\n\n  const {target} = props;\n\n  const nativeProps = removeProperties(props, ['target']);\n  const parentProps = {...nativeProps, trigger: 'manual', touch: false};\n  const childProps = {...nativeProps, showOnCreate: true};\n\n  const returnValue = tippy(targets, parentProps);\n  const normalizedReturnValue = normalizeToArray(returnValue);\n\n  function onTrigger(event: Event): void {\n    if (!event.target || disabled) {\n      return;\n    }\n\n    const targetNode = (event.target as Element).closest(target);\n\n    if (!targetNode) {\n      return;\n    }\n\n    // Get relevant trigger with fallbacks:\n    // 1. Check `data-tippy-trigger` attribute on target node\n    // 2. Fallback to `trigger` passed to `delegate()`\n    // 3. Fallback to `defaultProps.trigger`\n    const trigger =\n      targetNode.getAttribute('data-tippy-trigger') ||\n      props.trigger ||\n      defaultProps.trigger;\n\n    // @ts-ignore\n    if (targetNode._tippy) {\n      return;\n    }\n\n    if (event.type === 'touchstart' && typeof childProps.touch === 'boolean') {\n      return;\n    }\n\n    if (\n      event.type !== 'touchstart' &&\n      trigger.indexOf((BUBBLING_EVENTS_MAP as any)[event.type]) < 0\n    ) {\n      return;\n    }\n\n    const instance = tippy(targetNode, childProps);\n\n    if (instance) {\n      childTippyInstances = childTippyInstances.concat(instance);\n    }\n  }\n\n  function on(\n    node: Element,\n    eventType: string,\n    handler: EventListener,\n    options: object | boolean = false\n  ): void {\n    node.addEventListener(eventType, handler, options);\n    listeners.push({node, eventType, handler, options});\n  }\n\n  function addEventListeners(instance: Instance): void {\n    const {reference} = instance;\n\n    on(reference, 'touchstart', onTrigger, TOUCH_OPTIONS);\n    on(reference, 'mouseover', onTrigger);\n    on(reference, 'focusin', onTrigger);\n    on(reference, 'click', onTrigger);\n  }\n\n  function removeEventListeners(): void {\n    listeners.forEach(({node, eventType, handler, options}: ListenerObject) => {\n      node.removeEventListener(eventType, handler, options);\n    });\n    listeners = [];\n  }\n\n  function applyMutations(instance: Instance): void {\n    const originalDestroy = instance.destroy;\n    const originalEnable = instance.enable;\n    const originalDisable = instance.disable;\n\n    instance.destroy = (shouldDestroyChildInstances = true): void => {\n      if (shouldDestroyChildInstances) {\n        childTippyInstances.forEach((instance) => {\n          instance.destroy();\n        });\n      }\n\n      childTippyInstances = [];\n\n      removeEventListeners();\n      originalDestroy();\n    };\n\n    instance.enable = (): void => {\n      originalEnable();\n      childTippyInstances.forEach((instance) => instance.enable());\n      disabled = false;\n    };\n\n    instance.disable = (): void => {\n      originalDisable();\n      childTippyInstances.forEach((instance) => instance.disable());\n      disabled = true;\n    };\n\n    addEventListeners(instance);\n  }\n\n  normalizedReturnValue.forEach(applyMutations);\n\n  return returnValue;\n}\n\nexport default delegate;\n", "import {BACKDROP_CLASS} from '../constants';\nimport {div, setVisibilityState} from '../dom-utils';\nimport {getChildren} from '../template';\nimport {AnimateFill} from '../types';\nimport {errorWhen} from '../validation';\n\nconst animateFill: AnimateFill = {\n  name: 'animateFill',\n  defaultValue: false,\n  fn(instance) {\n    // @ts-ignore\n    if (!instance.props.render?.$$tippy) {\n      if (__DEV__) {\n        errorWhen(\n          instance.props.animateFill,\n          'The `animateFill` plugin requires the default render function.'\n        );\n      }\n\n      return {};\n    }\n\n    const {box, content} = getChildren(instance.popper);\n\n    const backdrop = instance.props.animateFill\n      ? createBackdropElement()\n      : null;\n\n    return {\n      onCreate(): void {\n        if (backdrop) {\n          box.insertBefore(backdrop, box.firstElementChild!);\n          box.setAttribute('data-animatefill', '');\n          box.style.overflow = 'hidden';\n\n          instance.setProps({arrow: false, animation: 'shift-away'});\n        }\n      },\n      onMount(): void {\n        if (backdrop) {\n          const {transitionDuration} = box.style;\n          const duration = Number(transitionDuration.replace('ms', ''));\n\n          // The content should fade in after the backdrop has mostly filled the\n          // tooltip element. `clip-path` is the other alternative but is not\n          // well-supported and is buggy on some devices.\n          content.style.transitionDelay = `${Math.round(duration / 10)}ms`;\n\n          backdrop.style.transitionDuration = transitionDuration;\n          setVisibilityState([backdrop], 'visible');\n        }\n      },\n      onShow(): void {\n        if (backdrop) {\n          backdrop.style.transitionDuration = '0ms';\n        }\n      },\n      onHide(): void {\n        if (backdrop) {\n          setVisibilityState([backdrop], 'hidden');\n        }\n      },\n    };\n  },\n};\n\nexport default animateFill;\n\nfunction createBackdropElement(): HTMLDivElement {\n  const backdrop = div();\n  backdrop.className = BACKDROP_CLASS;\n  setVisibilityState([backdrop], 'hidden');\n  return backdrop;\n}\n", "import {getOwnerDocument, isMouseEvent} from '../dom-utils';\nimport {FollowCursor, Instance} from '../types';\n\nlet mouseCoords = {clientX: 0, clientY: 0};\nlet activeInstances: Array<{instance: Instance; doc: Document}> = [];\n\nfunction storeMouseCoords({clientX, clientY}: MouseEvent): void {\n  mouseCoords = {clientX, clientY};\n}\n\nfunction addMouseCoordsListener(doc: Document): void {\n  doc.addEventListener('mousemove', storeMouseCoords);\n}\n\nfunction removeMouseCoordsListener(doc: Document): void {\n  doc.removeEventListener('mousemove', storeMouseCoords);\n}\n\nconst followCursor: FollowCursor = {\n  name: 'followCursor',\n  defaultValue: false,\n  fn(instance) {\n    const reference = instance.reference;\n    const doc = getOwnerDocument(instance.props.triggerTarget || reference);\n\n    let isInternalUpdate = false;\n    let wasFocusEvent = false;\n    let isUnmounted = true;\n    let prevProps = instance.props;\n\n    function getIsInitialBehavior(): boolean {\n      return (\n        instance.props.followCursor === 'initial' && instance.state.isVisible\n      );\n    }\n\n    function addListener(): void {\n      doc.addEventListener('mousemove', onMouseMove);\n    }\n\n    function removeListener(): void {\n      doc.removeEventListener('mousemove', onMouseMove);\n    }\n\n    function unsetGetReferenceClientRect(): void {\n      isInternalUpdate = true;\n      instance.setProps({getReferenceClientRect: null});\n      isInternalUpdate = false;\n    }\n\n    function onMouseMove(event: MouseEvent): void {\n      // If the instance is interactive, avoid updating the position unless it's\n      // over the reference element\n      const isCursorOverReference = event.target\n        ? reference.contains(event.target as Node)\n        : true;\n      const {followCursor} = instance.props;\n      const {clientX, clientY} = event;\n\n      const rect = reference.getBoundingClientRect();\n      const relativeX = clientX - rect.left;\n      const relativeY = clientY - rect.top;\n\n      if (isCursorOverReference || !instance.props.interactive) {\n        instance.setProps({\n          getReferenceClientRect() {\n            const rect = reference.getBoundingClientRect();\n\n            let x = clientX;\n            let y = clientY;\n\n            if (followCursor === 'initial') {\n              x = rect.left + relativeX;\n              y = rect.top + relativeY;\n            }\n\n            const top = followCursor === 'horizontal' ? rect.top : y;\n            const right = followCursor === 'vertical' ? rect.right : x;\n            const bottom = followCursor === 'horizontal' ? rect.bottom : y;\n            const left = followCursor === 'vertical' ? rect.left : x;\n\n            return {\n              width: right - left,\n              height: bottom - top,\n              top,\n              right,\n              bottom,\n              left,\n            };\n          },\n        });\n      }\n    }\n\n    function create(): void {\n      if (instance.props.followCursor) {\n        activeInstances.push({instance, doc});\n        addMouseCoordsListener(doc);\n      }\n    }\n\n    function destroy(): void {\n      activeInstances = activeInstances.filter(\n        (data) => data.instance !== instance\n      );\n\n      if (activeInstances.filter((data) => data.doc === doc).length === 0) {\n        removeMouseCoordsListener(doc);\n      }\n    }\n\n    return {\n      onCreate: create,\n      onDestroy: destroy,\n      onBeforeUpdate(): void {\n        prevProps = instance.props;\n      },\n      onAfterUpdate(_, {followCursor}): void {\n        if (isInternalUpdate) {\n          return;\n        }\n\n        if (\n          followCursor !== undefined &&\n          prevProps.followCursor !== followCursor\n        ) {\n          destroy();\n\n          if (followCursor) {\n            create();\n\n            if (\n              instance.state.isMounted &&\n              !wasFocusEvent &&\n              !getIsInitialBehavior()\n            ) {\n              addListener();\n            }\n          } else {\n            removeListener();\n            unsetGetReferenceClientRect();\n          }\n        }\n      },\n      onMount(): void {\n        if (instance.props.followCursor && !wasFocusEvent) {\n          if (isUnmounted) {\n            onMouseMove(mouseCoords as MouseEvent);\n            isUnmounted = false;\n          }\n\n          if (!getIsInitialBehavior()) {\n            addListener();\n          }\n        }\n      },\n      onTrigger(_, event): void {\n        if (isMouseEvent(event)) {\n          mouseCoords = {clientX: event.clientX, clientY: event.clientY};\n        }\n        wasFocusEvent = event.type === 'focus';\n      },\n      onHidden(): void {\n        if (instance.props.followCursor) {\n          unsetGetReferenceClientRect();\n          removeListener();\n          isUnmounted = true;\n        }\n      },\n    };\n  },\n};\n\nexport default followCursor;\n", "import {Modifier, Placement} from '@popperjs/core';\nimport {isMouseEvent} from '../dom-utils';\nimport {BasePlacement, InlinePositioning, Props} from '../types';\nimport {arrayFrom, getBasePlacement} from '../utils';\n\nfunction getProps(props: Props, modifier: Modifier<any, any>): Partial<Props> {\n  return {\n    popperOptions: {\n      ...props.popperOptions,\n      modifiers: [\n        ...(props.popperOptions?.modifiers || []).filter(\n          ({name}) => name !== modifier.name\n        ),\n        modifier,\n      ],\n    },\n  };\n}\n\nconst inlinePositioning: InlinePositioning = {\n  name: 'inlinePositioning',\n  defaultValue: false,\n  fn(instance) {\n    const {reference} = instance;\n\n    function isEnabled(): boolean {\n      return !!instance.props.inlinePositioning;\n    }\n\n    let placement: Placement;\n    let cursorRectIndex = -1;\n    let isInternalUpdate = false;\n\n    const modifier: Modifier<'tippyInlinePositioning', {}> = {\n      name: 'tippyInlinePositioning',\n      enabled: true,\n      phase: 'afterWrite',\n      fn({state}) {\n        if (isEnabled()) {\n          if (placement !== state.placement) {\n            instance.setProps({\n              getReferenceClientRect: () =>\n                getReferenceClientRect(state.placement),\n            });\n          }\n\n          placement = state.placement;\n        }\n      },\n    };\n\n    function getReferenceClientRect(placement: Placement): ClientRect {\n      return getInlineBoundingClientRect(\n        getBasePlacement(placement),\n        reference.getBoundingClientRect(),\n        arrayFrom(reference.getClientRects()),\n        cursorRectIndex\n      );\n    }\n\n    function setInternalProps(partialProps: Partial<Props>): void {\n      isInternalUpdate = true;\n      instance.setProps(partialProps);\n      isInternalUpdate = false;\n    }\n\n    function addModifier(): void {\n      if (!isInternalUpdate) {\n        setInternalProps(getProps(instance.props, modifier));\n      }\n    }\n\n    return {\n      onCreate: addModifier,\n      onAfterUpdate: addModifier,\n      onTrigger(_, event): void {\n        if (isMouseEvent(event)) {\n          const rects = arrayFrom(instance.reference.getClientRects());\n          const cursorRect = rects.find(\n            (rect) =>\n              rect.left - 2 <= event.clientX &&\n              rect.right + 2 >= event.clientX &&\n              rect.top - 2 <= event.clientY &&\n              rect.bottom + 2 >= event.clientY\n          );\n\n          cursorRectIndex = rects.indexOf(cursorRect);\n        }\n      },\n      onUntrigger(): void {\n        cursorRectIndex = -1;\n      },\n    };\n  },\n};\n\nexport default inlinePositioning;\n\nexport function getInlineBoundingClientRect(\n  currentBasePlacement: BasePlacement | null,\n  boundingRect: ClientRect,\n  clientRects: ClientRect[],\n  cursorRectIndex: number\n): ClientRect {\n  // Not an inline element, or placement is not yet known\n  if (clientRects.length < 2 || currentBasePlacement === null) {\n    return boundingRect;\n  }\n\n  // There are two rects and they are disjoined\n  if (\n    clientRects.length === 2 &&\n    cursorRectIndex >= 0 &&\n    clientRects[0].left > clientRects[1].right\n  ) {\n    return clientRects[cursorRectIndex] || boundingRect;\n  }\n\n  switch (currentBasePlacement) {\n    case 'top':\n    case 'bottom': {\n      const firstRect = clientRects[0];\n      const lastRect = clientRects[clientRects.length - 1];\n      const isTop = currentBasePlacement === 'top';\n\n      const top = firstRect.top;\n      const bottom = lastRect.bottom;\n      const left = isTop ? firstRect.left : lastRect.left;\n      const right = isTop ? firstRect.right : lastRect.right;\n      const width = right - left;\n      const height = bottom - top;\n\n      return {top, bottom, left, right, width, height};\n    }\n    case 'left':\n    case 'right': {\n      const minLeft = Math.min(...clientRects.map((rects) => rects.left));\n      const maxRight = Math.max(...clientRects.map((rects) => rects.right));\n      const measureRects = clientRects.filter((rect) =>\n        currentBasePlacement === 'left'\n          ? rect.left === minLeft\n          : rect.right === maxRight\n      );\n\n      const top = measureRects[0].top;\n      const bottom = measureRects[measureRects.length - 1].bottom;\n      const left = minLeft;\n      const right = maxRight;\n      const width = right - left;\n      const height = bottom - top;\n\n      return {top, bottom, left, right, width, height};\n    }\n    default: {\n      return boundingRect;\n    }\n  }\n}\n", "import {VirtualElement} from '@popperjs/core';\nimport {ReferenceElement, Sticky} from '../types';\n\nconst sticky: Sticky = {\n  name: 'sticky',\n  defaultValue: false,\n  fn(instance) {\n    const {reference, popper} = instance;\n\n    function getReference(): ReferenceElement | VirtualElement {\n      return instance.popperInstance\n        ? instance.popperInstance.state.elements.reference\n        : reference;\n    }\n\n    function shouldCheck(value: 'reference' | 'popper'): boolean {\n      return instance.props.sticky === true || instance.props.sticky === value;\n    }\n\n    let prevRefRect: ClientRect | null = null;\n    let prevPopRect: ClientRect | null = null;\n\n    function updatePosition(): void {\n      const currentRefRect = shouldCheck('reference')\n        ? getReference().getBoundingClientRect()\n        : null;\n      const currentPopRect = shouldCheck('popper')\n        ? popper.getBoundingClientRect()\n        : null;\n\n      if (\n        (currentRefRect && areRectsDifferent(prevRefRect, currentRefRect)) ||\n        (currentPopRect && areRectsDifferent(prevPopRect, currentPopRect))\n      ) {\n        if (instance.popperInstance) {\n          instance.popperInstance.update();\n        }\n      }\n\n      prevRefRect = currentRefRect;\n      prevPopRect = currentPopRect;\n\n      if (instance.state.isMounted) {\n        requestAnimationFrame(updatePosition);\n      }\n    }\n\n    return {\n      onMount(): void {\n        if (instance.props.sticky) {\n          updatePosition();\n        }\n      },\n    };\n  },\n};\n\nexport default sticky;\n\nfunction areRectsDifferent(\n  rectA: ClientRect | null,\n  rectB: ClientRect | null\n): boolean {\n  if (rectA && rectB) {\n    return (\n      rectA.top !== rectB.top ||\n      rectA.right !== rectB.right ||\n      rectA.bottom !== rectB.bottom ||\n      rectA.left !== rectB.left\n    );\n  }\n\n  return true;\n}\n", "import tippy from '../src';\nimport {render} from '../src/template';\n\ntippy.setDefaultProps({render});\n\nexport {default, hideAll} from '../src';\nexport {default as createSingleton} from '../src/addons/createSingleton';\nexport {default as delegate} from '../src/addons/delegate';\nexport {default as animateFill} from '../src/plugins/animateFill';\nexport {default as followCursor} from '../src/plugins/followCursor';\nexport {default as inlinePositioning} from '../src/plugins/inlinePositioning';\nexport {default as sticky} from '../src/plugins/sticky';\nexport {ROUND_ARROW as roundArrow} from '../src/constants';\n", "import i18next from 'i18next'\nimport data from './locales/locales.json'\n\n// translation key required by i18next\nObject.keys(data).forEach((key) => (data[key] = { translation: data[key] }))\n\nconst availableLocales = ['en', 'es', 'ja']\n// IMPORTANT : these files requires to manually add new locales :\n// app/javascript/utils/uppy.js\n\n// https://www.i18next.com/overview/getting-started\ni18next.init({\n  lng: 'en',\n  fallbackLng: 'en',\n  whitelist: availableLocales,\n  preload: availableLocales,\n  resources: data,\n  interpolation: {\n    escapeValue: false, // React already escapes values\n    prefix: '%{',\n    suffix: '}'\n  }\n})\n\nexport { i18next as i18n, availableLocales }\n", "import _typeof from '@babel/runtime/helpers/esm/typeof';\nimport _objectSpread from '@babel/runtime/helpers/esm/objectSpread';\nimport _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _possibleConstructorReturn from '@babel/runtime/helpers/esm/possibleConstructorReturn';\nimport _getPrototypeOf from '@babel/runtime/helpers/esm/getPrototypeOf';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _inherits from '@babel/runtime/helpers/esm/inherits';\n\nvar consoleLogger = {\n  type: 'logger',\n  log: function log(args) {\n    this.output('log', args);\n  },\n  warn: function warn(args) {\n    this.output('warn', args);\n  },\n  error: function error(args) {\n    this.output('error', args);\n  },\n  output: function output(type, args) {\n    if (console && console[type]) console[type].apply(console, args);\n  }\n};\n\nvar Logger = function () {\n  function Logger(concreteLogger) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Logger);\n\n    this.init(concreteLogger, options);\n  }\n\n  _createClass(Logger, [{\n    key: \"init\",\n    value: function init(concreteLogger) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      this.prefix = options.prefix || 'i18next:';\n      this.logger = concreteLogger || consoleLogger;\n      this.options = options;\n      this.debug = options.debug;\n    }\n  }, {\n    key: \"setDebug\",\n    value: function setDebug(bool) {\n      this.debug = bool;\n    }\n  }, {\n    key: \"log\",\n    value: function log() {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      return this.forward(args, 'log', '', true);\n    }\n  }, {\n    key: \"warn\",\n    value: function warn() {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      return this.forward(args, 'warn', '', true);\n    }\n  }, {\n    key: \"error\",\n    value: function error() {\n      for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        args[_key3] = arguments[_key3];\n      }\n\n      return this.forward(args, 'error', '');\n    }\n  }, {\n    key: \"deprecate\",\n    value: function deprecate() {\n      for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n        args[_key4] = arguments[_key4];\n      }\n\n      return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n    }\n  }, {\n    key: \"forward\",\n    value: function forward(args, lvl, prefix, debugOnly) {\n      if (debugOnly && !this.debug) return null;\n      if (typeof args[0] === 'string') args[0] = \"\".concat(prefix).concat(this.prefix, \" \").concat(args[0]);\n      return this.logger[lvl](args);\n    }\n  }, {\n    key: \"create\",\n    value: function create(moduleName) {\n      return new Logger(this.logger, _objectSpread({}, {\n        prefix: \"\".concat(this.prefix, \":\").concat(moduleName, \":\")\n      }, this.options));\n    }\n  }]);\n\n  return Logger;\n}();\n\nvar baseLogger = new Logger();\n\nvar EventEmitter = function () {\n  function EventEmitter() {\n    _classCallCheck(this, EventEmitter);\n\n    this.observers = {};\n  }\n\n  _createClass(EventEmitter, [{\n    key: \"on\",\n    value: function on(events, listener) {\n      var _this = this;\n\n      events.split(' ').forEach(function (event) {\n        _this.observers[event] = _this.observers[event] || [];\n\n        _this.observers[event].push(listener);\n      });\n      return this;\n    }\n  }, {\n    key: \"off\",\n    value: function off(event, listener) {\n      if (!this.observers[event]) return;\n\n      if (!listener) {\n        delete this.observers[event];\n        return;\n      }\n\n      this.observers[event] = this.observers[event].filter(function (l) {\n        return l !== listener;\n      });\n    }\n  }, {\n    key: \"emit\",\n    value: function emit(event) {\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      if (this.observers[event]) {\n        var cloned = [].concat(this.observers[event]);\n        cloned.forEach(function (observer) {\n          observer.apply(void 0, args);\n        });\n      }\n\n      if (this.observers['*']) {\n        var _cloned = [].concat(this.observers['*']);\n\n        _cloned.forEach(function (observer) {\n          observer.apply(observer, [event].concat(args));\n        });\n      }\n    }\n  }]);\n\n  return EventEmitter;\n}();\n\nfunction defer() {\n  var res;\n  var rej;\n  var promise = new Promise(function (resolve, reject) {\n    res = resolve;\n    rej = reject;\n  });\n  promise.resolve = res;\n  promise.reject = rej;\n  return promise;\n}\nfunction makeString(object) {\n  if (object == null) return '';\n  return '' + object;\n}\nfunction copy(a, s, t) {\n  a.forEach(function (m) {\n    if (s[m]) t[m] = s[m];\n  });\n}\n\nfunction getLastOfPath(object, path, Empty) {\n  function cleanKey(key) {\n    return key && key.indexOf('###') > -1 ? key.replace(/###/g, '.') : key;\n  }\n\n  function canNotTraverseDeeper() {\n    return !object || typeof object === 'string';\n  }\n\n  var stack = typeof path !== 'string' ? [].concat(path) : path.split('.');\n\n  while (stack.length > 1) {\n    if (canNotTraverseDeeper()) return {};\n    var key = cleanKey(stack.shift());\n    if (!object[key] && Empty) object[key] = new Empty();\n\n    if (Object.prototype.hasOwnProperty.call(object, key)) {\n      object = object[key];\n    } else {\n      object = {};\n    }\n  }\n\n  if (canNotTraverseDeeper()) return {};\n  return {\n    obj: object,\n    k: cleanKey(stack.shift())\n  };\n}\n\nfunction setPath(object, path, newValue) {\n  var _getLastOfPath = getLastOfPath(object, path, Object),\n      obj = _getLastOfPath.obj,\n      k = _getLastOfPath.k;\n\n  obj[k] = newValue;\n}\nfunction pushPath(object, path, newValue, concat) {\n  var _getLastOfPath2 = getLastOfPath(object, path, Object),\n      obj = _getLastOfPath2.obj,\n      k = _getLastOfPath2.k;\n\n  obj[k] = obj[k] || [];\n  if (concat) obj[k] = obj[k].concat(newValue);\n  if (!concat) obj[k].push(newValue);\n}\nfunction getPath(object, path) {\n  var _getLastOfPath3 = getLastOfPath(object, path),\n      obj = _getLastOfPath3.obj,\n      k = _getLastOfPath3.k;\n\n  if (!obj) return undefined;\n  return obj[k];\n}\nfunction getPathWithDefaults(data, defaultData, key) {\n  var value = getPath(data, key);\n\n  if (value !== undefined) {\n    return value;\n  }\n\n  return getPath(defaultData, key);\n}\nfunction deepExtend(target, source, overwrite) {\n  for (var prop in source) {\n    if (prop !== '__proto__' && prop !== 'constructor') {\n      if (prop in target) {\n        if (typeof target[prop] === 'string' || target[prop] instanceof String || typeof source[prop] === 'string' || source[prop] instanceof String) {\n          if (overwrite) target[prop] = source[prop];\n        } else {\n          deepExtend(target[prop], source[prop], overwrite);\n        }\n      } else {\n        target[prop] = source[prop];\n      }\n    }\n  }\n\n  return target;\n}\nfunction regexEscape(str) {\n  return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n}\nvar _entityMap = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#39;',\n  '/': '&#x2F;'\n};\nfunction escape(data) {\n  if (typeof data === 'string') {\n    return data.replace(/[&<>\"'\\/]/g, function (s) {\n      return _entityMap[s];\n    });\n  }\n\n  return data;\n}\nvar isIE10 = typeof window !== 'undefined' && window.navigator && window.navigator.userAgent && window.navigator.userAgent.indexOf('MSIE') > -1;\n\nvar ResourceStore = function (_EventEmitter) {\n  _inherits(ResourceStore, _EventEmitter);\n\n  function ResourceStore(data) {\n    var _this;\n\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      ns: ['translation'],\n      defaultNS: 'translation'\n    };\n\n    _classCallCheck(this, ResourceStore);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(ResourceStore).call(this));\n\n    if (isIE10) {\n      EventEmitter.call(_assertThisInitialized(_this));\n    }\n\n    _this.data = data || {};\n    _this.options = options;\n\n    if (_this.options.keySeparator === undefined) {\n      _this.options.keySeparator = '.';\n    }\n\n    return _this;\n  }\n\n  _createClass(ResourceStore, [{\n    key: \"addNamespaces\",\n    value: function addNamespaces(ns) {\n      if (this.options.ns.indexOf(ns) < 0) {\n        this.options.ns.push(ns);\n      }\n    }\n  }, {\n    key: \"removeNamespaces\",\n    value: function removeNamespaces(ns) {\n      var index = this.options.ns.indexOf(ns);\n\n      if (index > -1) {\n        this.options.ns.splice(index, 1);\n      }\n    }\n  }, {\n    key: \"getResource\",\n    value: function getResource(lng, ns, key) {\n      var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n      var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n      var path = [lng, ns];\n      if (key && typeof key !== 'string') path = path.concat(key);\n      if (key && typeof key === 'string') path = path.concat(keySeparator ? key.split(keySeparator) : key);\n\n      if (lng.indexOf('.') > -1) {\n        path = lng.split('.');\n      }\n\n      return getPath(this.data, path);\n    }\n  }, {\n    key: \"addResource\",\n    value: function addResource(lng, ns, key, value) {\n      var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n        silent: false\n      };\n      var keySeparator = this.options.keySeparator;\n      if (keySeparator === undefined) keySeparator = '.';\n      var path = [lng, ns];\n      if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n\n      if (lng.indexOf('.') > -1) {\n        path = lng.split('.');\n        value = ns;\n        ns = path[1];\n      }\n\n      this.addNamespaces(ns);\n      setPath(this.data, path, value);\n      if (!options.silent) this.emit('added', lng, ns, key, value);\n    }\n  }, {\n    key: \"addResources\",\n    value: function addResources(lng, ns, resources) {\n      var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n        silent: false\n      };\n\n      for (var m in resources) {\n        if (typeof resources[m] === 'string' || Object.prototype.toString.apply(resources[m]) === '[object Array]') this.addResource(lng, ns, m, resources[m], {\n          silent: true\n        });\n      }\n\n      if (!options.silent) this.emit('added', lng, ns, resources);\n    }\n  }, {\n    key: \"addResourceBundle\",\n    value: function addResourceBundle(lng, ns, resources, deep, overwrite) {\n      var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {\n        silent: false\n      };\n      var path = [lng, ns];\n\n      if (lng.indexOf('.') > -1) {\n        path = lng.split('.');\n        deep = resources;\n        resources = ns;\n        ns = path[1];\n      }\n\n      this.addNamespaces(ns);\n      var pack = getPath(this.data, path) || {};\n\n      if (deep) {\n        deepExtend(pack, resources, overwrite);\n      } else {\n        pack = _objectSpread({}, pack, resources);\n      }\n\n      setPath(this.data, path, pack);\n      if (!options.silent) this.emit('added', lng, ns, resources);\n    }\n  }, {\n    key: \"removeResourceBundle\",\n    value: function removeResourceBundle(lng, ns) {\n      if (this.hasResourceBundle(lng, ns)) {\n        delete this.data[lng][ns];\n      }\n\n      this.removeNamespaces(ns);\n      this.emit('removed', lng, ns);\n    }\n  }, {\n    key: \"hasResourceBundle\",\n    value: function hasResourceBundle(lng, ns) {\n      return this.getResource(lng, ns) !== undefined;\n    }\n  }, {\n    key: \"getResourceBundle\",\n    value: function getResourceBundle(lng, ns) {\n      if (!ns) ns = this.options.defaultNS;\n      if (this.options.compatibilityAPI === 'v1') return _objectSpread({}, {}, this.getResource(lng, ns));\n      return this.getResource(lng, ns);\n    }\n  }, {\n    key: \"getDataByLanguage\",\n    value: function getDataByLanguage(lng) {\n      return this.data[lng];\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return this.data;\n    }\n  }]);\n\n  return ResourceStore;\n}(EventEmitter);\n\nvar postProcessor = {\n  processors: {},\n  addPostProcessor: function addPostProcessor(module) {\n    this.processors[module.name] = module;\n  },\n  handle: function handle(processors, value, key, options, translator) {\n    var _this = this;\n\n    processors.forEach(function (processor) {\n      if (_this.processors[processor]) value = _this.processors[processor].process(value, key, options, translator);\n    });\n    return value;\n  }\n};\n\nvar checkedLoadedFor = {};\n\nvar Translator = function (_EventEmitter) {\n  _inherits(Translator, _EventEmitter);\n\n  function Translator(services) {\n    var _this;\n\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Translator);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(Translator).call(this));\n\n    if (isIE10) {\n      EventEmitter.call(_assertThisInitialized(_this));\n    }\n\n    copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat', 'utils'], services, _assertThisInitialized(_this));\n    _this.options = options;\n\n    if (_this.options.keySeparator === undefined) {\n      _this.options.keySeparator = '.';\n    }\n\n    _this.logger = baseLogger.create('translator');\n    return _this;\n  }\n\n  _createClass(Translator, [{\n    key: \"changeLanguage\",\n    value: function changeLanguage(lng) {\n      if (lng) this.language = lng;\n    }\n  }, {\n    key: \"exists\",\n    value: function exists(key) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n        interpolation: {}\n      };\n      var resolved = this.resolve(key, options);\n      return resolved && resolved.res !== undefined;\n    }\n  }, {\n    key: \"extractFromKey\",\n    value: function extractFromKey(key, options) {\n      var nsSeparator = options.nsSeparator !== undefined ? options.nsSeparator : this.options.nsSeparator;\n      if (nsSeparator === undefined) nsSeparator = ':';\n      var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n      var namespaces = options.ns || this.options.defaultNS;\n\n      if (nsSeparator && key.indexOf(nsSeparator) > -1) {\n        var m = key.match(this.interpolator.nestingRegexp);\n\n        if (m && m.length > 0) {\n          return {\n            key: key,\n            namespaces: namespaces\n          };\n        }\n\n        var parts = key.split(nsSeparator);\n        if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n        key = parts.join(keySeparator);\n      }\n\n      if (typeof namespaces === 'string') namespaces = [namespaces];\n      return {\n        key: key,\n        namespaces: namespaces\n      };\n    }\n  }, {\n    key: \"translate\",\n    value: function translate(keys, options, lastKey) {\n      var _this2 = this;\n\n      if (_typeof(options) !== 'object' && this.options.overloadTranslationOptionHandler) {\n        options = this.options.overloadTranslationOptionHandler(arguments);\n      }\n\n      if (!options) options = {};\n      if (keys === undefined || keys === null) return '';\n      if (!Array.isArray(keys)) keys = [String(keys)];\n      var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n\n      var _this$extractFromKey = this.extractFromKey(keys[keys.length - 1], options),\n          key = _this$extractFromKey.key,\n          namespaces = _this$extractFromKey.namespaces;\n\n      var namespace = namespaces[namespaces.length - 1];\n      var lng = options.lng || this.language;\n      var appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n\n      if (lng && lng.toLowerCase() === 'cimode') {\n        if (appendNamespaceToCIMode) {\n          var nsSeparator = options.nsSeparator || this.options.nsSeparator;\n          return namespace + nsSeparator + key;\n        }\n\n        return key;\n      }\n\n      var resolved = this.resolve(keys, options);\n      var res = resolved && resolved.res;\n      var resUsedKey = resolved && resolved.usedKey || key;\n      var resExactUsedKey = resolved && resolved.exactUsedKey || key;\n      var resType = Object.prototype.toString.apply(res);\n      var noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n      var joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays;\n      var handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n      var handleAsObject = typeof res !== 'string' && typeof res !== 'boolean' && typeof res !== 'number';\n\n      if (handleAsObjectInI18nFormat && res && handleAsObject && noObject.indexOf(resType) < 0 && !(typeof joinArrays === 'string' && resType === '[object Array]')) {\n        if (!options.returnObjects && !this.options.returnObjects) {\n          this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n          return this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, res, options) : \"key '\".concat(key, \" (\").concat(this.language, \")' returned an object instead of string.\");\n        }\n\n        if (keySeparator) {\n          var resTypeIsArray = resType === '[object Array]';\n          var copy = resTypeIsArray ? [] : {};\n          var newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n\n          for (var m in res) {\n            if (Object.prototype.hasOwnProperty.call(res, m)) {\n              var deepKey = \"\".concat(newKeyToUse).concat(keySeparator).concat(m);\n              copy[m] = this.translate(deepKey, _objectSpread({}, options, {\n                joinArrays: false,\n                ns: namespaces\n              }));\n              if (copy[m] === deepKey) copy[m] = res[m];\n            }\n          }\n\n          res = copy;\n        }\n      } else if (handleAsObjectInI18nFormat && typeof joinArrays === 'string' && resType === '[object Array]') {\n        res = res.join(joinArrays);\n        if (res) res = this.extendTranslation(res, keys, options, lastKey);\n      } else {\n        var usedDefault = false;\n        var usedKey = false;\n        var needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n        var hasDefaultValue = Translator.hasDefaultValue(options);\n        var defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count) : '';\n        var defaultValue = options[\"defaultValue\".concat(defaultValueSuffix)] || options.defaultValue;\n\n        if (!this.isValidLookup(res) && hasDefaultValue) {\n          usedDefault = true;\n          res = defaultValue;\n        }\n\n        if (!this.isValidLookup(res)) {\n          usedKey = true;\n          res = key;\n        }\n\n        var updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing;\n\n        if (usedKey || usedDefault || updateMissing) {\n          this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? defaultValue : res);\n\n          if (keySeparator) {\n            var fk = this.resolve(key, _objectSpread({}, options, {\n              keySeparator: false\n            }));\n            if (fk && fk.res) this.logger.warn('Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.');\n          }\n\n          var lngs = [];\n          var fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language);\n\n          if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n            for (var i = 0; i < fallbackLngs.length; i++) {\n              lngs.push(fallbackLngs[i]);\n            }\n          } else if (this.options.saveMissingTo === 'all') {\n            lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language);\n          } else {\n            lngs.push(options.lng || this.language);\n          }\n\n          var send = function send(l, k, fallbackValue) {\n            if (_this2.options.missingKeyHandler) {\n              _this2.options.missingKeyHandler(l, namespace, k, updateMissing ? fallbackValue : res, updateMissing, options);\n            } else if (_this2.backendConnector && _this2.backendConnector.saveMissing) {\n              _this2.backendConnector.saveMissing(l, namespace, k, updateMissing ? fallbackValue : res, updateMissing, options);\n            }\n\n            _this2.emit('missingKey', l, namespace, k, res);\n          };\n\n          if (this.options.saveMissing) {\n            if (this.options.saveMissingPlurals && needsPluralHandling) {\n              lngs.forEach(function (language) {\n                _this2.pluralResolver.getSuffixes(language).forEach(function (suffix) {\n                  send([language], key + suffix, options[\"defaultValue\".concat(suffix)] || defaultValue);\n                });\n              });\n            } else {\n              send(lngs, key, defaultValue);\n            }\n          }\n        }\n\n        res = this.extendTranslation(res, keys, options, resolved, lastKey);\n        if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = \"\".concat(namespace, \":\").concat(key);\n        if (usedKey && this.options.parseMissingKeyHandler) res = this.options.parseMissingKeyHandler(res);\n      }\n\n      return res;\n    }\n  }, {\n    key: \"extendTranslation\",\n    value: function extendTranslation(res, key, options, resolved, lastKey) {\n      var _this3 = this;\n\n      if (this.i18nFormat && this.i18nFormat.parse) {\n        res = this.i18nFormat.parse(res, options, resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n          resolved: resolved\n        });\n      } else if (!options.skipInterpolation) {\n        if (options.interpolation) this.interpolator.init(_objectSpread({}, options, {\n          interpolation: _objectSpread({}, this.options.interpolation, options.interpolation)\n        }));\n        var skipOnVariables = options.interpolation && options.interpolation.skipOnVariables || this.options.interpolation.skipOnVariables;\n        var nestBef;\n\n        if (skipOnVariables) {\n          var nb = res.match(this.interpolator.nestingRegexp);\n          nestBef = nb && nb.length;\n        }\n\n        var data = options.replace && typeof options.replace !== 'string' ? options.replace : options;\n        if (this.options.interpolation.defaultVariables) data = _objectSpread({}, this.options.interpolation.defaultVariables, data);\n        res = this.interpolator.interpolate(res, data, options.lng || this.language, options);\n\n        if (skipOnVariables) {\n          var na = res.match(this.interpolator.nestingRegexp);\n          var nestAft = na && na.length;\n          if (nestBef < nestAft) options.nest = false;\n        }\n\n        if (options.nest !== false) res = this.interpolator.nest(res, function () {\n          for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n            args[_key] = arguments[_key];\n          }\n\n          if (lastKey && lastKey[0] === args[0] && !options.context) {\n            _this3.logger.warn(\"It seems you are nesting recursively key: \".concat(args[0], \" in key: \").concat(key[0]));\n\n            return null;\n          }\n\n          return _this3.translate.apply(_this3, args.concat([key]));\n        }, options);\n        if (options.interpolation) this.interpolator.reset();\n      }\n\n      var postProcess = options.postProcess || this.options.postProcess;\n      var postProcessorNames = typeof postProcess === 'string' ? [postProcess] : postProcess;\n\n      if (res !== undefined && res !== null && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) {\n        res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? _objectSpread({\n          i18nResolved: resolved\n        }, options) : options, this);\n      }\n\n      return res;\n    }\n  }, {\n    key: \"resolve\",\n    value: function resolve(keys) {\n      var _this4 = this;\n\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var found;\n      var usedKey;\n      var exactUsedKey;\n      var usedLng;\n      var usedNS;\n      if (typeof keys === 'string') keys = [keys];\n      keys.forEach(function (k) {\n        if (_this4.isValidLookup(found)) return;\n\n        var extracted = _this4.extractFromKey(k, options);\n\n        var key = extracted.key;\n        usedKey = key;\n        var namespaces = extracted.namespaces;\n        if (_this4.options.fallbackNS) namespaces = namespaces.concat(_this4.options.fallbackNS);\n        var needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n        var needsContextHandling = options.context !== undefined && typeof options.context === 'string' && options.context !== '';\n        var codes = options.lngs ? options.lngs : _this4.languageUtils.toResolveHierarchy(options.lng || _this4.language, options.fallbackLng);\n        namespaces.forEach(function (ns) {\n          if (_this4.isValidLookup(found)) return;\n          usedNS = ns;\n\n          if (!checkedLoadedFor[\"\".concat(codes[0], \"-\").concat(ns)] && _this4.utils && _this4.utils.hasLoadedNamespace && !_this4.utils.hasLoadedNamespace(usedNS)) {\n            checkedLoadedFor[\"\".concat(codes[0], \"-\").concat(ns)] = true;\n\n            _this4.logger.warn(\"key \\\"\".concat(usedKey, \"\\\" for languages \\\"\").concat(codes.join(', '), \"\\\" won't get resolved as namespace \\\"\").concat(usedNS, \"\\\" was not yet loaded\"), 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n          }\n\n          codes.forEach(function (code) {\n            if (_this4.isValidLookup(found)) return;\n            usedLng = code;\n            var finalKey = key;\n            var finalKeys = [finalKey];\n\n            if (_this4.i18nFormat && _this4.i18nFormat.addLookupKeys) {\n              _this4.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options);\n            } else {\n              var pluralSuffix;\n              if (needsPluralHandling) pluralSuffix = _this4.pluralResolver.getSuffix(code, options.count);\n              if (needsPluralHandling && needsContextHandling) finalKeys.push(finalKey + pluralSuffix);\n              if (needsContextHandling) finalKeys.push(finalKey += \"\".concat(_this4.options.contextSeparator).concat(options.context));\n              if (needsPluralHandling) finalKeys.push(finalKey += pluralSuffix);\n            }\n\n            var possibleKey;\n\n            while (possibleKey = finalKeys.pop()) {\n              if (!_this4.isValidLookup(found)) {\n                exactUsedKey = possibleKey;\n                found = _this4.getResource(code, ns, possibleKey, options);\n              }\n            }\n          });\n        });\n      });\n      return {\n        res: found,\n        usedKey: usedKey,\n        exactUsedKey: exactUsedKey,\n        usedLng: usedLng,\n        usedNS: usedNS\n      };\n    }\n  }, {\n    key: \"isValidLookup\",\n    value: function isValidLookup(res) {\n      return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n    }\n  }, {\n    key: \"getResource\",\n    value: function getResource(code, ns, key) {\n      var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n      if (this.i18nFormat && this.i18nFormat.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n      return this.resourceStore.getResource(code, ns, key, options);\n    }\n  }], [{\n    key: \"hasDefaultValue\",\n    value: function hasDefaultValue(options) {\n      var prefix = 'defaultValue';\n\n      for (var option in options) {\n        if (Object.prototype.hasOwnProperty.call(options, option) && prefix === option.substring(0, prefix.length) && undefined !== options[option]) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n  }]);\n\n  return Translator;\n}(EventEmitter);\n\nfunction capitalize(string) {\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nvar LanguageUtil = function () {\n  function LanguageUtil(options) {\n    _classCallCheck(this, LanguageUtil);\n\n    this.options = options;\n    this.whitelist = this.options.supportedLngs || false;\n    this.supportedLngs = this.options.supportedLngs || false;\n    this.logger = baseLogger.create('languageUtils');\n  }\n\n  _createClass(LanguageUtil, [{\n    key: \"getScriptPartFromCode\",\n    value: function getScriptPartFromCode(code) {\n      if (!code || code.indexOf('-') < 0) return null;\n      var p = code.split('-');\n      if (p.length === 2) return null;\n      p.pop();\n      if (p[p.length - 1].toLowerCase() === 'x') return null;\n      return this.formatLanguageCode(p.join('-'));\n    }\n  }, {\n    key: \"getLanguagePartFromCode\",\n    value: function getLanguagePartFromCode(code) {\n      if (!code || code.indexOf('-') < 0) return code;\n      var p = code.split('-');\n      return this.formatLanguageCode(p[0]);\n    }\n  }, {\n    key: \"formatLanguageCode\",\n    value: function formatLanguageCode(code) {\n      if (typeof code === 'string' && code.indexOf('-') > -1) {\n        var specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab'];\n        var p = code.split('-');\n\n        if (this.options.lowerCaseLng) {\n          p = p.map(function (part) {\n            return part.toLowerCase();\n          });\n        } else if (p.length === 2) {\n          p[0] = p[0].toLowerCase();\n          p[1] = p[1].toUpperCase();\n          if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n        } else if (p.length === 3) {\n          p[0] = p[0].toLowerCase();\n          if (p[1].length === 2) p[1] = p[1].toUpperCase();\n          if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase();\n          if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n          if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase());\n        }\n\n        return p.join('-');\n      }\n\n      return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n    }\n  }, {\n    key: \"isWhitelisted\",\n    value: function isWhitelisted(code) {\n      this.logger.deprecate('languageUtils.isWhitelisted', 'function \"isWhitelisted\" will be renamed to \"isSupportedCode\" in the next major - please make sure to rename it\\'s usage asap.');\n      return this.isSupportedCode(code);\n    }\n  }, {\n    key: \"isSupportedCode\",\n    value: function isSupportedCode(code) {\n      if (this.options.load === 'languageOnly' || this.options.nonExplicitSupportedLngs) {\n        code = this.getLanguagePartFromCode(code);\n      }\n\n      return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.indexOf(code) > -1;\n    }\n  }, {\n    key: \"getBestMatchFromCodes\",\n    value: function getBestMatchFromCodes(codes) {\n      var _this = this;\n\n      if (!codes) return null;\n      var found;\n      codes.forEach(function (code) {\n        if (found) return;\n\n        var cleanedLng = _this.formatLanguageCode(code);\n\n        if (!_this.options.supportedLngs || _this.isSupportedCode(cleanedLng)) found = cleanedLng;\n      });\n\n      if (!found && this.options.supportedLngs) {\n        codes.forEach(function (code) {\n          if (found) return;\n\n          var lngOnly = _this.getLanguagePartFromCode(code);\n\n          if (_this.isSupportedCode(lngOnly)) return found = lngOnly;\n          found = _this.options.supportedLngs.find(function (supportedLng) {\n            if (supportedLng.indexOf(lngOnly) === 0) return supportedLng;\n          });\n        });\n      }\n\n      if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0];\n      return found;\n    }\n  }, {\n    key: \"getFallbackCodes\",\n    value: function getFallbackCodes(fallbacks, code) {\n      if (!fallbacks) return [];\n      if (typeof fallbacks === 'function') fallbacks = fallbacks(code);\n      if (typeof fallbacks === 'string') fallbacks = [fallbacks];\n      if (Object.prototype.toString.apply(fallbacks) === '[object Array]') return fallbacks;\n      if (!code) return fallbacks[\"default\"] || [];\n      var found = fallbacks[code];\n      if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n      if (!found) found = fallbacks[this.formatLanguageCode(code)];\n      if (!found) found = fallbacks[this.getLanguagePartFromCode(code)];\n      if (!found) found = fallbacks[\"default\"];\n      return found || [];\n    }\n  }, {\n    key: \"toResolveHierarchy\",\n    value: function toResolveHierarchy(code, fallbackCode) {\n      var _this2 = this;\n\n      var fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code);\n      var codes = [];\n\n      var addCode = function addCode(c) {\n        if (!c) return;\n\n        if (_this2.isSupportedCode(c)) {\n          codes.push(c);\n        } else {\n          _this2.logger.warn(\"rejecting language code not found in supportedLngs: \".concat(c));\n        }\n      };\n\n      if (typeof code === 'string' && code.indexOf('-') > -1) {\n        if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n        if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n        if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n      } else if (typeof code === 'string') {\n        addCode(this.formatLanguageCode(code));\n      }\n\n      fallbackCodes.forEach(function (fc) {\n        if (codes.indexOf(fc) < 0) addCode(_this2.formatLanguageCode(fc));\n      });\n      return codes;\n    }\n  }]);\n\n  return LanguageUtil;\n}();\n\nvar sets = [{\n  lngs: ['ach', 'ak', 'am', 'arn', 'br', 'fil', 'gun', 'ln', 'mfe', 'mg', 'mi', 'oc', 'pt', 'pt-BR', 'tg', 'tl', 'ti', 'tr', 'uz', 'wa'],\n  nr: [1, 2],\n  fc: 1\n}, {\n  lngs: ['af', 'an', 'ast', 'az', 'bg', 'bn', 'ca', 'da', 'de', 'dev', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fi', 'fo', 'fur', 'fy', 'gl', 'gu', 'ha', 'hi', 'hu', 'hy', 'ia', 'it', 'kn', 'ku', 'lb', 'mai', 'ml', 'mn', 'mr', 'nah', 'nap', 'nb', 'ne', 'nl', 'nn', 'no', 'nso', 'pa', 'pap', 'pms', 'ps', 'pt-PT', 'rm', 'sco', 'se', 'si', 'so', 'son', 'sq', 'sv', 'sw', 'ta', 'te', 'tk', 'ur', 'yo'],\n  nr: [1, 2],\n  fc: 2\n}, {\n  lngs: ['ay', 'bo', 'cgg', 'fa', 'ht', 'id', 'ja', 'jbo', 'ka', 'kk', 'km', 'ko', 'ky', 'lo', 'ms', 'sah', 'su', 'th', 'tt', 'ug', 'vi', 'wo', 'zh'],\n  nr: [1],\n  fc: 3\n}, {\n  lngs: ['be', 'bs', 'cnr', 'dz', 'hr', 'ru', 'sr', 'uk'],\n  nr: [1, 2, 5],\n  fc: 4\n}, {\n  lngs: ['ar'],\n  nr: [0, 1, 2, 3, 11, 100],\n  fc: 5\n}, {\n  lngs: ['cs', 'sk'],\n  nr: [1, 2, 5],\n  fc: 6\n}, {\n  lngs: ['csb', 'pl'],\n  nr: [1, 2, 5],\n  fc: 7\n}, {\n  lngs: ['cy'],\n  nr: [1, 2, 3, 8],\n  fc: 8\n}, {\n  lngs: ['fr'],\n  nr: [1, 2],\n  fc: 9\n}, {\n  lngs: ['ga'],\n  nr: [1, 2, 3, 7, 11],\n  fc: 10\n}, {\n  lngs: ['gd'],\n  nr: [1, 2, 3, 20],\n  fc: 11\n}, {\n  lngs: ['is'],\n  nr: [1, 2],\n  fc: 12\n}, {\n  lngs: ['jv'],\n  nr: [0, 1],\n  fc: 13\n}, {\n  lngs: ['kw'],\n  nr: [1, 2, 3, 4],\n  fc: 14\n}, {\n  lngs: ['lt'],\n  nr: [1, 2, 10],\n  fc: 15\n}, {\n  lngs: ['lv'],\n  nr: [1, 2, 0],\n  fc: 16\n}, {\n  lngs: ['mk'],\n  nr: [1, 2],\n  fc: 17\n}, {\n  lngs: ['mnk'],\n  nr: [0, 1, 2],\n  fc: 18\n}, {\n  lngs: ['mt'],\n  nr: [1, 2, 11, 20],\n  fc: 19\n}, {\n  lngs: ['or'],\n  nr: [2, 1],\n  fc: 2\n}, {\n  lngs: ['ro'],\n  nr: [1, 2, 20],\n  fc: 20\n}, {\n  lngs: ['sl'],\n  nr: [5, 1, 2, 3],\n  fc: 21\n}, {\n  lngs: ['he', 'iw'],\n  nr: [1, 2, 20, 21],\n  fc: 22\n}];\nvar _rulesPluralsTypes = {\n  1: function _(n) {\n    return Number(n > 1);\n  },\n  2: function _(n) {\n    return Number(n != 1);\n  },\n  3: function _(n) {\n    return 0;\n  },\n  4: function _(n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  5: function _(n) {\n    return Number(n == 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5);\n  },\n  6: function _(n) {\n    return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2);\n  },\n  7: function _(n) {\n    return Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  8: function _(n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3);\n  },\n  9: function _(n) {\n    return Number(n >= 2);\n  },\n  10: function _(n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4);\n  },\n  11: function _(n) {\n    return Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3);\n  },\n  12: function _(n) {\n    return Number(n % 10 != 1 || n % 100 == 11);\n  },\n  13: function _(n) {\n    return Number(n !== 0);\n  },\n  14: function _(n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3);\n  },\n  15: function _(n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  16: function _(n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2);\n  },\n  17: function _(n) {\n    return Number(n == 1 || n % 10 == 1 && n % 100 != 11 ? 0 : 1);\n  },\n  18: function _(n) {\n    return Number(n == 0 ? 0 : n == 1 ? 1 : 2);\n  },\n  19: function _(n) {\n    return Number(n == 1 ? 0 : n == 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3);\n  },\n  20: function _(n) {\n    return Number(n == 1 ? 0 : n == 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2);\n  },\n  21: function _(n) {\n    return Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0);\n  },\n  22: function _(n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3);\n  }\n};\n\nfunction createRules() {\n  var rules = {};\n  sets.forEach(function (set) {\n    set.lngs.forEach(function (l) {\n      rules[l] = {\n        numbers: set.nr,\n        plurals: _rulesPluralsTypes[set.fc]\n      };\n    });\n  });\n  return rules;\n}\n\nvar PluralResolver = function () {\n  function PluralResolver(languageUtils) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, PluralResolver);\n\n    this.languageUtils = languageUtils;\n    this.options = options;\n    this.logger = baseLogger.create('pluralResolver');\n    this.rules = createRules();\n  }\n\n  _createClass(PluralResolver, [{\n    key: \"addRule\",\n    value: function addRule(lng, obj) {\n      this.rules[lng] = obj;\n    }\n  }, {\n    key: \"getRule\",\n    value: function getRule(code) {\n      return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)];\n    }\n  }, {\n    key: \"needsPlural\",\n    value: function needsPlural(code) {\n      var rule = this.getRule(code);\n      return rule && rule.numbers.length > 1;\n    }\n  }, {\n    key: \"getPluralFormsOfKey\",\n    value: function getPluralFormsOfKey(code, key) {\n      return this.getSuffixes(code).map(function (suffix) {\n        return key + suffix;\n      });\n    }\n  }, {\n    key: \"getSuffixes\",\n    value: function getSuffixes(code) {\n      var _this = this;\n\n      var rule = this.getRule(code);\n\n      if (!rule) {\n        return [];\n      }\n\n      return rule.numbers.map(function (number) {\n        return _this.getSuffix(code, number);\n      });\n    }\n  }, {\n    key: \"getSuffix\",\n    value: function getSuffix(code, count) {\n      var _this2 = this;\n\n      var rule = this.getRule(code);\n\n      if (rule) {\n        var idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));\n        var suffix = rule.numbers[idx];\n\n        if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n          if (suffix === 2) {\n            suffix = 'plural';\n          } else if (suffix === 1) {\n            suffix = '';\n          }\n        }\n\n        var returnSuffix = function returnSuffix() {\n          return _this2.options.prepend && suffix.toString() ? _this2.options.prepend + suffix.toString() : suffix.toString();\n        };\n\n        if (this.options.compatibilityJSON === 'v1') {\n          if (suffix === 1) return '';\n          if (typeof suffix === 'number') return \"_plural_\".concat(suffix.toString());\n          return returnSuffix();\n        } else if (this.options.compatibilityJSON === 'v2') {\n          return returnSuffix();\n        } else if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n          return returnSuffix();\n        }\n\n        return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString();\n      }\n\n      this.logger.warn(\"no plural rule found for: \".concat(code));\n      return '';\n    }\n  }]);\n\n  return PluralResolver;\n}();\n\nvar Interpolator = function () {\n  function Interpolator() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    _classCallCheck(this, Interpolator);\n\n    this.logger = baseLogger.create('interpolator');\n    this.options = options;\n\n    this.format = options.interpolation && options.interpolation.format || function (value) {\n      return value;\n    };\n\n    this.init(options);\n  }\n\n  _createClass(Interpolator, [{\n    key: \"init\",\n    value: function init() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      if (!options.interpolation) options.interpolation = {\n        escapeValue: true\n      };\n      var iOpts = options.interpolation;\n      this.escape = iOpts.escape !== undefined ? iOpts.escape : escape;\n      this.escapeValue = iOpts.escapeValue !== undefined ? iOpts.escapeValue : true;\n      this.useRawValueToEscape = iOpts.useRawValueToEscape !== undefined ? iOpts.useRawValueToEscape : false;\n      this.prefix = iOpts.prefix ? regexEscape(iOpts.prefix) : iOpts.prefixEscaped || '{{';\n      this.suffix = iOpts.suffix ? regexEscape(iOpts.suffix) : iOpts.suffixEscaped || '}}';\n      this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ',';\n      this.unescapePrefix = iOpts.unescapeSuffix ? '' : iOpts.unescapePrefix || '-';\n      this.unescapeSuffix = this.unescapePrefix ? '' : iOpts.unescapeSuffix || '';\n      this.nestingPrefix = iOpts.nestingPrefix ? regexEscape(iOpts.nestingPrefix) : iOpts.nestingPrefixEscaped || regexEscape('$t(');\n      this.nestingSuffix = iOpts.nestingSuffix ? regexEscape(iOpts.nestingSuffix) : iOpts.nestingSuffixEscaped || regexEscape(')');\n      this.nestingOptionsSeparator = iOpts.nestingOptionsSeparator ? iOpts.nestingOptionsSeparator : iOpts.nestingOptionsSeparator || ',';\n      this.maxReplaces = iOpts.maxReplaces ? iOpts.maxReplaces : 1000;\n      this.alwaysFormat = iOpts.alwaysFormat !== undefined ? iOpts.alwaysFormat : false;\n      this.resetRegExp();\n    }\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      if (this.options) this.init(this.options);\n    }\n  }, {\n    key: \"resetRegExp\",\n    value: function resetRegExp() {\n      var regexpStr = \"\".concat(this.prefix, \"(.+?)\").concat(this.suffix);\n      this.regexp = new RegExp(regexpStr, 'g');\n      var regexpUnescapeStr = \"\".concat(this.prefix).concat(this.unescapePrefix, \"(.+?)\").concat(this.unescapeSuffix).concat(this.suffix);\n      this.regexpUnescape = new RegExp(regexpUnescapeStr, 'g');\n      var nestingRegexpStr = \"\".concat(this.nestingPrefix, \"(.+?)\").concat(this.nestingSuffix);\n      this.nestingRegexp = new RegExp(nestingRegexpStr, 'g');\n    }\n  }, {\n    key: \"interpolate\",\n    value: function interpolate(str, data, lng, options) {\n      var _this = this;\n\n      var match;\n      var value;\n      var replaces;\n      var defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {};\n\n      function regexSafe(val) {\n        return val.replace(/\\$/g, '$$$$');\n      }\n\n      var handleFormat = function handleFormat(key) {\n        if (key.indexOf(_this.formatSeparator) < 0) {\n          var path = getPathWithDefaults(data, defaultData, key);\n          return _this.alwaysFormat ? _this.format(path, undefined, lng) : path;\n        }\n\n        var p = key.split(_this.formatSeparator);\n        var k = p.shift().trim();\n        var f = p.join(_this.formatSeparator).trim();\n        return _this.format(getPathWithDefaults(data, defaultData, k), f, lng, options);\n      };\n\n      this.resetRegExp();\n      var missingInterpolationHandler = options && options.missingInterpolationHandler || this.options.missingInterpolationHandler;\n      var skipOnVariables = options && options.interpolation && options.interpolation.skipOnVariables || this.options.interpolation.skipOnVariables;\n      var todos = [{\n        regex: this.regexpUnescape,\n        safeValue: function safeValue(val) {\n          return regexSafe(val);\n        }\n      }, {\n        regex: this.regexp,\n        safeValue: function safeValue(val) {\n          return _this.escapeValue ? regexSafe(_this.escape(val)) : regexSafe(val);\n        }\n      }];\n      todos.forEach(function (todo) {\n        replaces = 0;\n\n        while (match = todo.regex.exec(str)) {\n          value = handleFormat(match[1].trim());\n\n          if (value === undefined) {\n            if (typeof missingInterpolationHandler === 'function') {\n              var temp = missingInterpolationHandler(str, match, options);\n              value = typeof temp === 'string' ? temp : '';\n            } else if (skipOnVariables) {\n              value = match[0];\n              continue;\n            } else {\n              _this.logger.warn(\"missed to pass in variable \".concat(match[1], \" for interpolating \").concat(str));\n\n              value = '';\n            }\n          } else if (typeof value !== 'string' && !_this.useRawValueToEscape) {\n            value = makeString(value);\n          }\n\n          str = str.replace(match[0], todo.safeValue(value));\n          todo.regex.lastIndex = 0;\n          replaces++;\n\n          if (replaces >= _this.maxReplaces) {\n            break;\n          }\n        }\n      });\n      return str;\n    }\n  }, {\n    key: \"nest\",\n    value: function nest(str, fc) {\n      var _this2 = this;\n\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      var match;\n      var value;\n\n      var clonedOptions = _objectSpread({}, options);\n\n      clonedOptions.applyPostProcessor = false;\n      delete clonedOptions.defaultValue;\n\n      function handleHasOptions(key, inheritedOptions) {\n        var sep = this.nestingOptionsSeparator;\n        if (key.indexOf(sep) < 0) return key;\n        var c = key.split(new RegExp(\"\".concat(sep, \"[ ]*{\")));\n        var optionsString = \"{\".concat(c[1]);\n        key = c[0];\n        optionsString = this.interpolate(optionsString, clonedOptions);\n        optionsString = optionsString.replace(/'/g, '\"');\n\n        try {\n          clonedOptions = JSON.parse(optionsString);\n          if (inheritedOptions) clonedOptions = _objectSpread({}, inheritedOptions, clonedOptions);\n        } catch (e) {\n          this.logger.warn(\"failed parsing options string in nesting for key \".concat(key), e);\n          return \"\".concat(key).concat(sep).concat(optionsString);\n        }\n\n        delete clonedOptions.defaultValue;\n        return key;\n      }\n\n      while (match = this.nestingRegexp.exec(str)) {\n        var formatters = [];\n        var doReduce = false;\n\n        if (match[0].includes(this.formatSeparator) && !/{.*}/.test(match[1])) {\n          var r = match[1].split(this.formatSeparator).map(function (elem) {\n            return elem.trim();\n          });\n          match[1] = r.shift();\n          formatters = r;\n          doReduce = true;\n        }\n\n        value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions);\n        if (value && match[0] === str && typeof value !== 'string') return value;\n        if (typeof value !== 'string') value = makeString(value);\n\n        if (!value) {\n          this.logger.warn(\"missed to resolve \".concat(match[1], \" for nesting \").concat(str));\n          value = '';\n        }\n\n        if (doReduce) {\n          value = formatters.reduce(function (v, f) {\n            return _this2.format(v, f, options.lng, options);\n          }, value.trim());\n        }\n\n        str = str.replace(match[0], value);\n        this.regexp.lastIndex = 0;\n      }\n\n      return str;\n    }\n  }]);\n\n  return Interpolator;\n}();\n\nfunction remove(arr, what) {\n  var found = arr.indexOf(what);\n\n  while (found !== -1) {\n    arr.splice(found, 1);\n    found = arr.indexOf(what);\n  }\n}\n\nvar Connector = function (_EventEmitter) {\n  _inherits(Connector, _EventEmitter);\n\n  function Connector(backend, store, services) {\n    var _this;\n\n    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n    _classCallCheck(this, Connector);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(Connector).call(this));\n\n    if (isIE10) {\n      EventEmitter.call(_assertThisInitialized(_this));\n    }\n\n    _this.backend = backend;\n    _this.store = store;\n    _this.services = services;\n    _this.languageUtils = services.languageUtils;\n    _this.options = options;\n    _this.logger = baseLogger.create('backendConnector');\n    _this.state = {};\n    _this.queue = [];\n\n    if (_this.backend && _this.backend.init) {\n      _this.backend.init(services, options.backend, options);\n    }\n\n    return _this;\n  }\n\n  _createClass(Connector, [{\n    key: \"queueLoad\",\n    value: function queueLoad(languages, namespaces, options, callback) {\n      var _this2 = this;\n\n      var toLoad = [];\n      var pending = [];\n      var toLoadLanguages = [];\n      var toLoadNamespaces = [];\n      languages.forEach(function (lng) {\n        var hasAllNamespaces = true;\n        namespaces.forEach(function (ns) {\n          var name = \"\".concat(lng, \"|\").concat(ns);\n\n          if (!options.reload && _this2.store.hasResourceBundle(lng, ns)) {\n            _this2.state[name] = 2;\n          } else if (_this2.state[name] < 0) ; else if (_this2.state[name] === 1) {\n            if (pending.indexOf(name) < 0) pending.push(name);\n          } else {\n            _this2.state[name] = 1;\n            hasAllNamespaces = false;\n            if (pending.indexOf(name) < 0) pending.push(name);\n            if (toLoad.indexOf(name) < 0) toLoad.push(name);\n            if (toLoadNamespaces.indexOf(ns) < 0) toLoadNamespaces.push(ns);\n          }\n        });\n        if (!hasAllNamespaces) toLoadLanguages.push(lng);\n      });\n\n      if (toLoad.length || pending.length) {\n        this.queue.push({\n          pending: pending,\n          loaded: {},\n          errors: [],\n          callback: callback\n        });\n      }\n\n      return {\n        toLoad: toLoad,\n        pending: pending,\n        toLoadLanguages: toLoadLanguages,\n        toLoadNamespaces: toLoadNamespaces\n      };\n    }\n  }, {\n    key: \"loaded\",\n    value: function loaded(name, err, data) {\n      var s = name.split('|');\n      var lng = s[0];\n      var ns = s[1];\n      if (err) this.emit('failedLoading', lng, ns, err);\n\n      if (data) {\n        this.store.addResourceBundle(lng, ns, data);\n      }\n\n      this.state[name] = err ? -1 : 2;\n      var loaded = {};\n      this.queue.forEach(function (q) {\n        pushPath(q.loaded, [lng], ns);\n        remove(q.pending, name);\n        if (err) q.errors.push(err);\n\n        if (q.pending.length === 0 && !q.done) {\n          Object.keys(q.loaded).forEach(function (l) {\n            if (!loaded[l]) loaded[l] = [];\n\n            if (q.loaded[l].length) {\n              q.loaded[l].forEach(function (ns) {\n                if (loaded[l].indexOf(ns) < 0) loaded[l].push(ns);\n              });\n            }\n          });\n          q.done = true;\n\n          if (q.errors.length) {\n            q.callback(q.errors);\n          } else {\n            q.callback();\n          }\n        }\n      });\n      this.emit('loaded', loaded);\n      this.queue = this.queue.filter(function (q) {\n        return !q.done;\n      });\n    }\n  }, {\n    key: \"read\",\n    value: function read(lng, ns, fcName) {\n      var _this3 = this;\n\n      var tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n      var wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 350;\n      var callback = arguments.length > 5 ? arguments[5] : undefined;\n      if (!lng.length) return callback(null, {});\n      return this.backend[fcName](lng, ns, function (err, data) {\n        if (err && data && tried < 5) {\n          setTimeout(function () {\n            _this3.read.call(_this3, lng, ns, fcName, tried + 1, wait * 2, callback);\n          }, wait);\n          return;\n        }\n\n        callback(err, data);\n      });\n    }\n  }, {\n    key: \"prepareLoading\",\n    value: function prepareLoading(languages, namespaces) {\n      var _this4 = this;\n\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      var callback = arguments.length > 3 ? arguments[3] : undefined;\n\n      if (!this.backend) {\n        this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n        return callback && callback();\n      }\n\n      if (typeof languages === 'string') languages = this.languageUtils.toResolveHierarchy(languages);\n      if (typeof namespaces === 'string') namespaces = [namespaces];\n      var toLoad = this.queueLoad(languages, namespaces, options, callback);\n\n      if (!toLoad.toLoad.length) {\n        if (!toLoad.pending.length) callback();\n        return null;\n      }\n\n      toLoad.toLoad.forEach(function (name) {\n        _this4.loadOne(name);\n      });\n    }\n  }, {\n    key: \"load\",\n    value: function load(languages, namespaces, callback) {\n      this.prepareLoading(languages, namespaces, {}, callback);\n    }\n  }, {\n    key: \"reload\",\n    value: function reload(languages, namespaces, callback) {\n      this.prepareLoading(languages, namespaces, {\n        reload: true\n      }, callback);\n    }\n  }, {\n    key: \"loadOne\",\n    value: function loadOne(name) {\n      var _this5 = this;\n\n      var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n      var s = name.split('|');\n      var lng = s[0];\n      var ns = s[1];\n      this.read(lng, ns, 'read', undefined, undefined, function (err, data) {\n        if (err) _this5.logger.warn(\"\".concat(prefix, \"loading namespace \").concat(ns, \" for language \").concat(lng, \" failed\"), err);\n        if (!err && data) _this5.logger.log(\"\".concat(prefix, \"loaded namespace \").concat(ns, \" for language \").concat(lng), data);\n\n        _this5.loaded(name, err, data);\n      });\n    }\n  }, {\n    key: \"saveMissing\",\n    value: function saveMissing(languages, namespace, key, fallbackValue, isUpdate) {\n      var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n\n      if (this.services.utils && this.services.utils.hasLoadedNamespace && !this.services.utils.hasLoadedNamespace(namespace)) {\n        this.logger.warn(\"did not save key \\\"\".concat(key, \"\\\" as the namespace \\\"\").concat(namespace, \"\\\" was not yet loaded\"), 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n        return;\n      }\n\n      if (key === undefined || key === null || key === '') return;\n\n      if (this.backend && this.backend.create) {\n        this.backend.create(languages, namespace, key, fallbackValue, null, _objectSpread({}, options, {\n          isUpdate: isUpdate\n        }));\n      }\n\n      if (!languages || !languages[0]) return;\n      this.store.addResource(languages[0], namespace, key, fallbackValue);\n    }\n  }]);\n\n  return Connector;\n}(EventEmitter);\n\nfunction get() {\n  return {\n    debug: false,\n    initImmediate: true,\n    ns: ['translation'],\n    defaultNS: ['translation'],\n    fallbackLng: ['dev'],\n    fallbackNS: false,\n    whitelist: false,\n    nonExplicitWhitelist: false,\n    supportedLngs: false,\n    nonExplicitSupportedLngs: false,\n    load: 'all',\n    preload: false,\n    simplifyPluralSuffix: true,\n    keySeparator: '.',\n    nsSeparator: ':',\n    pluralSeparator: '_',\n    contextSeparator: '_',\n    partialBundledLanguages: false,\n    saveMissing: false,\n    updateMissing: false,\n    saveMissingTo: 'fallback',\n    saveMissingPlurals: true,\n    missingKeyHandler: false,\n    missingInterpolationHandler: false,\n    postProcess: false,\n    postProcessPassResolved: false,\n    returnNull: true,\n    returnEmptyString: true,\n    returnObjects: false,\n    joinArrays: false,\n    returnedObjectHandler: false,\n    parseMissingKeyHandler: false,\n    appendNamespaceToMissingKey: false,\n    appendNamespaceToCIMode: false,\n    overloadTranslationOptionHandler: function handle(args) {\n      var ret = {};\n      if (_typeof(args[1]) === 'object') ret = args[1];\n      if (typeof args[1] === 'string') ret.defaultValue = args[1];\n      if (typeof args[2] === 'string') ret.tDescription = args[2];\n\n      if (_typeof(args[2]) === 'object' || _typeof(args[3]) === 'object') {\n        var options = args[3] || args[2];\n        Object.keys(options).forEach(function (key) {\n          ret[key] = options[key];\n        });\n      }\n\n      return ret;\n    },\n    interpolation: {\n      escapeValue: true,\n      format: function format(value, _format, lng, options) {\n        return value;\n      },\n      prefix: '{{',\n      suffix: '}}',\n      formatSeparator: ',',\n      unescapePrefix: '-',\n      nestingPrefix: '$t(',\n      nestingSuffix: ')',\n      nestingOptionsSeparator: ',',\n      maxReplaces: 1000,\n      skipOnVariables: false\n    }\n  };\n}\nfunction transformOptions(options) {\n  if (typeof options.ns === 'string') options.ns = [options.ns];\n  if (typeof options.fallbackLng === 'string') options.fallbackLng = [options.fallbackLng];\n  if (typeof options.fallbackNS === 'string') options.fallbackNS = [options.fallbackNS];\n\n  if (options.whitelist) {\n    if (options.whitelist && options.whitelist.indexOf('cimode') < 0) {\n      options.whitelist = options.whitelist.concat(['cimode']);\n    }\n\n    options.supportedLngs = options.whitelist;\n  }\n\n  if (options.nonExplicitWhitelist) {\n    options.nonExplicitSupportedLngs = options.nonExplicitWhitelist;\n  }\n\n  if (options.supportedLngs && options.supportedLngs.indexOf('cimode') < 0) {\n    options.supportedLngs = options.supportedLngs.concat(['cimode']);\n  }\n\n  return options;\n}\n\nfunction noop() {}\n\nvar I18n = function (_EventEmitter) {\n  _inherits(I18n, _EventEmitter);\n\n  function I18n() {\n    var _this;\n\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var callback = arguments.length > 1 ? arguments[1] : undefined;\n\n    _classCallCheck(this, I18n);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(I18n).call(this));\n\n    if (isIE10) {\n      EventEmitter.call(_assertThisInitialized(_this));\n    }\n\n    _this.options = transformOptions(options);\n    _this.services = {};\n    _this.logger = baseLogger;\n    _this.modules = {\n      external: []\n    };\n\n    if (callback && !_this.isInitialized && !options.isClone) {\n      if (!_this.options.initImmediate) {\n        _this.init(options, callback);\n\n        return _possibleConstructorReturn(_this, _assertThisInitialized(_this));\n      }\n\n      setTimeout(function () {\n        _this.init(options, callback);\n      }, 0);\n    }\n\n    return _this;\n  }\n\n  _createClass(I18n, [{\n    key: \"init\",\n    value: function init() {\n      var _this2 = this;\n\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var callback = arguments.length > 1 ? arguments[1] : undefined;\n\n      if (typeof options === 'function') {\n        callback = options;\n        options = {};\n      }\n\n      if (options.whitelist && !options.supportedLngs) {\n        this.logger.deprecate('whitelist', 'option \"whitelist\" will be renamed to \"supportedLngs\" in the next major - please make sure to rename this option asap.');\n      }\n\n      if (options.nonExplicitWhitelist && !options.nonExplicitSupportedLngs) {\n        this.logger.deprecate('whitelist', 'options \"nonExplicitWhitelist\" will be renamed to \"nonExplicitSupportedLngs\" in the next major - please make sure to rename this option asap.');\n      }\n\n      this.options = _objectSpread({}, get(), this.options, transformOptions(options));\n      this.format = this.options.interpolation.format;\n      if (!callback) callback = noop;\n\n      function createClassOnDemand(ClassOrObject) {\n        if (!ClassOrObject) return null;\n        if (typeof ClassOrObject === 'function') return new ClassOrObject();\n        return ClassOrObject;\n      }\n\n      if (!this.options.isClone) {\n        if (this.modules.logger) {\n          baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n        } else {\n          baseLogger.init(null, this.options);\n        }\n\n        var lu = new LanguageUtil(this.options);\n        this.store = new ResourceStore(this.options.resources, this.options);\n        var s = this.services;\n        s.logger = baseLogger;\n        s.resourceStore = this.store;\n        s.languageUtils = lu;\n        s.pluralResolver = new PluralResolver(lu, {\n          prepend: this.options.pluralSeparator,\n          compatibilityJSON: this.options.compatibilityJSON,\n          simplifyPluralSuffix: this.options.simplifyPluralSuffix\n        });\n        s.interpolator = new Interpolator(this.options);\n        s.utils = {\n          hasLoadedNamespace: this.hasLoadedNamespace.bind(this)\n        };\n        s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n        s.backendConnector.on('*', function (event) {\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          _this2.emit.apply(_this2, [event].concat(args));\n        });\n\n        if (this.modules.languageDetector) {\n          s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n          s.languageDetector.init(s, this.options.detection, this.options);\n        }\n\n        if (this.modules.i18nFormat) {\n          s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n          if (s.i18nFormat.init) s.i18nFormat.init(this);\n        }\n\n        this.translator = new Translator(this.services, this.options);\n        this.translator.on('*', function (event) {\n          for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n            args[_key2 - 1] = arguments[_key2];\n          }\n\n          _this2.emit.apply(_this2, [event].concat(args));\n        });\n        this.modules.external.forEach(function (m) {\n          if (m.init) m.init(_this2);\n        });\n      }\n\n      if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) {\n        var codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n        if (codes.length > 0 && codes[0] !== 'dev') this.options.lng = codes[0];\n      }\n\n      if (!this.services.languageDetector && !this.options.lng) {\n        this.logger.warn('init: no languageDetector is used and no lng is defined');\n      }\n\n      var storeApi = ['getResource', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n      storeApi.forEach(function (fcName) {\n        _this2[fcName] = function () {\n          var _this2$store;\n\n          return (_this2$store = _this2.store)[fcName].apply(_this2$store, arguments);\n        };\n      });\n      var storeApiChained = ['addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle'];\n      storeApiChained.forEach(function (fcName) {\n        _this2[fcName] = function () {\n          var _this2$store2;\n\n          (_this2$store2 = _this2.store)[fcName].apply(_this2$store2, arguments);\n\n          return _this2;\n        };\n      });\n      var deferred = defer();\n\n      var load = function load() {\n        var finish = function finish(err, t) {\n          if (_this2.isInitialized) _this2.logger.warn('init: i18next is already initialized. You should call init just once!');\n          _this2.isInitialized = true;\n          if (!_this2.options.isClone) _this2.logger.log('initialized', _this2.options);\n\n          _this2.emit('initialized', _this2.options);\n\n          deferred.resolve(t);\n          callback(err, t);\n        };\n\n        if (_this2.languages && _this2.options.compatibilityAPI !== 'v1' && !_this2.isInitialized) return finish(null, _this2.t.bind(_this2));\n\n        _this2.changeLanguage(_this2.options.lng, finish);\n      };\n\n      if (this.options.resources || !this.options.initImmediate) {\n        load();\n      } else {\n        setTimeout(load, 0);\n      }\n\n      return deferred;\n    }\n  }, {\n    key: \"loadResources\",\n    value: function loadResources(language) {\n      var _this3 = this;\n\n      var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n      var usedCallback = callback;\n      var usedLng = typeof language === 'string' ? language : this.language;\n      if (typeof language === 'function') usedCallback = language;\n\n      if (!this.options.resources || this.options.partialBundledLanguages) {\n        if (usedLng && usedLng.toLowerCase() === 'cimode') return usedCallback();\n        var toLoad = [];\n\n        var append = function append(lng) {\n          if (!lng) return;\n\n          var lngs = _this3.services.languageUtils.toResolveHierarchy(lng);\n\n          lngs.forEach(function (l) {\n            if (toLoad.indexOf(l) < 0) toLoad.push(l);\n          });\n        };\n\n        if (!usedLng) {\n          var fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n          fallbacks.forEach(function (l) {\n            return append(l);\n          });\n        } else {\n          append(usedLng);\n        }\n\n        if (this.options.preload) {\n          this.options.preload.forEach(function (l) {\n            return append(l);\n          });\n        }\n\n        this.services.backendConnector.load(toLoad, this.options.ns, usedCallback);\n      } else {\n        usedCallback(null);\n      }\n    }\n  }, {\n    key: \"reloadResources\",\n    value: function reloadResources(lngs, ns, callback) {\n      var deferred = defer();\n      if (!lngs) lngs = this.languages;\n      if (!ns) ns = this.options.ns;\n      if (!callback) callback = noop;\n      this.services.backendConnector.reload(lngs, ns, function (err) {\n        deferred.resolve();\n        callback(err);\n      });\n      return deferred;\n    }\n  }, {\n    key: \"use\",\n    value: function use(module) {\n      if (!module) throw new Error('You are passing an undefined module! Please check the object you are passing to i18next.use()');\n      if (!module.type) throw new Error('You are passing a wrong module! Please check the object you are passing to i18next.use()');\n\n      if (module.type === 'backend') {\n        this.modules.backend = module;\n      }\n\n      if (module.type === 'logger' || module.log && module.warn && module.error) {\n        this.modules.logger = module;\n      }\n\n      if (module.type === 'languageDetector') {\n        this.modules.languageDetector = module;\n      }\n\n      if (module.type === 'i18nFormat') {\n        this.modules.i18nFormat = module;\n      }\n\n      if (module.type === 'postProcessor') {\n        postProcessor.addPostProcessor(module);\n      }\n\n      if (module.type === '3rdParty') {\n        this.modules.external.push(module);\n      }\n\n      return this;\n    }\n  }, {\n    key: \"changeLanguage\",\n    value: function changeLanguage(lng, callback) {\n      var _this4 = this;\n\n      this.isLanguageChangingTo = lng;\n      var deferred = defer();\n      this.emit('languageChanging', lng);\n\n      var done = function done(err, l) {\n        if (l) {\n          _this4.language = l;\n          _this4.languages = _this4.services.languageUtils.toResolveHierarchy(l);\n\n          _this4.translator.changeLanguage(l);\n\n          _this4.isLanguageChangingTo = undefined;\n\n          _this4.emit('languageChanged', l);\n\n          _this4.logger.log('languageChanged', l);\n        } else {\n          _this4.isLanguageChangingTo = undefined;\n        }\n\n        deferred.resolve(function () {\n          return _this4.t.apply(_this4, arguments);\n        });\n        if (callback) callback(err, function () {\n          return _this4.t.apply(_this4, arguments);\n        });\n      };\n\n      var setLng = function setLng(lngs) {\n        var l = typeof lngs === 'string' ? lngs : _this4.services.languageUtils.getBestMatchFromCodes(lngs);\n\n        if (l) {\n          if (!_this4.language) {\n            _this4.language = l;\n            _this4.languages = _this4.services.languageUtils.toResolveHierarchy(l);\n          }\n\n          if (!_this4.translator.language) _this4.translator.changeLanguage(l);\n          if (_this4.services.languageDetector) _this4.services.languageDetector.cacheUserLanguage(l);\n        }\n\n        _this4.loadResources(l, function (err) {\n          done(err, l);\n        });\n      };\n\n      if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n        setLng(this.services.languageDetector.detect());\n      } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n        this.services.languageDetector.detect(setLng);\n      } else {\n        setLng(lng);\n      }\n\n      return deferred;\n    }\n  }, {\n    key: \"getFixedT\",\n    value: function getFixedT(lng, ns) {\n      var _this5 = this;\n\n      var fixedT = function fixedT(key, opts) {\n        var options;\n\n        if (_typeof(opts) !== 'object') {\n          for (var _len3 = arguments.length, rest = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n            rest[_key3 - 2] = arguments[_key3];\n          }\n\n          options = _this5.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n        } else {\n          options = _objectSpread({}, opts);\n        }\n\n        options.lng = options.lng || fixedT.lng;\n        options.lngs = options.lngs || fixedT.lngs;\n        options.ns = options.ns || fixedT.ns;\n        return _this5.t(key, options);\n      };\n\n      if (typeof lng === 'string') {\n        fixedT.lng = lng;\n      } else {\n        fixedT.lngs = lng;\n      }\n\n      fixedT.ns = ns;\n      return fixedT;\n    }\n  }, {\n    key: \"t\",\n    value: function t() {\n      var _this$translator;\n\n      return this.translator && (_this$translator = this.translator).translate.apply(_this$translator, arguments);\n    }\n  }, {\n    key: \"exists\",\n    value: function exists() {\n      var _this$translator2;\n\n      return this.translator && (_this$translator2 = this.translator).exists.apply(_this$translator2, arguments);\n    }\n  }, {\n    key: \"setDefaultNamespace\",\n    value: function setDefaultNamespace(ns) {\n      this.options.defaultNS = ns;\n    }\n  }, {\n    key: \"hasLoadedNamespace\",\n    value: function hasLoadedNamespace(ns) {\n      var _this6 = this;\n\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      if (!this.isInitialized) {\n        this.logger.warn('hasLoadedNamespace: i18next was not initialized', this.languages);\n        return false;\n      }\n\n      if (!this.languages || !this.languages.length) {\n        this.logger.warn('hasLoadedNamespace: i18n.languages were undefined or empty', this.languages);\n        return false;\n      }\n\n      var lng = this.languages[0];\n      var fallbackLng = this.options ? this.options.fallbackLng : false;\n      var lastLng = this.languages[this.languages.length - 1];\n      if (lng.toLowerCase() === 'cimode') return true;\n\n      var loadNotPending = function loadNotPending(l, n) {\n        var loadState = _this6.services.backendConnector.state[\"\".concat(l, \"|\").concat(n)];\n\n        return loadState === -1 || loadState === 2;\n      };\n\n      if (options.precheck) {\n        var preResult = options.precheck(this, loadNotPending);\n        if (preResult !== undefined) return preResult;\n      }\n\n      if (this.hasResourceBundle(lng, ns)) return true;\n      if (!this.services.backendConnector.backend) return true;\n      if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n      return false;\n    }\n  }, {\n    key: \"loadNamespaces\",\n    value: function loadNamespaces(ns, callback) {\n      var _this7 = this;\n\n      var deferred = defer();\n\n      if (!this.options.ns) {\n        callback && callback();\n        return Promise.resolve();\n      }\n\n      if (typeof ns === 'string') ns = [ns];\n      ns.forEach(function (n) {\n        if (_this7.options.ns.indexOf(n) < 0) _this7.options.ns.push(n);\n      });\n      this.loadResources(function (err) {\n        deferred.resolve();\n        if (callback) callback(err);\n      });\n      return deferred;\n    }\n  }, {\n    key: \"loadLanguages\",\n    value: function loadLanguages(lngs, callback) {\n      var deferred = defer();\n      if (typeof lngs === 'string') lngs = [lngs];\n      var preloaded = this.options.preload || [];\n      var newLngs = lngs.filter(function (lng) {\n        return preloaded.indexOf(lng) < 0;\n      });\n\n      if (!newLngs.length) {\n        if (callback) callback();\n        return Promise.resolve();\n      }\n\n      this.options.preload = preloaded.concat(newLngs);\n      this.loadResources(function (err) {\n        deferred.resolve();\n        if (callback) callback(err);\n      });\n      return deferred;\n    }\n  }, {\n    key: \"dir\",\n    value: function dir(lng) {\n      if (!lng) lng = this.languages && this.languages.length > 0 ? this.languages[0] : this.language;\n      if (!lng) return 'rtl';\n      var rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ug', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam'];\n      return rtlLngs.indexOf(this.services.languageUtils.getLanguagePartFromCode(lng)) >= 0 ? 'rtl' : 'ltr';\n    }\n  }, {\n    key: \"createInstance\",\n    value: function createInstance() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var callback = arguments.length > 1 ? arguments[1] : undefined;\n      return new I18n(options, callback);\n    }\n  }, {\n    key: \"cloneInstance\",\n    value: function cloneInstance() {\n      var _this8 = this;\n\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n\n      var mergedOptions = _objectSpread({}, this.options, options, {\n        isClone: true\n      });\n\n      var clone = new I18n(mergedOptions);\n      var membersToCopy = ['store', 'services', 'language'];\n      membersToCopy.forEach(function (m) {\n        clone[m] = _this8[m];\n      });\n      clone.services = _objectSpread({}, this.services);\n      clone.services.utils = {\n        hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n      };\n      clone.translator = new Translator(clone.services, clone.options);\n      clone.translator.on('*', function (event) {\n        for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n          args[_key4 - 1] = arguments[_key4];\n        }\n\n        clone.emit.apply(clone, [event].concat(args));\n      });\n      clone.init(mergedOptions, callback);\n      clone.translator.options = clone.options;\n      clone.translator.backendConnector.services.utils = {\n        hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n      };\n      return clone;\n    }\n  }]);\n\n  return I18n;\n}(EventEmitter);\n\nvar i18next = new I18n();\n\nexport default i18next;\n", "function _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}\nexport { _typeof as default };", "import defineProperty from \"./defineProperty.js\";\nfunction _objectSpread(e) {\n  for (var r = 1; r < arguments.length; r++) {\n    var t = null != arguments[r] ? Object(arguments[r]) : {},\n      o = Object.keys(t);\n    \"function\" == typeof Object.getOwnPropertySymbols && o.push.apply(o, Object.getOwnPropertySymbols(t).filter(function (e) {\n      return Object.getOwnPropertyDescriptor(t, e).enumerable;\n    })), o.forEach(function (r) {\n      defineProperty(e, r, t[r]);\n    });\n  }\n  return e;\n}\nexport { _objectSpread as default };", "import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: !0,\n    configurable: !0,\n    writable: !0\n  }) : e[r] = t, e;\n}\nexport { _defineProperty as default };", "import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n  var i = toPrimitive(t, \"string\");\n  return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };", "import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n  if (\"object\" != _typeof(t) || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != _typeof(i)) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };", "function _classCallCheck(a, n) {\n  if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nexport { _classCallCheck as default };", "import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(e, r) {\n  for (var t = 0; t < r.length; t++) {\n    var o = r[t];\n    o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);\n  }\n}\nfunction _createClass(e, r, t) {\n  return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n    writable: !1\n  }), e;\n}\nexport { _createClass as default };", "import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nfunction _possibleConstructorReturn(t, e) {\n  if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e;\n  if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n  return assertThisInitialized(t);\n}\nexport { _possibleConstructorReturn as default };", "function _assertThisInitialized(e) {\n  if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  return e;\n}\nexport { _assertThisInitialized as default };", "function _getPrototypeOf(t) {\n  return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n    return t.__proto__ || Object.getPrototypeOf(t);\n  }, _getPrototypeOf(t);\n}\nexport { _getPrototypeOf as default };", "import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inherits(t, e) {\n  if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n  t.prototype = Object.create(e && e.prototype, {\n    constructor: {\n      value: t,\n      writable: !0,\n      configurable: !0\n    }\n  }), Object.defineProperty(t, \"prototype\", {\n    writable: !1\n  }), e && setPrototypeOf(t, e);\n}\nexport { _inherits as default };", "function _setPrototypeOf(t, e) {\n  return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };", "{\n  \"en\": {\n    \"stimulus\": {\n      \"application\": null,\n      \"admin_editor\": {\n        \"confirm_message\": \"You have made changes to this blog post, are you sure you want to proceed? This can't be undone.\",\n        \"save_button_text\": \"Save Changes\",\n        \"save_reload_button_text\": \"Save & Reload\"\n      },\n      \"clipboard_copy\": {\n        \"click_to_copy\": \"Click To Copy\"\n      },\n      \"sortable\": {\n        \"sort_order_saved\": \"Sort order saved\",\n        \"failed_to_save\": \"Failed to save sort order\"\n      },\n      \"commons\": null,\n      \"index_sort\": {\n        \"a_to_z\": \"A-Z\",\n        \"false_first\": \"false first\",\n        \"high_to_low\": \"high to low\",\n        \"low_to_high\": \"low to high\",\n        \"newest_first\": \"newest first\",\n        \"oldest_first\": \"oldest first\",\n        \"true_fist\": \"true first\",\n        \"z_to_a\": \"Z-A\"\n      },\n      \"web_awesome\": {\n        \"confirm\": {\n          \"cancel\": \"Cancel\",\n          \"submit\": \"Proceed\",\n          \"title\": \"Are you sure?\",\n          \"type_to_confirm\": \"Type %{word} to confirm\"\n        }\n      },\n      \"simonwep_pickr\": {\n        \"aria:btncancel\": \"cancel and close\",\n        \"aria:btnclear\": \"clear and close\",\n        \"aria:btnsave\": \"save and close\",\n        \"aria:hue\": \"hue selection slider\",\n        \"aria:input\": \"color input field\",\n        \"aria:opacity\": \"selection slider\",\n        \"aria:palette\": \"color selection area\",\n        \"btn:cancel\": \"Cancel\",\n        \"btn:clear\": \"Clear\",\n        \"btn:lastcolor\": \"use previous color\",\n        \"btn:save\": \"Save\",\n        \"btn:swatch\": \"color swatch\",\n        \"btn:toggle\": \"toggle color picker dialog\",\n        \"ui:dialog\": \"color picker dialog\"\n      },\n      \"password_validation\": {\n        \"min_length\": \"Must be at least 12 characters long\",\n        \"uppercase\": \"Must contain at least one uppercase letter\",\n        \"lowercase\": \"Must contain at least one lowercase letter\",\n        \"number\": \"Must contain at least one number\",\n        \"special\": \"Must contain at least one special character\"\n      },\n      \"shrine_image_uploads\": {\n        \"limit_exceeded\": \"You can only upload up to %{limit} images\",\n        \"file_too_large\": \"File size must be less than 10 MB\",\n        \"invalid_file_type\": \"Only JPEG, PNG, WebP, and GIF images are allowed\",\n        \"upload_failed\": \"Failed to upload image\"\n      },\n      \"asset_upload\": {\n        \"file_rejected\": \"File \\\"%{name}\\\" was rejected: %{error}\",\n        \"error_adding_file\": \"Error adding file: %{error}\",\n        \"preparing_upload\": \"Preparing upload...\",\n        \"uploading\": \"Uploading... (%{uploaded} / %{total})\",\n        \"processing\": \"Processing...\",\n        \"upload_completed\": \"Upload completed successfully\",\n        \"upload_failed\": \"Upload failed - %{error}\",\n        \"failed_to_create\": \"Failed to save file: %{error}\",\n        \"created_as\": \"Added as %{type}\",\n        \"batch_summary\": \"Added %{summary}\",\n        \"upload_failed_count\": \"%{count} files failed to upload\",\n        \"types\": {\n          \"image_one\": \"%{count} Image\",\n          \"image_other\": \"%{count} Images\",\n          \"video_one\": \"%{count} Course Video\",\n          \"video_other\": \"%{count} Course Videos\",\n          \"audio_file_one\": \"%{count} Audio File\",\n          \"audio_file_other\": \"%{count} Audio Files\",\n          \"font_one\": \"%{count} Font\",\n          \"font_other\": \"%{count} Fonts\",\n          \"download_one\": \"%{count} File\",\n          \"download_other\": \"%{count} Files\"\n        },\n        \"type_names\": {\n          \"image\": \"Image\",\n          \"video\": \"Course Video\",\n          \"audio_file\": \"Audio File\",\n          \"font\": \"Font\",\n          \"download\": \"File\"\n        },\n        \"uploading_generic\": \"Uploading...\",\n        \"file_size\": \"%{size} %{unit}\",\n        \"units\": {\n          \"bytes\": \"Bytes\",\n          \"kb\": \"KB\",\n          \"mb\": \"MB\",\n          \"gb\": \"GB\",\n          \"tb\": \"TB\"\n        }\n      },\n      \"products\": {\n        \"create_dialog\": {\n          \"interval\": {\n            \"one\": \"%{unit}\",\n            \"other\": \"%{count} %{unit}\"\n          },\n          \"units\": {\n            \"days\": {\n              \"one\": \"day\",\n              \"other\": \"days\"\n            },\n            \"weeks\": {\n              \"one\": \"week\",\n              \"other\": \"weeks\"\n            },\n            \"months\": {\n              \"one\": \"month\",\n              \"other\": \"months\"\n            },\n            \"quarters\": {\n              \"one\": \"quarter\",\n              \"other\": \"quarters\"\n            },\n            \"years\": {\n              \"one\": \"year\",\n              \"other\": \"years\"\n            }\n          },\n          \"summary\": {\n            \"subscription\": \"Customers pay %{amount} every %{interval} until they cancel.\",\n            \"payment_plan\": {\n              \"one\": \"Customers pay %{amount} every %{interval} for %{count} payment (%{total} total).\",\n              \"other\": \"Customers pay %{amount} every %{interval} for %{count} payments (%{total} total).\"\n            }\n          },\n          \"schedule\": {\n            \"first_charge\": \"Today \u00B7 %{date}\",\n            \"payment\": \"Payment %{number} \u00B7 %{date}\",\n            \"subscription_tail\": \"Every %{interval} until canceled\",\n            \"payment_plan_tail\": \"Paid in full \u2014 billing stops\"\n          }\n        }\n      }\n    },\n    \"domains\": {\n      \"wizard\": {\n        \"continue_button\": \"Continue with %{domain}\"\n      }\n    },\n    \"trix\": {\n      \"GB\": \"GB\",\n      \"KB\": \"KB\",\n      \"MB\": \"MB\",\n      \"PB\": \"PB\",\n      \"TB\": \"TB\",\n      \"attachFiles\": \"Attach Files\",\n      \"bold\": \"Bold\",\n      \"bullets\": \"Bullets\",\n      \"byte\": \"Byte\",\n      \"bytes\": \"Bytes\",\n      \"captionPlaceholder\": \"Add a caption\u2026\",\n      \"code\": \"Code\",\n      \"heading1\": \"Heading\",\n      \"indent\": \"Increase Level\",\n      \"italic\": \"Italic\",\n      \"link\": \"Link\",\n      \"numbers\": \"Numbers\",\n      \"outdent\": \"Decrease Level\",\n      \"quote\": \"Quote\",\n      \"redo\": \"Redo\",\n      \"remove\": \"Remove\",\n      \"strike\": \"Strikethrough\",\n      \"undo\": \"Undo\",\n      \"unlink\": \"Unlink\",\n      \"url\": \"URL\",\n      \"urlPlaceholder\": \"Enter a URL\u2026\"\n    },\n    \"activity_chart_controller\": {\n      \"commissions\": \"Commissions\",\n      \"pageviews\": \"Pageviews\",\n      \"trial_starts\": \"Trial Starts\",\n      \"optins\": \"Opt-ins\",\n      \"conversions\": \"Conversions\"\n    },\n    \"unsaved_changes_controller\": {\n      \"haveChanges\": \"You've made changes that haven't been saved. Clicking 'OK' will discard them. Do you want to continue?\",\n      \"noChanges\": \"No Unsaved Changes\"\n    },\n    \"direct_image_uploads_controller\": {\n      \"limit_exceeded\": \"You can only upload up to %{limit} files\",\n      \"too_large\": \"File size must be less than 10 MB\"\n    },\n    \"discounts\": {\n      \"amount_required\": \"Amount is required\",\n      \"percent_required\": \"Percent is required\"\n    },\n    \"notifications\": {\n      \"push_notification_settings\": {\n        \"title\": \"Push Notifications\",\n        \"checking\": \"Checking...\",\n        \"checking_status\": \"Checking notification status...\",\n        \"open_settings\": \"Open Notification Settings\",\n        \"send_test_noticed\": \"Send Test Push (Noticed)\",\n        \"send_test_direct\": \"Send Test Push (Direct)\",\n        \"no_devices_or_app_id\": \"No devices found or native app config not configured\",\n        \"message\": {\n          \"device_blocked\": \"Notifications are blocked on this device. Enable them in your device settings to receive notifications.\",\n          \"app_disabled\": \"Push notifications are turned off. Turn them on to receive updates.\",\n          \"enabled\": \"Push notifications are enabled. You'll receive notifications on this device.\",\n          \"not_determined\": \"Allow notifications to stay updated.\",\n          \"unknown\": \"Unable to determine notification status.\"\n        }\n      }\n    }\n  },\n  \"es\": {\n    \"stimulus\": {\n      \"admin_editor\": {\n        \"confirm_message\": \"Has realizado cambios en esta publicaci\u00F3n del blog, \u00BFest\u00E1s seguro de que deseas continuar? Esto no se puede deshacer.\",\n        \"save_button_text\": \"Guardar Cambios\",\n        \"save_reload_button_text\": \"Guardar y Recargar\"\n      },\n      \"clipboard_copy\": {\n        \"click_to_copy\": \"Haz clic para copiar\"\n      },\n      \"sortable\": {\n        \"sort_order_saved\": \"Orden de clasificaci\u00F3n guardado\",\n        \"failed_to_save\": \"Error al guardar el orden de clasificaci\u00F3n\"\n      },\n      \"index_sort\": {\n        \"a_to_z\": \"A-Z\",\n        \"false_first\": \"falso primero\",\n        \"high_to_low\": \"de alto a bajo\",\n        \"low_to_high\": \"bajo a alto\",\n        \"newest_first\": \"el m\u00E1s reciente primero\",\n        \"oldest_first\": \"los m\u00E1s antiguos primeros\",\n        \"true_fist\": \"verdadero primero\",\n        \"z_to_a\": \"Z-A\"\n      },\n      \"web_awesome\": {\n        \"confirm\": {\n          \"cancel\": \"Cancelar\",\n          \"submit\": \"Proceder\",\n          \"title\": \"\u00BFEst\u00E1s seguro?\",\n          \"type_to_confirm\": \"Escribe %{word} para confirmar\"\n        }\n      },\n      \"simonwep_pickr\": {\n        \"aria:btncancel\": \"cancelar y cerrar\",\n        \"aria:btnclear\": \"limpiar y cerrar\",\n        \"aria:btnsave\": \"guardar y cerrar\",\n        \"aria:hue\": \"control de selecci\u00F3n de tono\",\n        \"aria:input\": \"campo de entrada de color\",\n        \"aria:opacity\": \"control de selecci\u00F3n\",\n        \"aria:palette\": \"\u00E1rea de selecci\u00F3n de color\",\n        \"btn:cancel\": \"Cancelar\",\n        \"btn:clear\": \"Borrar\",\n        \"btn:lastcolor\": \"usar el color anterior\",\n        \"btn:save\": \"Guardar\",\n        \"btn:swatch\": \"muestra de color\",\n        \"btn:toggle\": \"cambiar al cuadro de di\u00E1logo del selector de color\",\n        \"ui:dialog\": \"cuadro de di\u00E1logo selector de color\"\n      },\n      \"password_validation\": {\n        \"min_length\": \"Debe tener al menos 12 caracteres\",\n        \"uppercase\": \"Debe contener al menos una letra may\u00FAscula\",\n        \"lowercase\": \"Debe contener al menos una letra min\u00FAscula\",\n        \"number\": \"Debe contener al menos un n\u00FAmero\",\n        \"special\": \"Debe contener al menos un car\u00E1cter especial\"\n      }\n    },\n    \"domains\": {\n      \"wizard\": {\n        \"continue_button\": \"Continuar con %{domain}\"\n      }\n    },\n    \"trix\": {\n      \"GB\": \"GB\",\n      \"KB\": \"KB\",\n      \"MB\": \"MB\",\n      \"PB\": \"PB\",\n      \"TB\": \"TB\",\n      \"attachFiles\": \"Adjuntar archivos\",\n      \"bold\": \"Oscuro\",\n      \"bullets\": \"Vi\u00F1etas\",\n      \"byte\": \"Byte\",\n      \"bytes\": \"Bytes\",\n      \"captionPlaceholder\": \"Agrega un subt\u00EDtulo\u2026\",\n      \"code\": \"C\u00F3digo\",\n      \"heading1\": \"T\u00EDtulo\",\n      \"indent\": \"Aumentar nivel\",\n      \"italic\": \"It\u00E1licas\",\n      \"link\": \"Enlace\",\n      \"numbers\": \"N\u00FAmeros\",\n      \"outdent\": \"Reducir nivel\",\n      \"quote\": \"Citar\",\n      \"redo\": \"Rehacer\",\n      \"remove\": \"Quitar\",\n      \"strike\": \"Tachado\",\n      \"undo\": \"Deshacer\",\n      \"unlink\": \"Desconectar\",\n      \"url\": \"URL\",\n      \"urlPlaceholder\": \"Introducir URL...\"\n    },\n    \"activity_chart_controller\": {\n      \"commissions\": \"Comisiones\",\n      \"pageviews\": \"Vistas de p\u00E1gina\",\n      \"trial_starts\": \"Inicios de prueba\",\n      \"conversions\": \"Conversiones\"\n    },\n    \"unsaved_changes_controller\": {\n      \"haveChanges\": \"Tiene cambios no guardados, por favor confirme.\",\n      \"noChanges\": \"Sin cambios no guardados\"\n    },\n    \"direct_image_uploads_controller\": {\n      \"limit_exceeded\": \"Solo puede subir hasta %{limit} archivos\",\n      \"too_large\": \"El tama\u00F1o del archivo debe ser menor a 10 MB\"\n    },\n    \"discounts\": {\n      \"amount_required\": \"El monto es requerido\",\n      \"percent_required\": \"El porcentaje es requerido\"\n    }\n  },\n  \"ja\": {\n    \"stimulus\": {\n      \"admin_editor\": {\n        \"confirm_message\": \"\u30D6\u30ED\u30B0\u6295\u7A3F\u306B\u5909\u66F4\u3092\u52A0\u3048\u307E\u3057\u305F\u3002\u7D9A\u884C\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B\uFF1F\u3053\u306E\u64CD\u4F5C\u306F\u5143\u306B\u623B\u305B\u307E\u305B\u3093\u3002\",\n        \"save_button_text\": \"\u5909\u66F4\u3092\u4FDD\u5B58\",\n        \"save_reload_button_text\": \"\u4FDD\u5B58\u3057\u3066\u518D\u8AAD\u307F\u8FBC\u307F\"\n      },\n      \"clipboard_copy\": {\n        \"click_to_copy\": \"\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u30B3\u30D4\u30FC\"\n      },\n      \"sortable\": {\n        \"sort_order_saved\": \"\u4E26\u3073\u9806\u3092\u4FDD\u5B58\u3057\u307E\u3057\u305F\",\n        \"failed_to_save\": \"\u4E26\u3073\u9806\u306E\u4FDD\u5B58\u306B\u5931\u6557\u3057\u307E\u3057\u305F\"\n      },\n      \"index_sort\": {\n        \"a_to_z\": \"A-Z\",\n        \"false_first\": \"false\u512A\u5148\",\n        \"high_to_low\": \"\u9AD8\u3044\u9806\",\n        \"low_to_high\": \"\u4F4E\u3044\u9806\",\n        \"newest_first\": \"\u65B0\u3057\u3044\u9806\",\n        \"oldest_first\": \"\u53E4\u3044\u9806\",\n        \"true_fist\": \"true\u512A\u5148\",\n        \"z_to_a\": \"Z-A\"\n      },\n      \"web_awesome\": {\n        \"confirm\": {\n          \"cancel\": \"\u30AD\u30E3\u30F3\u30BB\u30EB\",\n          \"submit\": \"\u7D9A\u884C\",\n          \"title\": \"\u78BA\u8A8D\",\n          \"type_to_confirm\": \"\u78BA\u8A8D\u3059\u308B\u306B\u306F%{word}\u3068\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\"\n        }\n      },\n      \"simonwep_pickr\": {\n        \"aria:btncancel\": \"\u30AD\u30E3\u30F3\u30BB\u30EB\u3057\u3066\u9589\u3058\u308B\",\n        \"aria:btnclear\": \"\u30AF\u30EA\u30A2\u3057\u3066\u9589\u3058\u308B\",\n        \"aria:btnsave\": \"\u4FDD\u5B58\u3057\u3066\u9589\u3058\u308B\",\n        \"aria:hue\": \"\u8272\u76F8\u9078\u629E\u30B9\u30E9\u30A4\u30C0\u30FC\",\n        \"aria:input\": \"\u8272\u5165\u529B\u30D5\u30A3\u30FC\u30EB\u30C9\",\n        \"aria:opacity\": \"\u9078\u629E\u30B9\u30E9\u30A4\u30C0\u30FC\",\n        \"aria:palette\": \"\u8272\u9078\u629E\u30A8\u30EA\u30A2\",\n        \"btn:cancel\": \"\u30AD\u30E3\u30F3\u30BB\u30EB\",\n        \"btn:clear\": \"\u30AF\u30EA\u30A2\",\n        \"btn:lastcolor\": \"\u524D\u56DE\u306E\u8272\u3092\u4F7F\u7528\",\n        \"btn:save\": \"\u4FDD\u5B58\",\n        \"btn:swatch\": \"\u30AB\u30E9\u30FC\u30B9\u30A6\u30A9\u30C3\u30C1\",\n        \"btn:toggle\": \"\u30AB\u30E9\u30FC\u30D4\u30C3\u30AB\u30FC\u30C0\u30A4\u30A2\u30ED\u30B0\u306E\u5207\u308A\u66FF\u3048\",\n        \"ui:dialog\": \"\u30AB\u30E9\u30FC\u30D4\u30C3\u30AB\u30FC\u30C0\u30A4\u30A2\u30ED\u30B0\"\n      },\n      \"password_validation\": {\n        \"min_length\": \"12\u6587\u5B57\u4EE5\u4E0A\u3067\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\",\n        \"uppercase\": \"\u5C11\u306A\u304F\u3068\u30821\u3064\u306E\u5927\u6587\u5B57\u3092\u542B\u3080\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\",\n        \"lowercase\": \"\u5C11\u306A\u304F\u3068\u30821\u3064\u306E\u5C0F\u6587\u5B57\u3092\u542B\u3080\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\",\n        \"number\": \"\u5C11\u306A\u304F\u3068\u30821\u3064\u306E\u6570\u5B57\u3092\u542B\u3080\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\",\n        \"special\": \"\u5C11\u306A\u304F\u3068\u30821\u3064\u306E\u7279\u6B8A\u6587\u5B57\u3092\u542B\u3080\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\"\n      },\n      \"shrine_image_uploads\": {\n        \"limit_exceeded\": \"\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3067\u304D\u308B\u753B\u50CF\u306F\u6700\u5927%{limit}\u679A\u3067\u3059\",\n        \"file_too_large\": \"\u30D5\u30A1\u30A4\u30EB\u30B5\u30A4\u30BA\u306F10MB\u672A\u6E80\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\",\n        \"invalid_file_type\": \"JPEG\u3001PNG\u3001WebP\u3001GIF\u753B\u50CF\u306E\u307F\u8A31\u53EF\u3055\u308C\u3066\u3044\u307E\u3059\",\n        \"upload_failed\": \"\u753B\u50CF\u306E\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u306B\u5931\u6557\u3057\u307E\u3057\u305F\"\n      },\n      \"asset_upload\": {\n        \"file_rejected\": \"\u30D5\u30A1\u30A4\u30EB\u300C%{name}\u300D\u306F\u62D2\u5426\u3055\u308C\u307E\u3057\u305F: %{error}\",\n        \"error_adding_file\": \"\u30D5\u30A1\u30A4\u30EB\u8FFD\u52A0\u30A8\u30E9\u30FC: %{error}\",\n        \"preparing_upload\": \"\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u6E96\u5099\u4E2D...\",\n        \"uploading\": \"\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u4E2D... (%{uploaded} / %{total})\",\n        \"processing\": \"\u51E6\u7406\u4E2D...\",\n        \"upload_completed\": \"\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u304C\u5B8C\u4E86\u3057\u307E\u3057\u305F\",\n        \"upload_failed\": \"\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u5931\u6557 - %{error}\",\n        \"failed_to_create\": \"\u30D5\u30A1\u30A4\u30EB\u306E\u4FDD\u5B58\u306B\u5931\u6557\u3057\u307E\u3057\u305F: %{error}\",\n        \"created_as\": \"%{type}\u3068\u3057\u3066\u8FFD\u52A0\u3055\u308C\u307E\u3057\u305F\",\n        \"batch_summary\": \"%{summary}\u3092\u8FFD\u52A0\u3057\u307E\u3057\u305F\",\n        \"upload_failed_count\": \"%{count}\u4EF6\u306E\u30D5\u30A1\u30A4\u30EB\u306E\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u306B\u5931\u6557\u3057\u307E\u3057\u305F\",\n        \"types\": {\n          \"image_one\": \"\u753B\u50CF%{count}\u4EF6\",\n          \"image_other\": \"\u753B\u50CF%{count}\u4EF6\",\n          \"video_one\": \"\u30B3\u30FC\u30B9\u30D3\u30C7\u30AA%{count}\u4EF6\",\n          \"video_other\": \"\u30B3\u30FC\u30B9\u30D3\u30C7\u30AA%{count}\u4EF6\",\n          \"audio_file_one\": \"\u30AA\u30FC\u30C7\u30A3\u30AA\u30D5\u30A1\u30A4\u30EB%{count}\u4EF6\",\n          \"audio_file_other\": \"\u30AA\u30FC\u30C7\u30A3\u30AA\u30D5\u30A1\u30A4\u30EB%{count}\u4EF6\",\n          \"font_one\": \"\u30D5\u30A9\u30F3\u30C8%{count}\u4EF6\",\n          \"font_other\": \"\u30D5\u30A9\u30F3\u30C8%{count}\u4EF6\",\n          \"download_one\": \"\u30D5\u30A1\u30A4\u30EB%{count}\u4EF6\",\n          \"download_other\": \"\u30D5\u30A1\u30A4\u30EB%{count}\u4EF6\"\n        },\n        \"type_names\": {\n          \"image\": \"\u753B\u50CF\",\n          \"video\": \"\u30B3\u30FC\u30B9\u30D3\u30C7\u30AA\",\n          \"audio_file\": \"\u30AA\u30FC\u30C7\u30A3\u30AA\u30D5\u30A1\u30A4\u30EB\",\n          \"font\": \"\u30D5\u30A9\u30F3\u30C8\",\n          \"download\": \"\u30D5\u30A1\u30A4\u30EB\"\n        },\n        \"uploading_generic\": \"\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u4E2D...\",\n        \"file_size\": \"%{size} %{unit}\",\n        \"units\": {\n          \"bytes\": \"\u30D0\u30A4\u30C8\",\n          \"kb\": \"KB\",\n          \"mb\": \"MB\",\n          \"gb\": \"GB\",\n          \"tb\": \"TB\"\n        }\n      },\n      \"products\": {\n        \"create_dialog\": {\n          \"interval\": {\n            \"one\": \"%{unit}\",\n            \"other\": \"%{count}%{unit}\"\n          },\n          \"units\": {\n            \"days\": {\n              \"one\": \"\u65E5\",\n              \"other\": \"\u65E5\"\n            },\n            \"weeks\": {\n              \"one\": \"\u9031\",\n              \"other\": \"\u9031\u9593\"\n            },\n            \"months\": {\n              \"one\": \"\u6708\",\n              \"other\": \"\u304B\u6708\"\n            },\n            \"quarters\": {\n              \"one\": \"\u56DB\u534A\u671F\",\n              \"other\": \"\u56DB\u534A\u671F\"\n            },\n            \"years\": {\n              \"one\": \"\u5E74\",\n              \"other\": \"\u5E74\"\n            }\n          },\n          \"summary\": {\n            \"subscription\": \"\u9867\u5BA2\u306F\u30AD\u30E3\u30F3\u30BB\u30EB\u3059\u308B\u307E\u3067%{interval}\u3054\u3068\u306B%{amount}\u3092\u652F\u6255\u3044\u307E\u3059\u3002\",\n            \"payment_plan\": {\n              \"one\": \"\u9867\u5BA2\u306F%{interval}\u3054\u3068\u306B%{amount}\u3092%{count}\u56DE\u652F\u6255\u3044\u307E\u3059\uFF08\u5408\u8A08%{total}\uFF09\u3002\",\n              \"other\": \"\u9867\u5BA2\u306F%{interval}\u3054\u3068\u306B%{amount}\u3092%{count}\u56DE\u652F\u6255\u3044\u307E\u3059\uFF08\u5408\u8A08%{total}\uFF09\u3002\"\n            }\n          },\n          \"schedule\": {\n            \"first_charge\": \"\u672C\u65E5 \u00B7 %{date}\",\n            \"payment\": \"\u652F\u6255\u3044%{number} \u00B7 %{date}\",\n            \"subscription_tail\": \"\u30AD\u30E3\u30F3\u30BB\u30EB\u3055\u308C\u308B\u307E\u3067%{interval}\u3054\u3068\",\n            \"payment_plan_tail\": \"\u5168\u984D\u652F\u6255\u3044\u5B8C\u4E86 \u2014 \u8ACB\u6C42\u7D42\u4E86\"\n          }\n        }\n      }\n    },\n    \"domains\": {\n      \"wizard\": {\n        \"continue_button\": \"%{domain}\u3067\u7D9A\u884C\"\n      }\n    },\n    \"trix\": {\n      \"GB\": \"GB\",\n      \"KB\": \"KB\",\n      \"MB\": \"MB\",\n      \"PB\": \"PB\",\n      \"TB\": \"TB\",\n      \"attachFiles\": \"\u30D5\u30A1\u30A4\u30EB\u3092\u6DFB\u4ED8\",\n      \"bold\": \"\u592A\u5B57\",\n      \"bullets\": \"\u7B87\u6761\u66F8\u304D\",\n      \"byte\": \"\u30D0\u30A4\u30C8\",\n      \"bytes\": \"\u30D0\u30A4\u30C8\",\n      \"captionPlaceholder\": \"\u30AD\u30E3\u30D7\u30B7\u30E7\u30F3\u3092\u8FFD\u52A0...\",\n      \"code\": \"\u30B3\u30FC\u30C9\",\n      \"heading1\": \"\u898B\u51FA\u3057\",\n      \"indent\": \"\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u5897\u3084\u3059\",\n      \"italic\": \"\u659C\u4F53\",\n      \"link\": \"\u30EA\u30F3\u30AF\",\n      \"numbers\": \"\u756A\u53F7\u4ED8\u304D\u30EA\u30B9\u30C8\",\n      \"outdent\": \"\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u6E1B\u3089\u3059\",\n      \"quote\": \"\u5F15\u7528\",\n      \"redo\": \"\u3084\u308A\u76F4\u3057\",\n      \"remove\": \"\u524A\u9664\",\n      \"strike\": \"\u53D6\u308A\u6D88\u3057\u7DDA\",\n      \"undo\": \"\u5143\u306B\u623B\u3059\",\n      \"unlink\": \"\u30EA\u30F3\u30AF\u89E3\u9664\",\n      \"url\": \"URL\",\n      \"urlPlaceholder\": \"URL\u3092\u5165\u529B...\"\n    },\n    \"activity_chart_controller\": {\n      \"commissions\": \"\u30B3\u30DF\u30C3\u30B7\u30E7\u30F3\",\n      \"pageviews\": \"\u30DA\u30FC\u30B8\u30D3\u30E5\u30FC\",\n      \"trial_starts\": \"\u30C8\u30E9\u30A4\u30A2\u30EB\u958B\u59CB\",\n      \"optins\": \"\u30AA\u30D7\u30C8\u30A4\u30F3\",\n      \"conversions\": \"\u30B3\u30F3\u30D0\u30FC\u30B8\u30E7\u30F3\"\n    },\n    \"unsaved_changes_controller\": {\n      \"haveChanges\": \"\u4FDD\u5B58\u3055\u308C\u3066\u3044\u306A\u3044\u5909\u66F4\u304C\u3042\u308A\u307E\u3059\u3002'OK'\u3092\u30AF\u30EA\u30C3\u30AF\u3059\u308B\u3068\u7834\u68C4\u3055\u308C\u307E\u3059\u3002\u7D9A\u884C\u3057\u307E\u3059\u304B\uFF1F\",\n      \"noChanges\": \"\u672A\u4FDD\u5B58\u306E\u5909\u66F4\u306F\u3042\u308A\u307E\u305B\u3093\"\n    },\n    \"direct_image_uploads_controller\": {\n      \"limit_exceeded\": \"\u6700\u5927%{limit}\u30D5\u30A1\u30A4\u30EB\u307E\u3067\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3067\u304D\u307E\u3059\",\n      \"too_large\": \"\u30D5\u30A1\u30A4\u30EB\u30B5\u30A4\u30BA\u306F10MB\u672A\u6E80\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\"\n    },\n    \"discounts\": {\n      \"amount_required\": \"\u91D1\u984D\u306F\u5FC5\u9808\u3067\u3059\",\n      \"percent_required\": \"\u30D1\u30FC\u30BB\u30F3\u30C8\u306F\u5FC5\u9808\u3067\u3059\"\n    },\n    \"notifications\": {\n      \"push_notification_settings\": {\n        \"title\": \"\u30D7\u30C3\u30B7\u30E5\u901A\u77E5\",\n        \"checking\": \"\u78BA\u8A8D\u4E2D...\",\n        \"checking_status\": \"\u901A\u77E5\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u78BA\u8A8D\u4E2D...\",\n        \"open_settings\": \"\u901A\u77E5\u8A2D\u5B9A\u3092\u958B\u304F\",\n        \"send_test_noticed\": \"\u30C6\u30B9\u30C8\u30D7\u30C3\u30B7\u30E5\u3092\u9001\u4FE1\uFF08Noticed\uFF09\",\n        \"send_test_direct\": \"\u30C6\u30B9\u30C8\u30D7\u30C3\u30B7\u30E5\u3092\u9001\u4FE1\uFF08\u76F4\u63A5\uFF09\",\n        \"no_devices_or_app_id\": \"\u30C7\u30D0\u30A4\u30B9\u304C\u898B\u3064\u304B\u3089\u306A\u3044\u304B\u3001\u30CD\u30A4\u30C6\u30A3\u30D6\u30A2\u30D7\u30EA\u8A2D\u5B9A\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\",\n        \"message\": {\n          \"device_blocked\": \"\u3053\u306E\u30C7\u30D0\u30A4\u30B9\u3067\u901A\u77E5\u304C\u30D6\u30ED\u30C3\u30AF\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u901A\u77E5\u3092\u53D7\u3051\u53D6\u308B\u306B\u306F\u3001\u30C7\u30D0\u30A4\u30B9\u306E\u8A2D\u5B9A\u3067\u6709\u52B9\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002\",\n          \"app_disabled\": \"\u30D7\u30C3\u30B7\u30E5\u901A\u77E5\u306F\u30AA\u30D5\u3067\u3059\u3002\u6700\u65B0\u60C5\u5831\u3092\u53D7\u3051\u53D6\u308B\u306B\u306F\u30AA\u30F3\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002\",\n          \"enabled\": \"\u30D7\u30C3\u30B7\u30E5\u901A\u77E5\u304C\u6709\u52B9\u3067\u3059\u3002\u3053\u306E\u30C7\u30D0\u30A4\u30B9\u3067\u901A\u77E5\u3092\u53D7\u3051\u53D6\u308A\u307E\u3059\u3002\",\n          \"not_determined\": \"\u6700\u65B0\u60C5\u5831\u3092\u53D7\u3051\u53D6\u308B\u306B\u306F\u901A\u77E5\u3092\u8A31\u53EF\u3057\u3066\u304F\u3060\u3055\u3044\u3002\",\n          \"unknown\": \"\u901A\u77E5\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u78BA\u8A8D\u3067\u304D\u307E\u305B\u3093\u3002\"\n        }\n      }\n    }\n  }\n}\n", "/*! js-cookie v3.0.7 | MIT */\nfunction assign (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n    for (var key in source) {\n      if (key === '__proto__') continue\n      target[key] = source[key];\n    }\n  }\n  return target\n}\n\nvar defaultConverter = {\n  read: function (value) {\n    if (value[0] === '\"') {\n      value = value.slice(1, -1);\n    }\n    return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n  },\n  write: function (value) {\n    return encodeURIComponent(value).replace(\n      /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n      decodeURIComponent\n    )\n  }\n};\n\nfunction init(converter, defaultAttributes) {\n  function set(name, value, attributes) {\n    if (typeof document === 'undefined') {\n      return\n    }\n\n    attributes = assign({}, defaultAttributes, attributes);\n\n    if (typeof attributes.expires === 'number') {\n      attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n    }\n    if (attributes.expires) {\n      attributes.expires = attributes.expires.toUTCString();\n    }\n\n    name = encodeURIComponent(name)\n      .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n      .replace(/[()]/g, escape);\n\n    var stringifiedAttributes = '';\n    for (var attributeName in attributes) {\n      if (!attributes[attributeName]) {\n        continue\n      }\n\n      stringifiedAttributes += '; ' + attributeName;\n\n      if (attributes[attributeName] === true) {\n        continue\n      }\n\n      // Considers RFC 6265 section 5.2:\n      // ...\n      // 3.  If the remaining unparsed-attributes contains a %x3B (\";\")\n      //     character:\n      // Consume the characters of the unparsed-attributes up to,\n      // not including, the first %x3B (\";\") character.\n      // ...\n      stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n    }\n\n    return (document.cookie =\n      name + '=' + converter.write(value, name) + stringifiedAttributes)\n  }\n\n  function get(name) {\n    if (typeof document === 'undefined' || (arguments.length && !name)) {\n      return\n    }\n\n    // To prevent the for loop in the first place assign an empty array\n    // in case there are no cookies at all.\n    var cookies = document.cookie ? document.cookie.split('; ') : [];\n    var jar = {};\n    for (var i = 0; i < cookies.length; i++) {\n      var parts = cookies[i].split('=');\n      var value = parts.slice(1).join('=');\n\n      try {\n        var found = decodeURIComponent(parts[0]);\n        if (!(found in jar)) jar[found] = converter.read(value, found);\n        if (name === found) {\n          break\n        }\n      } catch {\n        // Do nothing...\n      }\n    }\n\n    return name ? jar[name] : jar\n  }\n\n  return Object.create(\n    {\n      set,\n      get,\n      remove: function (name, attributes) {\n        set(\n          name,\n          '',\n          assign({}, attributes, {\n            expires: -1\n          })\n        );\n      },\n      withAttributes: function (attributes) {\n        return init(this.converter, assign({}, this.attributes, attributes))\n      },\n      withConverter: function (converter) {\n        return init(assign({}, this.converter, converter), this.attributes)\n      }\n    },\n    {\n      attributes: { value: Object.freeze(defaultAttributes) },\n      converter: { value: Object.freeze(converter) }\n    }\n  )\n}\n\nvar api = init(defaultConverter, { path: '/' });\n\nexport { api as default };\n", "import ApplicationController from '../application_controller'\n\nconst COOKIE_NAME = 'current_affiliate_campaign'\nconst COOKIE_MAX_AGE = 30 * 24 * 60 * 60 // 30 days in seconds\n\nexport default class extends ApplicationController {\n  static values = {\n    campaignUrls: Object,\n    campaignIds: Object,\n    assetUrls: Object,\n  }\n\n  static targets = ['code', 'campaign', 'fullUrl', 'socials', 'assetUrl', 'previewUrl']\n\n  connect() {\n    this.userInitiated = false\n    this.restoreCampaignSelection()\n    this.updateUrl()\n    this.userInitiated = true\n  }\n\n  updateUrl() {\n    const affiliateCode = this.codeTarget.value\n    const selectedCampaign = this.campaignTarget.value\n    const campaignUrl = this.campaignUrlsValue[selectedCampaign]\n    const assetUrl = this.assetUrlsValue[selectedCampaign]\n\n    if (this.userInitiated) {\n      this.saveCampaignSelection(selectedCampaign)\n    }\n\n    if (campaignUrl) {\n      const resultingUrl = `${campaignUrl}?aff=${affiliateCode}`\n      this.fullUrlTarget.setAttribute('value', resultingUrl)\n      this.previewUrlTarget.textContent = resultingUrl\n\n      this.socialsTargets.forEach((social) => {\n        social.setAttribute('data-share-url-param', resultingUrl)\n      })\n    }\n\n    if (assetUrl) {\n      this.assetUrlTarget.href = assetUrl\n      this.assetUrlTarget.classList.remove('hidden')\n    } else {\n      this.assetUrlTarget.classList.add('hidden')\n    }\n  }\n\n  saveCampaignSelection(campaignName) {\n    const campaignId = this.campaignIdsValue[campaignName]\n    if (campaignId == null) return\n\n    const secure = location.protocol === 'https:' ? '; Secure' : ''\n    document.cookie = `${COOKIE_NAME}=${campaignId}; path=/customers; max-age=${COOKIE_MAX_AGE}; SameSite=Lax${secure}`\n  }\n\n  restoreCampaignSelection() {\n    const savedId = this.readCookie(COOKIE_NAME)\n    if (!savedId) return\n\n    const entry = Object.entries(this.campaignIdsValue).find(([, id]) => String(id) === savedId)\n    const campaignName = entry?.[0]\n\n    if (!campaignName) return\n\n    const tomselect = this.campaignTarget.tomselect\n    if (tomselect) {\n      tomselect.setValue(campaignName, true)\n    } else {\n      this.campaignTarget.value = campaignName\n    }\n  }\n\n  readCookie(name) {\n    const match = document.cookie.match(new RegExp(`(?:^|; )${name}=([^;]*)`))\n    return match ? decodeURIComponent(match[1]) : null\n  }\n}\n", "import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n  static targets = ['country', 'region']\n  static values = { searchUrl: String }\n\n  updateRegionUrlValue(event) {\n    const countryId = event.target.value\n    $(this.regionTarget).val(null).trigger('change')\n    const superSelectController = this.application.getControllerForElementAndIdentifier(\n      this.regionTarget.parentElement,\n      'fields--super-select'\n    )\n    superSelectController.searchUrlValue = this.searchUrlValue.replace(/\\d+/g, countryId)\n  }\n\n  updateRegionUrlValueWithIso2(event) {\n    const countryId = event.target.options[event.target.selectedIndex].dataset.id\n    $(this.regionTarget).val(null).trigger('change')\n    const superSelectController = this.application.getControllerForElementAndIdentifier(\n      this.regionTarget.parentElement,\n      'fields--super-select'\n    )\n    superSelectController.searchUrlValue = this.searchUrlValue.replace(/\\d+/g, countryId)\n  }\n}\n", "import ApplicationController from '../application_controller.js'\nimport intlTelInput from 'intl-tel-input'\n\nexport default class extends ApplicationController {\n  static targets = ['field']\n  static values = {\n    localizedCountries: { type: Object, default: {} },\n    separateDialCode: { type: Boolean, default: false },\n    initialCountry: { type: String, default: '' },\n  }\n\n  connect() {\n    this.initPluginInstance()\n  }\n\n  disconnect() {\n    this.teardownPluginInstance()\n  }\n\n  initPluginInstance() {\n    let options = {\n      hiddenInput: this.fieldTarget.dataset.method,\n      customContainer: 'w-full',\n    }\n    // Make sure theres a\n    //  <meta name=\"intl_tel_input_utils_path\" content=\"<%= asset_path(\"intl-tel-input-utils.js\") %>\">\n    // on the page using phone controllers\n    const utilsScriptPath = metaContent('intl_tel_input_utils_path')\n    if (utilsScriptPath) {\n      options['utilsScript'] = utilsScriptPath\n    }\n    options['localizedCountries'] = this.localizedCountriesValue\n\n    // This config option removes the 'national' prefix digit and shows the international code in the placeholder\n    if (this.separateDialCodeValue) {\n      options['separateDialCode'] = true\n    }\n\n    const initialCountry = this.initialCountryValue.toLowerCase()\n    if (initialCountry && knownCountry(initialCountry)) {\n      options['initialCountry'] = initialCountry\n    }\n\n    this.plugin = intlTelInput(this.fieldTarget, options)\n  }\n\n  teardownPluginInstance() {\n    if (this.plugin === undefined) {\n      return\n    }\n\n    // revert to original markup, remove any event listeners\n    this.plugin.destroy()\n  }\n}\n\nfunction knownCountry(iso2) {\n  const countries = window.intlTelInputGlobals?.getCountryData() || []\n  return countries.some((country) => country.iso2 === iso2)\n}\n\nfunction metaContent(name) {\n  const element = document.head.querySelector(`meta[name=\"${name}\"]`)\n  return element && element.content\n}\n", "import ApplicationController from '../application_controller.js'\n\nexport default class extends ApplicationController {\n  static targets = ['field', 'link', 'actions', 'badge']\n  static values = {\n    verified: { type: Boolean, default: false },\n    phoneParamName: String,\n  }\n\n  connect() {\n    this.intlTel = window.intlTelInputGlobals.getInstance(this.fieldTarget)\n    this.initialFieldValue = stripNonNumeric(this.fieldTarget.value)\n\n    this.updateUI()\n    this.fieldTarget.addEventListener('input', () => this.handleFieldVerification())\n  }\n\n  handleFieldVerification() {\n    const currentFieldValue = stripNonNumeric(this.fieldTarget.value)\n    const isVerifiedValue = this.verifiedValue && currentFieldValue === this.initialFieldValue\n\n    this.verifiedValue = isVerifiedValue\n    this.updateUI()\n  }\n\n  updateVerifyLink(event) {\n    event.preventDefault()\n\n    this.initialFieldValue = stripNonNumeric(this.fieldTarget.value)\n\n    this.fieldTarget.classList.add('rounded-r-none')\n\n    const form = document.createElement('form')\n    form.method = 'post'\n    form.action = this.linkTarget.href\n    form.hidden = true\n    form.dataset.turbo = 'true'\n    form.dataset.turboFrame = 'dialog'\n    form.append(\n      Object.assign(document.createElement('input'), {\n        type: 'hidden',\n        name: this.phoneParamNameValue,\n        value: this.intlTel.getNumber(),\n      })\n    )\n    document.body.append(form)\n    form.addEventListener('turbo:submit-end', () => form.remove(), { once: true })\n    form.requestSubmit()\n  }\n\n  updateUI() {\n    const currentFieldValue = stripNonNumeric(this.fieldTarget.value)\n    const isVerifiedValue = this.verifiedValue && currentFieldValue === this.initialFieldValue\n\n    this.badgeTarget.classList.toggle('hidden', !isVerifiedValue)\n    this.fieldTarget.classList.toggle('rounded-r-none', !this.badgeTarget.classList.contains('hidden'))\n    this.actionsTarget.classList.toggle('hidden', isVerifiedValue || !currentFieldValue)\n  }\n}\n\nfunction stripNonNumeric(value) {\n  return value ? value.replace(/\\D/g, '').trim() : ''\n}\n", "import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n  static values = {\n    eventNameKey: { type: String, default: 'eventName' },\n    events: Array,\n  }\n\n  /**\n   * Sets up the bound handler to properly reference for the event listener.\n   */\n  initialize() {\n    this._iframeMessageHandler = this.iframeMessageHandler.bind(this)\n  }\n\n  /**\n   * Setup the handler listener\n   */\n  connect() {\n    window.addEventListener('message', this._iframeMessageHandler)\n  }\n\n  /**\n   * Removes the handler\n   */\n  disconnect() {\n    window.removeEventListener('message', this._iframeMessageHandler)\n  }\n\n  /**\n   * Handles the iframe message. If a key is present and its value matches one of the events\n   * in eventsValue, it'll dispatch the event as iframe-message-relay:EVENT-NAME.\n   * If object.data contains both a `path` value and `followLink: true` value, it'll navigate to the path\n   * instead of redispatching the event.\n   * @private\n   * @param {object} obj - The message object containing data from the iframe postMessage\n   * @param {object} obj.data - The data object within the message.\n   */\n  iframeMessageHandler({ data }) {\n    if (!this.eventMatched(data)) return\n\n    if (this.shouldFollowLink(data)) {\n      if (data.openInNewTab) {\n        window.open(data.path, '_blank')\n      } else {\n        Turbo.visit(data.path)\n      }\n    } else {\n      this.redispatchEvent(data)\n    }\n  }\n\n  /**\n   * Checks if the event matches one of the passed in controller event values.\n   * @private\n   * @param {Object} data - The data object.\n   * @returns {boolean} - True if the event matches, false otherwise.\n   */\n  eventMatched(data) {\n    return this.eventsValue.includes(data[this.eventNameKeyValue])\n  }\n\n  /**\n   * Checks if the event should follow the link by looking for a followLink key in the data object.\n   * @private\n   * @param {object} data - The data object.\n   * @returns {boolean} - True if the event should follow the link, false otherwise.\n   */\n  shouldFollowLink(data) {\n    return data.followLink\n  }\n\n  /**\n   * Re-dispatches the event to the controller, prepending iframe-message-relay: to the event name.\n   * @private\n   * @param {object} data - The data object.\n   */\n  redispatchEvent(data) {\n    this.dispatch(data[this.eventNameKeyValue], {\n      detail: data,\n      bubbles: true,\n    })\n  }\n}\n", "import ApplicationController from '../application_controller'\n\nexport default class extends ApplicationController {\n  static targets = ['image', 'loadingIndicator']\n\n  initialize() {\n    this.controller = new AbortController()\n    this.imageLoadedBound = this.imageLoaded.bind(this)\n  }\n\n  connect() {\n    this.imageTarget.complete ? this.removeLoadingIndicator() : this.setupListener()\n  }\n\n  setupListener() {\n    this.imageTarget.addEventListener('load', this.imageLoadedBound, { signal: this.controller.signal })\n  }\n\n  removeLoadingIndicator() {\n    if (!this.hasLoadingIndicatorTarget) return\n\n    this.loadingIndicatorTarget.remove()\n  }\n\n  destroyListener() {\n    this.controller.abort()\n  }\n\n  imageLoaded() {\n    this.destroyListener()\n    this.removeLoadingIndicator()\n  }\n\n  disconnect() {\n    this.destroyListener()\n  }\n}\n", "import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n  static targets = ['fileField', 'preview', 'removeImage']\n  static values = {\n    defaultImageUrl: String,\n    destroyImageParamName: { type: String, default: '_destroy' },\n  }\n\n  handleFileSelected(event) {\n    const file = Array.from(event.target.files)[0]\n\n    if (file) {\n      this.previewTarget.src = URL.createObjectURL(file)\n\n      if (this.hasRemoveImageTarget) {\n        this.removeImageTarget.remove()\n      }\n\n      this.#notifyFormChanged()\n    }\n  }\n\n  removeAndShowDefaultImage() {\n    this.fileFieldTarget.value = null\n    this.previewTarget.src = this.defaultImageUrlValue\n    this.#insertHiddenRemoveImageField()\n    this.#notifyFormChanged()\n  }\n\n  // Dispatch an input event directly on the parent form so the unsaved-changes\n  // controller detects the modification. We target the form instead of the file\n  // input because iOS WKWebView does not reliably bubble change events from\n  // file inputs through the DOM.\n  #notifyFormChanged() {\n    this.element.closest('form')?.dispatchEvent(new Event('input', { bubbles: true }))\n  }\n\n  #insertHiddenRemoveImageField() {\n    const removeImageField = document.createElement('input')\n    removeImageField.type = 'hidden'\n    removeImageField.name = this.destroyImageParamNameValue\n    removeImageField.value = '1'\n    removeImageField.dataset.imageFileFieldPreviewTarget = 'removeImage'\n\n    this.fileFieldTarget.after(removeImageField)\n  }\n}\n", "import { post } from '@rails/request.js'\n\nimport ApplicationController from '../application_controller'\nimport { toast } from 'utils/toast'\n\n// FramePay is pulled in through an external <script> tag, so `window.Rebilly`\n// is not guaranteed to exist by the time this controller connects.\nconst REBILLY_RETRY_DELAY = 500\nconst REBILLY_RETRY_ATTEMPTS = 10\n\n// `Rebilly.on` has no usable counterpart for this \u2014 see `mountCard` \u2014 so every\n// listener we register is parked on the global for the life of the document.\n// This controller re-connects often (a turbo stream replaces its frame after\n// every successful card add), so register exactly one listener per page and\n// hand each controller a `then` off the resulting promise instead.\nlet framePayReady = null\n\nfunction whenFramePayReady() {\n  framePayReady ||= new Promise((resolve) => window.Rebilly.on('ready', resolve))\n\n  return framePayReady\n}\n\nexport default class extends ApplicationController {\n  static targets = [\n    'cardForm',\n    'cardMountElement',\n    'paymentMethodForm',\n    'rebillyToken',\n    'paymentMethod',\n    'submitButton',\n  ]\n\n  static values = {\n    organizationId: String,\n    publishableKey: String,\n    liveMode: String,\n    orderId: String,\n    formAction: String,\n    rebillyFirstName: String,\n    rebillyLastName: String,\n    rebillyAddress: String,\n    rebillyAddress2: String,\n    rebillyCity: String,\n    rebillyCountry: String,\n    rebillyRegion: String,\n    rebillyPostalCode: String,\n    systemErrorMessage: String,\n    // The account layout nests `#toaster` inside `#flash`; the Customer Center\n    // renders `#flash` alone. Only the id of the positioned container will do,\n    // so each view names its own -- `toaster_frame_id` / `toaster_id` stay the\n    // single source of truth.\n    toasterFrameId: { type: String, default: 'toaster' },\n  }\n\n  connect() {\n    // Turbo caches the snapshot while the DOM is still intact, so this is the\n    // last moment the mounted iframe can be released cleanly. Unmounting from\n    // `disconnect` alone is too late -- by then Turbo has swapped the body and\n    // FramePay is being asked to tear down an element it can no longer reach,\n    // which leaves its registration behind.\n    this.beforeCacheHandler = () => this.teardownCard()\n    document.addEventListener('turbo:before-cache', this.beforeCacheHandler)\n\n    this.waitForRebilly()\n  }\n\n  // Bounded retry rather than a single shot. On a full page load `rebilly.js`\n  // is a blocking head script, so Stimulus cannot connect before it runs. On a\n  // Turbo Drive visit it can: `PageRenderer.mergeHead` awaits the new\n  // stylesheets but `copyNewHeadScriptElements` appends the new <script>\n  // without awaiting it, so the body swaps in while the CDN fetch is still in\n  // flight. Exhausting the attempts falls through to `initializeRebilly`, which\n  // owns the warning.\n  waitForRebilly(attempts = 0) {\n    if (window.Rebilly || attempts >= REBILLY_RETRY_ATTEMPTS) {\n      this.initializeRebilly()\n    } else {\n      this.initTimeout = setTimeout(() => this.waitForRebilly(attempts + 1), REBILLY_RETRY_DELAY)\n    }\n  }\n\n  disconnect() {\n    document.removeEventListener('turbo:before-cache', this.beforeCacheHandler)\n    clearTimeout(this.initTimeout)\n    this.teardownCard()\n  }\n\n  teardownCard() {\n    if (!this.card) return\n\n    this.card.unmount()\n    this.card = null\n  }\n\n  initializeRebilly() {\n    // The retries can run out before the script arrives, or it may never\n    // arrive at all. There is nothing to mount into in that case; `submit`\n    // reports it to the customer rather than throwing a raw TypeError.\n    if (!window.Rebilly) {\n      console.warn('FramePay (window.Rebilly) is not available; the card form cannot be mounted.')\n      return\n    }\n\n    if (!window.Rebilly.initialized) {\n      window.Rebilly.initialize({\n        organizationId: this.organizationIdValue,\n        publishableKey: this.publishableKeyValue,\n        kountAccountId: '700000', // This is for capturing kount fraud sessions\n      })\n    }\n\n    // FramePay caches `ready` and replays it to listeners that register after\n    // it has already fired, so this mounts whether we booted FramePay just now\n    // or some earlier form on the page already did.\n    whenFramePayReady().then(() => this.mountCard())\n  }\n\n  mountCard() {\n    // A controller that disconnects while still waiting on `ready` \u2014 turbo\n    // navigating away, or a turbo stream swapping this frame \u2014 still gets\n    // called back, and `Rebilly.off` does not help: a cached `ready` fires the\n    // handler as soon as it registers, before any `off` could run. Mounting\n    // here would leak an iframe into a detached element nothing will unmount.\n    if (this.card || !this.element.isConnected || !this.hasCardMountElementTarget) return\n\n    // Turbo renders a cached snapshot as a preview before the real response\n    // lands, and Stimulus connects controllers inside it. FramePay tracks its\n    // mounts globally, so mounting into a preview leaves a registration the\n    // real render then collides with (`already-mounted`) -- and the half-built\n    // iframe that survives throws cross-origin errors as the customer types.\n    // `markAsPreview(false)` runs before the real body is swapped in, so the\n    // real controller never sees a stale attribute here.\n    if (document.documentElement.hasAttribute('data-turbo-preview')) return\n\n    this.card = window.Rebilly.card.mount(this.cardMountElementTarget)\n  }\n\n  async submit(event) {\n    event.preventDefault()\n    event.stopPropagation()\n\n    // Without a mounted card element there are no fields to tokenize. Say so\n    // plainly instead of letting `createToken` throw a raw TypeError that the\n    // customer would see verbatim in the toast.\n    if (!window.Rebilly || !this.card) {\n      console.warn('FramePay card element is not mounted; refusing to tokenize.')\n      toast('alert', this.systemErrorMessageValue, this.toasterFrameIdValue)\n      return\n    }\n\n    const form = this.cardFormTarget\n    const address = {\n      firstName: this.rebillyFirstNameValue,\n      lastName: this.rebillyLastNameValue,\n      address: this.rebillyAddressValue,\n      address2: this.rebillyAddress2Value,\n      city: this.rebillyCityValue,\n      country: this.rebillyCountryValue,\n      region: this.rebillyRegionValue,\n      postalCode: this.rebillyPostalCodeValue,\n    }\n\n    const extraData = {\n      billingAddress: address,\n      method: 'payment-card',\n    }\n\n    this.setSubmitButtonDisabled(true)\n\n    try {\n      const paymentToken = await window.Rebilly.createToken(form, extraData)\n\n      const data = {\n        billing_payment_method: {\n          live_mode: this.liveModeValue,\n          rebilly_token: paymentToken.id,\n          order_id: this.orderIdValue,\n        },\n      }\n\n      const action = this.formActionValue\n      const response = await post(action, {\n        body: JSON.stringify(data),\n        responseKind: 'turbo-stream',\n      })\n      // request.js only renders a turbo stream from a 2xx or 422. Anything else\n      // renders nothing: production answers a 500 or a CSRF rejection with an\n      // empty 500 that still claims the turbo stream content type, and a redirect\n      // fetch follows (an expired session) lands on an HTML page. Say so.\n      const rendered = response.isTurboStream && (response.ok || response.unprocessableEntity)\n      if (!rendered) throw new Error(this.systemErrorMessageValue)\n    } catch (error) {\n      console.log('Create token error:', error)\n      toast('alert', error.message, this.toasterFrameIdValue)\n    } finally {\n      // Always hand the button back. Leaving it disabled strands the customer on\n      // a form they can no longer submit \u2014 the only way out is a full reload.\n      this.setSubmitButtonDisabled(false)\n    }\n  }\n\n  setSubmitButtonDisabled(disabled) {\n    // A successful submit replaces this frame via turbo stream, so the target is\n    // gone by the time we re-enable it.\n    if (!this.hasSubmitButtonTarget) return\n\n    if (disabled) {\n      this.submitButtonTarget.setAttribute('disabled', '')\n    } else {\n      this.submitButtonTarget.removeAttribute('disabled')\n    }\n  }\n}\n", "import { FetchRequest } from './fetch_request'\nimport { FetchResponse } from './fetch_response'\nimport { RequestInterceptor } from './request_interceptor'\nimport { get, post, put, patch, destroy } from './verbs'\n\nexport { FetchRequest, FetchResponse, RequestInterceptor, get, post, put, patch, destroy }\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    const responseStatusIsTurboStreamable = response.ok || response.unprocessableEntity\n\n    if (responseStatusIsTurboStreamable && 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  sameHostname () {\n    if (!this.originalUrl.startsWith('http:')) {\n      return true\n    }\n\n    try {\n      return new URL(this.originalUrl).hostname === window.location.hostname\n    } catch (_) {\n      return true\n    }\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: this.credentials,\n      redirect: this.redirect\n    }\n  }\n\n  get headers () {\n    const baseHeaders = {\n      'X-Requested-With': 'XMLHttpRequest',\n      'Content-Type': this.contentType,\n      Accept: this.accept\n    }\n\n    if (this.sameHostname()) {\n      baseHeaders['X-CSRF-Token'] = this.csrfToken\n    }\n\n    return compact(\n      Object.assign(baseHeaders, 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 credentials () {\n    return this.options.credentials || 'same-origin'\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", "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) && !name.includes('[]')) {\n      searchParams.delete(name)\n      searchParams.set(name, value)\n    } else {\n      searchParams.append(name, value)\n    }\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", "export function toast(type, message, toasterFrameId = 'toaster', duration = 0) {\n  let toastContent = document\n    .querySelector(`template[data-id='toast-template'][data-type=${type}]`)\n    .content.cloneNode(true)\n\n  if (duration > 0) {\n    toastContent.querySelector('wa-toast-item').setAttribute('duration', duration)\n  }\n\n  toastContent.getElementById('alert-message').innerText = message\n  document.getElementById(toasterFrameId).appendChild(toastContent)\n}\n", "import ApplicationController from '../application_controller'\n\nexport default class extends ApplicationController {\n  static targets = ['submitButton']\n\n  connect() {\n    this.toggleSubmitButton()\n  }\n\n  paymentMethodSelected() {\n    this.toggleSubmitButton()\n  }\n\n  toggleSubmitButton() {\n    if (!this.hasSubmitButtonTarget) return\n\n    const checked = this.element.querySelector(\n      'input[type=\"radio\"][name=\"[order]saved_payment_method_id\"]:not(:disabled):checked'\n    )\n\n    if (checked) {\n      this.submitButtonTarget.removeAttribute('disabled')\n    } else {\n      this.submitButtonTarget.setAttribute('disabled', '')\n    }\n  }\n}\n", "import ApplicationController from '../application_controller'\nimport { FetchRequest } from '@rails/request.js'\n\nexport default class extends ApplicationController {\n  static values = {\n    publicKey: String,\n    clientSecret: String,\n    stripeAccountId: String,\n    returnUrl: String,\n    billingDetails: Object,\n    totalAmount: Number,\n    mode: String,\n    currency: String,\n    confirmationTokenPath: String,\n    systemErrorMessage: String,\n    allowCreditCardFieldEntry: { type: Boolean, default: true },\n    useDynamicPaymentMethods: { type: Boolean, default: false },\n    refreshFrameId: { type: String, default: '' },\n    refreshFrameUrl: { type: String, default: '' },\n  }\n\n  static targets = [\n    'outOfBandElement',\n    'cash',\n    'check',\n    'miscellaneous',\n    'submitPaymentButton',\n    'selectedMethod',\n    'form',\n    'paymentMessage',\n  ]\n\n  connect() {\n    this.initializeOutofBandElements()\n    this.initializePaymentMethodGroups()\n    if (this.allowCreditCardFieldEntryValue) {\n      this.paymentElementReady = false\n      this.paymentElementComplete = false\n      this.initializeStripe()\n      // Stripe is open by default.\n      this.selectedMethod = 'stripe'\n    } else {\n      this.selectedMethod = 'existing-payment-method'\n    }\n  }\n\n  async handleSubmit(e) {\n    // Ensure we only submit on explict form submission, not on enter key.\n    if (e.offsetX === 0) {\n      e.preventDefault()\n      return\n    }\n\n    this.selectedMethodTarget.value = this.selectedMethod\n\n    if (this.stripeSelected()) {\n      this.submitStripe(e)\n    } else if (this.outOfBandSelected()) {\n      this.submitOutOfBand(e)\n    }\n  }\n\n  async submitOutOfBand() {\n    // We're actually just submitting the form here, so we don't need to do anything.\n    this.setLoading(true)\n  }\n\n  async submitStripe(e) {\n    e.preventDefault()\n\n    this.setLoading(true)\n    this.hideErrorMessage()\n    if (this.hideTimeoutId) {\n      clearTimeout(this.hideTimeoutId)\n    }\n\n    const { error: submitError } = await this.elements.submit()\n    if (submitError) {\n      // This error should be shown by the payment element.\n      this.setLoading(false)\n      return\n    }\n\n    const { error, confirmationToken } = await this.stripe.createConfirmationToken({\n      elements: this.elements,\n      params: {\n        payment_method_data: {\n          billing_details: this.billingDetailsValue,\n          allow_redisplay: 'always',\n        },\n      },\n    })\n\n    if (error) {\n      // This point is only reached if there's an immediate error when\n      // creating the ConfirmationToken. Show the error to your customer (for example, payment details incomplete)\n      this.showErrorMessage(error.message)\n      this.setLoading(false)\n      return\n    }\n\n    // We have a confirmationToken, we will use it to create the payment.\n    if (confirmationToken) {\n      const formData = new FormData(this.formTarget)\n\n      this.appendNestedObjectToFormData(formData, 'confirmation_token', confirmationToken)\n\n      const request = new FetchRequest('PUT', this.confirmationTokenPathValue, {\n        responseKind: 'json',\n        body: formData,\n      })\n      request\n        .perform()\n        .then((response) => response.json)\n        .then((response) => {\n          if (response.status === 'succeeded') {\n            // Redirect to success page\n            this.redirectToFinalUrl(response)\n          } else if (response.status === 'processing') {\n            // Redirect to success page\n            this.redirectToFinalUrl(response)\n          } else if (response.status === 'requires_action') {\n            // Redirect to 3D Secure page /  Show 3DS secure 2 modal.\n            this.stripe\n              .handleNextAction({\n                clientSecret: response.client_secret,\n              })\n              .then(({ error }) => {\n                if (error) {\n                  this.showErrorMessage(error.message)\n                  this.setLoading(false)\n                } else {\n                  // Actions handled, redirect to success page\n                  this.redirectToFinalUrl(response)\n                }\n              })\n          } else {\n            // Show an error message\n            if (response.error) {\n              this.showErrorMessage(response.error.message)\n            }\n            this.setLoading(false)\n          }\n        })\n        .catch(() => {\n          this.showErrorMessage(this.systemErrorMessageValue)\n          this.setLoading(false)\n        })\n    }\n  }\n\n  redirectToFinalUrl(response) {\n    const url = new URL(this.returnUrlValue)\n    url.searchParams.append(response.object, response.id)\n\n    if (this.refreshFrameIdValue) {\n      this.processIntentAndRefreshFrame(url)\n    } else {\n      Turbo.visit(url.toString())\n    }\n  }\n\n  async processIntentAndRefreshFrame(checkIntentUrl) {\n    const request = new FetchRequest('GET', checkIntentUrl.toString(), {\n      responseKind: 'json',\n    })\n\n    try {\n      await request.perform()\n\n      const frame = this.element.closest(`#${this.refreshFrameIdValue}`)\n      if (frame) {\n        frame.src = ''\n        frame.src = this.refreshFrameUrlValue\n      }\n    } catch {\n      this.showErrorMessage(this.systemErrorMessageValue)\n    } finally {\n      this.setLoading(false)\n    }\n  }\n\n  setLoading(isLoading) {\n    this.isLoading = isLoading\n    if (isLoading) {\n      // Disable the button and show a spinner\n      this.submitPaymentButtonTarget.querySelector('#spinner').classList.remove('hidden')\n      this.submitPaymentButtonTarget.querySelector('#button-text').classList.add('hidden')\n      setTimeout(() => this.submitPaymentButtonTarget.setAttribute('disabled', ''), 1)\n    } else {\n      this.setSubmitButtonState()\n      this.submitPaymentButtonTarget.querySelector('#spinner').classList.add('hidden')\n      this.submitPaymentButtonTarget.querySelector('#button-text').classList.remove('hidden')\n    }\n  }\n\n  showErrorMessage(messageText, isPermanent = false) {\n    this.messageContainer.classList.remove('hidden')\n    this.messageContainer.textContent = messageText\n\n    // Only auto-hide if not a permanent error\n    if (!isPermanent) {\n      this.hideTimeoutId = setTimeout(() => {\n        this.hideErrorMessage()\n      }, 8000)\n    }\n  }\n\n  hideErrorMessage() {\n    this.messageContainer.classList.add('hidden')\n    this.messageContainer.textContent = ''\n  }\n\n  hasBillingDetails() {\n    return this.billingDetailsValue.address?.country?.trim() && this.billingDetailsValue.address?.postal_code?.trim()\n  }\n\n  initializePaymentMethodGroups() {\n    const container = document.querySelector('.payment-method-details-group')\n\n    // Close all other details when one is shown\n    container.addEventListener('wa-show', (event) => {\n      // Don't allow the user to open other details while we're submitting the form.\n      if (this.isLoading) {\n        event.preventDefault()\n        return\n      }\n\n      ;[...container.querySelectorAll('wa-details')].map((details) => {\n        details.open = event.target === details\n        if (details.open) {\n          this.selectedMethod = details.dataset['paymentMethodType']\n        }\n        this.setSubmitButtonState()\n      })\n    })\n  }\n\n  initializeOutofBandElements() {\n    this.outOfBandElementTargets.forEach((item) => {\n      item.addEventListener('change', (e) => {\n        this.setSubmitButtonState()\n        const outOfBandElementValue = e.target.value\n\n        if (outOfBandElementValue == 'cash') {\n          this.cashTarget.classList.remove('hidden')\n          this.checkTarget.classList.add('hidden')\n          this.miscellaneousTarget.classList.add('hidden')\n        }\n        if (outOfBandElementValue == 'check') {\n          this.checkTarget.classList.remove('hidden')\n          this.cashTarget.classList.add('hidden')\n          this.miscellaneousTarget.classList.add('hidden')\n        }\n        if (outOfBandElementValue == 'miscellaneous') {\n          this.miscellaneousTarget.classList.remove('hidden')\n          this.cashTarget.classList.add('hidden')\n          this.checkTarget.classList.add('hidden')\n        }\n      })\n    })\n  }\n\n  initializeStripe() {\n    /* global Stripe */\n    this.stripe = Stripe(this.publicKeyValue, {\n      stripeAccount: this.stripeAccountIdValue,\n      betas: ['disable_link_passthrough_beta_1', 'disable_deferred_intent_client_validation_beta_1'],\n    })\n\n    const options = {\n      currency: this.currencyValue,\n      customerSessionClientSecret: this.clientSecretValue,\n      // Fully customizable with appearance API.\n      appearance: {\n        /*...*/\n      },\n    }\n\n    if (this.totalAmountValue > 0) {\n      options.amount = this.totalAmountValue\n      options.mode = this.modeValue\n    } else {\n      options.mode = 'setup'\n    }\n\n    if (this.useDynamicPaymentMethodsValue) {\n      // This is only here for local testing purposes. It's not expected it will ever be used in production.\n      if (this.modeValue === 'subscription') {\n        // When testing DPM we only set up future usage for subscription payment methods, to allow\n        // for the widest range of payment methods.\n        // In the checkout this should be an option the user can configure.\n        options.setup_future_usage = 'off_session'\n      }\n    } else {\n      // We always set up future usage for admin card payments.\n      options.payment_method_types = ['card']\n      options.setup_future_usage = 'off_session'\n    }\n\n    const paymentElementOptions = {\n      layout: 'tabs',\n      fields: {\n        billingDetails: this.hasBillingDetails() ? 'never' : { name: 'never', phone: 'never', address: 'if_required' },\n      },\n    }\n\n    this.elements = this.stripe.elements(options)\n    this.paymentElement = this.elements.create('payment', paymentElementOptions)\n\n    // Handle payment element loader errors\n    this.paymentElement.on('loaderror', (event) => {\n      this.showErrorMessage(event.error.message, true) // permanent error\n      this.setLoading(false)\n    })\n\n    // Handle when payment element is ready\n    this.paymentElement.on('ready', () => {\n      this.paymentElementReady = true\n      this.setSubmitButtonState()\n    })\n\n    // Track whether the payment element form is complete (valid)\n    this.paymentElement.on('change', (event) => {\n      this.paymentElementComplete = event.complete\n      this.setSubmitButtonState()\n    })\n\n    // Mount the payment element and catch any mounting errors\n    try {\n      this.paymentElement.mount('#payment-element')\n    } catch (error) {\n      this.showErrorMessage(error.message, true) // permanent error\n      this.setLoading(false)\n    }\n\n    this.messageContainer = this.paymentMessageTarget\n  }\n\n  stripeSelected() {\n    return this.selectedMethod === 'stripe'\n  }\n\n  outOfBandSelected() {\n    return this.selectedMethod === 'out-of-band'\n  }\n\n  setSubmitButtonState() {\n    if (this.isLoading) {\n      return\n    }\n\n    this.submitPaymentButtonTarget.setAttribute('disabled', '')\n    if (this.stripeSelected()) {\n      // Only enable if payment element is ready and form is complete (valid)\n      if (this.paymentElementReady && this.paymentElementComplete) {\n        this.submitPaymentButtonTarget.removeAttribute('disabled')\n      }\n    } else if (this.outOfBandSelected() && this.outOfBandElementTargets.find((e) => e.checked)) {\n      this.submitPaymentButtonTarget.removeAttribute('disabled')\n    }\n  }\n\n  appendNestedObjectToFormData(formData, key, value) {\n    if (typeof value === 'object' && value !== null) {\n      for (const [nestedKey, nestedValue] of Object.entries(value)) {\n        this.appendNestedObjectToFormData(formData, `${key}[${nestedKey}]`, nestedValue)\n      }\n    } else {\n      formData.append(key, value !== null ? value : '')\n    }\n  }\n}\n", "import ApplicationController from '../application_controller'\nimport { post } from '@rails/request.js'\n\nexport default class extends ApplicationController {\n  static targets = ['loading', 'table']\n  static values = {\n    url: String,\n    variantId: String,\n    priceId: String,\n  }\n\n  connect() {\n    this.fetchPreview()\n  }\n\n  async fetchPreview() {\n    this.loadingTarget.classList.remove('hidden')\n    this.tableTarget.classList.add('hidden')\n    const formData = new FormData()\n    formData.append('orders_line_item[variant_id]', this.variantIdValue)\n    formData.append('orders_line_item[products_price_id]', this.priceIdValue)\n    formData.append('orders_line_item[prorated]', 0)\n    formData.append('orders_line_item[charge_now]', 1)\n    const response = await post(this.urlValue, { body: formData, responseKind: 'turbo-stream' })\n    this.loadingTarget.classList.add('hidden')\n    this.tableTarget.classList.remove('hidden')\n  }\n}\n", "/* eslint-disable no-undef */\nimport ApplicationController from './application_controller'\nimport { toast } from '../utils/toast'\n\nexport default class extends ApplicationController {\n  static targets = [\n    'paymentMethodForm',\n    'rebillyToken',\n    'selectedMethod',\n    'paymentOption',\n    'cardForm',\n    'achForm',\n    'cardNumberMountElement',\n    'cardExpMountElement',\n    'cardCvvMountElement',\n    'bankTypeMountElement',\n    'bankNumberMountElement',\n    'bankRoutingMountElement',\n    'submitPaymentButton',\n    'countrySelect',\n    'regionSelect',\n  ]\n  static values = {\n    organizationId: String,\n    publishableKey: String,\n  }\n\n  showNotification(detail) {\n    toast('alert', detail.message)\n  }\n\n  submit(form, data) {\n    form.submit()\n  }\n\n  paymentForm() {\n    return this.paymentMethodFormTarget\n  }\n\n  hideOptions() {\n    this.cardFormTarget.classList.add('hidden')\n    this.achFormTarget.classList.add('hidden')\n  }\n\n  toggleForm() {\n    this.hideOptions()\n    if (this.selectedMethodTarget.value == 'ach') {\n      this.achFormTarget.classList.remove('hidden')\n    }\n    if (this.selectedMethodTarget.value == 'payment-card') {\n      this.cardFormTarget.classList.remove('hidden')\n    }\n  }\n\n  unmountUnusedOption() {\n    if (this.selectedMethodTarget.value == 'ach') {\n      this.mountedFrames.cardElements.forEach((item) => item.unmount())\n    } else if (this.selectedMethodTarget.value == 'payment-card') {\n      this.mountedFrames.achElements.forEach((item) => item.unmount())\n    }\n  }\n\n  mountUnusedOption() {\n    if (this.selectedMethodTarget.value == 'ach') {\n      this.mountedFrames.cardElements.forEach((item) => item.mount())\n    } else if (this.selectedMethodTarget.value == 'payment-card') {\n      this.mountedFrames.achElements.forEach((item) => item.mount())\n    }\n  }\n\n  initRebilly() {\n    console.debug('PaymentMethodForm Stimulus Controller initRebilly')\n\n    if (!Rebilly.initialized) {\n      var config = {\n        publishableKey: this.publishableKeyValue,\n        organizationId: this.organizationIdValue,\n        kountAccountId: '700000', // This is for capturing kount fraud sessions\n      }\n      Rebilly.initialize(config)\n    }\n    const that = this // eslint-disable-line @typescript-eslint/no-this-alias\n    const form = this.paymentForm()\n    const rebillyToken = this.rebillyTokenTarget\n    const paymentMethodSubmitted = { value: false }\n    const paymentOptions = this.paymentOptionTargets\n    const cardNumberElement = this.cardNumberMountElementTarget\n    const cardExpElement = this.cardExpMountElementTarget\n    const cardCvvElement = this.cardCvvMountElementTarget\n    const bankTypeElement = this.bankTypeMountElementTarget\n    const bankNumberElement = this.bankNumberMountElementTarget\n    const bankRoutingElement = this.bankRoutingMountElementTarget\n    const submitPaymentButton = this.submitPaymentButtonTarget\n    const countrySelect = this.countrySelectTarget\n    const regionSelect = this.regionSelectTarget\n    this.mountedFrames = { achElements: [], cardElements: [] }\n\n    paymentOptions.forEach((option) => {\n      option.addEventListener('click', (event) => {\n        this.selectedMethodTarget.value = event.target.dataset.value\n        this.toggleForm()\n      })\n    })\n\n    Rebilly.on('ready', () => {\n      this.card = Rebilly.card.mount(cardNumberElement, 'cardNumber')\n      this.exp = Rebilly.card.mount(cardExpElement, 'cardExpiration')\n      this.cvv = Rebilly.card.mount(cardCvvElement, 'cardCvv')\n      this.type = Rebilly.bankAccount.mount(bankTypeElement, 'bankAccountType')\n      this.number = Rebilly.bankAccount.mount(bankNumberElement, 'bankAccountNumber')\n      this.routing = Rebilly.bankAccount.mount(bankRoutingElement, 'bankRoutingNumber')\n\n      this.mountedFrames.achElements = [this.type, this.number, this.routing]\n      this.mountedFrames.cardElements = [this.card, this.exp, this.cvv]\n    })\n\n    form.onsubmit = (e) => {\n      paymentMethodSubmitted.value = true\n      submitPaymentButton.setAttribute('disabled', '')\n      e.preventDefault()\n      e.stopPropagation()\n      this.unmountUnusedOption()\n\n      const extraData = {\n        method: this.selectedMethodTarget.value,\n        billingAddress: {\n          country: countrySelect.options[countrySelect.selectedIndex].dataset.iso2,\n          region: regionSelect.options[regionSelect.selectedIndex].text,\n        },\n      }\n\n      Rebilly.createToken(form, extraData)\n        .then((result) => {\n          window.parent.postMessage('success', '*')\n          rebillyToken.value = result.id\n\n          // NOTE: data is used on admin page (when turbo is true)\n          // and goes to app/javascript/controllers/turbo_stream_payment_method_form_controller.js\n          // otherwise data variable is ignored (customer center does not use data variable)\n          const data = {\n            payment_method: {\n              live_mode: form.elements.live_mode.value,\n              rebilly_token: rebillyToken.value,\n              description: form.elements['billing/payment_method_description'].value,\n            },\n          }\n          that.submit(form, data)\n        })\n        .catch((error) => {\n          paymentMethodSubmitted.value = false\n          submitPaymentButton.removeAttribute('disabled')\n          this.mountUnusedOption()\n          console.error('Framepay error', error)\n          error.details.forEach(that.showNotification(error))\n          window.parent.postMessage('error', '*')\n        })\n    }\n  }\n\n  connect() {\n    console.debug('PaymentMethodForm Stimulus Controller connect')\n\n    this.selectedMethodTarget.value = 'payment-card'\n\n    if (typeof Rebilly !== 'undefined') {\n      console.debug('PaymentMethodForm Stimulus Controller rebilly is defined')\n      this.initRebilly()\n    } else {\n      setTimeout(() => {\n        this.initRebilly()\n      }, 500)\n    }\n  }\n\n  disconnect() {\n    if (this.card) {\n      this.card.unmount()\n      this.exp.unmount()\n      this.cvv.unmount()\n    }\n    if (this.type) {\n      this.type.unmount()\n      this.number.unmount()\n      this.routing.unmount()\n    }\n  }\n}\n/* eslint-enable no-undef */\n", "import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n  static values = {\n    cacheTtl: { type: Number, default: 10000 },\n  }\n\n  handlePrefetch(event) {\n    const lastPrefetchedAt = event.target.dataset.turboLastPrefetchAt\n\n    if (this.eventInPrefetchCacheWindow(lastPrefetchedAt)) {\n      event.preventDefault()\n      return\n    }\n\n    this.setLastPrefetchedAt(event.target)\n  }\n\n  getTimeDifference(startTime, endTime) {\n    return parseInt(startTime) - parseInt(endTime)\n  }\n\n  eventInPrefetchCacheWindow(lastPrefetchedAt) {\n    return this.getTimeDifference(this.now, lastPrefetchedAt) < this.cacheTtlValue\n  }\n\n  setLastPrefetchedAt(element) {\n    element.dataset.turboLastPrefetchAt = this.now\n  }\n\n  get now() {\n    return new Date().getTime()\n  }\n}\n", "import ApplicationController from './application_controller'\nimport { get } from '@rails/request.js'\n\nexport default class extends ApplicationController {\n  static targets = ['loader', 'form']\n  static values = {\n    redirectPath: String,\n    redirectTimeout: { type: Number, default: 10000 },\n    redirectAfterTimeoutPath: String,\n    autoCloseModal: Boolean,\n    autoCloseTimeout: { type: Number, default: 30000 },\n    notificationPath: String,\n    customEvent: String,\n    loaderHiddenCss: { type: String, default: 'hidden' },\n    loaderVisibleCss: { type: String, default: '' },\n    useTurbo: { type: Boolean, default: false },\n    turboFrame: { type: String, default: '' },\n  }\n\n  get hasRedirectPath() {\n    return this.hasRedirectPathValue && this.redirectPathValue.trim().length > 0\n  }\n\n  connect() {\n    if (this.hasAutoCloseModalValue) {\n      this.autoCloseTimeoutId = setTimeout(() => {\n        this.dispatch(this.customEventValue)\n        if (this.hasNotificationPathValue) {\n          get(this.notificationPathValue, { responseKind: 'turbo-stream' })\n        }\n      }, this.autoCloseTimeoutValue)\n    } else if (this.hasRedirectAfterTimeoutPathValue) {\n      this.timeoutRedirectId = setTimeout(() => {\n        this.redirectNow()\n      }, this.redirectTimeoutValue)\n    }\n  }\n\n  // Without this, replacing the element (e.g. the claim-failure broadcast\n  // swapping the dialog body) leaves the timers running in a closure: the\n  // took-too-long fetch would still fire and wipe the failure message.\n  disconnect() {\n    clearTimeout(this.autoCloseTimeoutId)\n    clearTimeout(this.timeoutRedirectId)\n  }\n\n  redirectNow() {\n    clearTimeout(this.timeoutRedirectId)\n\n    if (this.useTurboValue) {\n      Turbo.visit(this.redirectAfterTimeoutPathValue, { frame: this.turboFrameValue })\n    } else {\n      window.location.replace(this.redirectAfterTimeoutPathValue)\n    }\n  }\n\n  redirectPathValueChanged() {\n    if (this.hasRedirectPath) {\n      window.location.replace(this.redirectPathValue)\n    }\n  }\n\n  showLoader() {\n    if (this.hasLoaderTarget) {\n      const hiddenCss = this.loaderHiddenCssValue.split(' ')\n      const visibleCss = this.loaderVisibleCssValue.split(' ')\n      this.loaderTarget.classList.remove(...hiddenCss)\n      this.loaderTarget.classList.add(...visibleCss)\n    }\n  }\n}\n", "import ApplicationController from './application_controller'\n\n/**\n * Handles automatic scrolling to elements and optional highlighting.\n * It can target either the controller's element or a specific child element.\n *\n * @example\n * <div data-controller=\"scroll-to\"\n *      data-scroll-to-run-on-connect-value=\"true\"\n *      data-scroll-to-highlight-value=\"true\"\n *      data-scroll-to-selector-target-value=\".my-element\"\n *      data-scroll-to-offset-value=\"60\">\n *   <div class=\"my-element\">This will be scrolled to and highlighted</div>\n * </div>\n */\nexport default class ScrollController extends ApplicationController {\n  static values = {\n    /** @type {String} Scrolling behavior - 'auto' or 'smooth' */\n    behavior: { type: String, default: 'smooth' },\n\n    /** @type {String} Vertical alignment - 'start', 'center', 'end', or 'nearest' */\n    block: { type: String, default: 'center' },\n\n    /** @type {String} Horizontal alignment - 'start', 'center', 'end', or 'nearest' */\n    inline: { type: String, default: 'nearest' },\n\n    /** @type {String} CSS selector for finding target element within controller element */\n    selectorTarget: String,\n\n    /** @type {Boolean} Whether to automatically scroll when controller connects */\n    runOnConnect: { type: Boolean, default: true },\n\n    /** @type {Boolean} Whether to add a highlight effect to the target element */\n    highlight: { type: Boolean, default: false },\n\n    /** @type {Number} Pixel offset to apply when scrolling (e.g., for fixed headers) */\n    offset: { type: Number, default: 55 },\n  }\n\n  connect() {\n    if (this.runOnConnectValue) {\n      this.scrollToElement()\n    }\n\n    if (this.highlightValue) {\n      this.highlightTarget()\n    }\n  }\n\n  /**\n   * Scrolls to the target element with a short timeout to ensure DOM readiness.\n   * Uses either mainContent.scrollTo or element.scrollIntoView depending on page structure.\n   */\n  scrollToElement() {\n    setTimeout(() => {\n      const target = this.#getTarget()\n      if (!target) return\n\n      this.#performScroll(target)\n    }, 0)\n  }\n\n  /**\n   * Public action method that can be triggered from HTML or other controllers.\n   *\n   * @example\n   *   <!-- default: scrolls to selectorTarget / controller element -->\n   *   <button data-action=\"scroll-to#scroll\">Scroll to default</button>\n   *\n   *   <!-- scroll to element with id=\"emails\" -->\n   *   <button\n   *     data-action=\"scroll-to#scroll\"\n   *     data-scroll-to-target-id=\"emails\">\n   *     Scroll to emails\n   *   </button>\n   *\n   *   <!-- scroll to arbitrary CSS selector -->\n   *   <button\n   *     data-action=\"scroll-to#scroll\"\n   *     data-scroll-to-target-selector=\"#friends\">\n   *     Scroll to friends\n   *   </button>\n   */\n  scroll(event) {\n    const targetFromEvent = this.#getEventTarget(event)\n\n    if (targetFromEvent) {\n      this.#performScroll(targetFromEvent)\n    } else {\n      this.scrollToElement()\n    }\n  }\n\n  /**\n   * Adds a highlight effect to the target element by adding the 'highlight-pulse' class.\n   * The actual animation should be defined in CSS.\n   */\n  highlightTarget() {\n    const target = this.#getTarget()\n    if (target) {\n      target.classList.add('highlight-pulse')\n    }\n  }\n\n  /**\n   * Returns the DOM element to scroll to - either the controller element itself,\n   * or a child element matching the selectorTarget value.\n   *\n   * @returns {HTMLElement|null} The target element, or null if not found\n   */\n  #getTarget() {\n    return this.hasSelectorTargetValue ? this.element.querySelector(this.selectorTargetValue) : this.element\n  }\n\n  /**\n   * Returns a custom target based on data attributes on the clicked element.\n   * Supports:\n   *  - data-scroll-to-target-selector (CSS selector)\n   *  - data-scroll-to-target-id (element id)\n   *\n   * @param {Event} event - Stimulus action event\n   * @returns {HTMLElement|null}\n   */\n  #getEventTarget(event) {\n    if (!event || !event.currentTarget) return null\n\n    const source = event.currentTarget\n    const selector = source.dataset.scrollToTargetSelector\n    const targetId = source.dataset.scrollToTargetId\n\n    if (selector) {\n      return document.querySelector(selector)\n    }\n\n    if (targetId) {\n      return document.getElementById(targetId)\n    }\n\n    return null\n  }\n\n  /**\n   * Performs the actual scrolling operation on the target element.\n   * Uses different scrolling strategies based on page structure.\n   *\n   * @param {HTMLElement} target - The element to scroll to\n   */\n  #performScroll(target) {\n    // TODO: This is a temporary fix for the main-content scroll issue. We really need to investigate\n    //       why the main-content is not scrolling properly with scrollIntoView.\n    const mainContent = document.getElementById('main-content')\n\n    if (mainContent) {\n      // Use scrollTo with offset when main-content is available\n      mainContent.scrollTo({\n        top: target.offsetTop - this.offsetValue,\n        behavior: this.behaviorValue,\n      })\n    } else {\n      // Fall back to scrollIntoView\n      target.scrollIntoView({\n        behavior: this.behaviorValue,\n        block: this.blockValue,\n        inline: this.inlineValue,\n      })\n    }\n  }\n}\n", "/* global mixpanel */\nimport ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n  static targets = ['impression']\n\n  static values = {\n    path: String,\n    pageTitle: String,\n    userId: String,\n    teamId: String,\n  }\n\n  /**\n   * Initializes the controller. If mixpanel is not defined, it disconnects the controller.\n   * Otherwise, it initializes mixpanel tracking.\n   */\n  connect() {\n    if (typeof mixpanel === 'undefined') {\n      this.element.dataset.controller.replace('mixpanel', '')\n      return\n    }\n    this.initMixpanel()\n  }\n\n  /**\n   * Tracks the click event on a specified element.\n   * @param {Event} event - The event object containing parameters for tracking.\n   * @param {Object} event.params - The parameters passed with the event.\n   * @param {string} event.params.element - The element being tracked.\n   * @param {string} event.params.label - The label for the tracked event.\n   */\n  track(event) {\n    if (typeof mixpanel === 'undefined') {\n      return\n    }\n    this.trackClick(event)\n  }\n\n  /**\n   * Tracks an impression for any element marked `data-mixpanel-target=\"impression\"`,\n   * on first render and on later Turbo insertion. Reads the same\n   * `element`/`label` data attributes the click tracking uses.\n   * @param {HTMLElement} element - The impression target that connected.\n   */\n  impressionTargetConnected(element) {\n    if (typeof mixpanel === 'undefined') {\n      return\n    }\n    const { mixpanelElementParam: trackedElement, mixpanelLabelParam: label } = element.dataset\n\n    mixpanel.track('Element Viewed', {\n      userId: this.userIdValue,\n      element: trackedElement,\n      label,\n      path: this.pathValue,\n      pageTitle: this.pageTitleValue,\n      group_id: this.teamIdValue,\n      $user_id: this.userIdValue,\n    })\n  }\n\n  initMixpanel() {\n    if (this.userIdValue) mixpanel.identify(this.userIdValue)\n    if (this.teamIdValue) mixpanel.set_group('group_id', this.teamIdValue)\n    this.trackPageView()\n  }\n\n  trackClick(event) {\n    const { element, label } = event.params\n    const userId = this.userIdValue\n    const path = this.pathValue\n    const pageTitle = this.pageTitleValue\n    const groupId = this.teamIdValue\n\n    mixpanel.track('Element Clicked', {\n      userId,\n      element,\n      label,\n      path,\n      pageTitle,\n      group_id: groupId,\n      $user_id: userId,\n    })\n  }\n\n  trackPageView() {\n    mixpanel.track('Page Visited', {\n      page: this.pageTitleValue,\n      path: this.pathValue,\n      userId: this.userIdValue,\n      group_id: this.teamIdValue,\n      $user_id: this.userIdValue,\n    })\n  }\n}\n", "import ApplicationController from './application_controller'\nimport { isHotwireNativeApp } from '../utils/hotwire_native'\n\nexport default class extends ApplicationController {\n  shareOnFacebook(event) {\n    const url = encodeURIComponent(event.params.url)\n    const quote = encodeURIComponent(event.params.title)\n    let hashtag = event.params.hashtags ? event.params.hashtags.split(',')[0].trim() : ''\n    hashtag = hashtag ? encodeURIComponent(`#${hashtag}`) : ''\n\n    const shareUrl = `https://www.facebook.com/sharer/sharer.php?u=${url}&hashtag=${hashtag}&quote=${quote}`\n    this.openShareWindow(shareUrl)\n  }\n\n  shareOnTwitter(event) {\n    const url = encodeURIComponent(event.params.url)\n    const text = encodeURIComponent(event.params.title)\n    const hashtags = event.params.hashtags ? encodeURIComponent(event.params.hashtags.split(',').join(',')) : ''\n\n    const shareUrl = `https://twitter.com/intent/tweet/?text=${text}&url=${url}&hashtags=${hashtags}`\n    this.openShareWindow(shareUrl)\n  }\n\n  shareOnLinkedIn(event) {\n    const url = encodeURIComponent(event.params.url)\n    const title = encodeURIComponent(event.params.title)\n\n    const shareUrl = `https://www.linkedin.com/shareArticle?mini=true&url=${url}&text=${title}`\n    this.openShareWindow(shareUrl)\n  }\n\n  shareByEmail(event) {\n    const url = encodeURIComponent(event.params.url)\n    const subject = encodeURIComponent(event.params.subject || event.params.title)\n    const body = encodeURIComponent(`${event.params.title} ${url}`)\n\n    const shareUrl = `mailto:?subject=${subject}&body=${body}`\n    window.location.href = shareUrl\n  }\n\n  shareBySms(event) {\n    const body = `${event.params.title} ${event.params.url}`\n    window.location.href = `sms:?&body=${body}`\n  }\n\n  openShareWindow(url) {\n    if (isHotwireNativeApp()) {\n      if (window.Turbo?.visit) {\n        window.Turbo.visit(url)\n      } else {\n        window.location.href = url\n      }\n\n      return\n    }\n\n    window.open(\n      url,\n      '_blank',\n      'height=450, width=550, top=' +\n        (window.innerHeight / 2 - 275) +\n        ', left=' +\n        (window.innerWidth / 2 - 225) +\n        ', toolbar=0, location=0, menubar=0, directories=0, scrollbars=0'\n    )\n  }\n}\n", "export function isHotwireNativeApp(userAgent = globalThis.navigator?.userAgent || '') {\n  const normalizedUserAgent = userAgent.toLowerCase()\n\n  return normalizedUserAgent.includes('hotwire native') || normalizedUserAgent.includes('turbo native')\n}\n", "import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n  static targets = ['submitButton', 'otpForm', 'hiddenInput', 'recoveryCodeInput']\n\n  static values = {\n    autoSubmit: { type: Boolean, default: true },\n    emulateSubmit: Boolean,\n  }\n\n  handleInput() {\n    const expectedLength = this.hiddenInputTarget.maxLength || 6\n    if (this.hiddenInputTarget.value.length === expectedLength) {\n      if (this.autoSubmitValue) {\n        this.submitForm()\n      }\n    }\n  }\n\n  submitOnPaste() {\n    setTimeout(() => this.handleInput())\n  }\n\n  submitOnEnter(event) {\n    event.preventDefault()\n    this.submitForm()\n  }\n\n  switchToRecoveryCode() {\n    this.hiddenInputTarget.disabled = true\n    this.recoveryCodeInputTarget.disabled = false\n  }\n\n  switchToOtp() {\n    this.recoveryCodeInputTarget.disabled = true\n    this.hiddenInputTarget.disabled = false\n  }\n\n  submitForm() {\n    if (this.submitted) return\n    this.submitted = true\n\n    if (this.emulateSubmitValue && this.hasSubmitButtonTarget) {\n      this.otpFormTarget.requestSubmit(this.submitButtonTarget)\n    } else {\n      this.otpFormTarget.requestSubmit()\n    }\n  }\n}\n", "import ApplicationController from '../application_controller'\n\nexport default class extends ApplicationController {\n  static targets = ['toggle', 'nameSelectWrapper', 'nameSelect', 'nameInput', 'collapsedOptionName']\n\n  connect() {\n    this.selectedIndex = this.nameSelectTarget.selectedIndex\n  }\n\n  newValueIsSelected() {\n    return this.nameSelectTarget.options[this.nameSelectTarget.selectedIndex].value === '_new'\n  }\n\n  selectOption(e) {\n    if (this.newValueIsSelected()) {\n      this.toggleTargets.forEach((el) => el.classList.toggle('hidden'))\n      this.nameInputTarget.focus()\n      this.nameInputTarget.value = ''\n    } else {\n      this.selectedIndex = this.nameSelectTarget.selectedIndex\n    }\n  }\n\n  toggle(e) {\n    e.preventDefault()\n    this.toggleTargets.forEach((el) => el.classList.toggle('hidden'))\n    if (this.newValueIsSelected()) {\n      this.nameSelectTarget.selectedIndex = 0\n    } else {\n      this.nameSelectTarget.selectedIndex = this.selectedIndex\n    }\n\n    this.nameSelectTarget.dispatchEvent(new CustomEvent('change', { bubbles: true }))\n    this.nameInputTarget.value = ''\n  }\n\n  updateNameField(e) {\n    if (this.newValueIsSelected()) {\n      this.nameInputTarget.value = ''\n    } else {\n      this.nameInputTarget.value = e.target.value\n    }\n  }\n\n  updateCollapsedFormOption() {\n    this.collapsedOptionNameTarget.innerHTML = this.nameInputTarget.value + ':'\n  }\n}\n", "import ApplicationController from '../application_controller'\nimport $ from 'jquery'\nimport Cookies from 'js-cookie'\n\n/* eslint-disable @typescript-eslint/no-require-imports, no-undef */\nrequire('select2')()\nrequire('select2/dist/js/i18n/en')\nrequire('select2/dist/js/i18n/es')\nrequire('select2/dist/js/i18n/pt')\nrequire('select2/dist/js/i18n/ja')\n/* eslint-enable @typescript-eslint/no-require-imports, no-undef */\n\nexport default class extends ApplicationController {\n  static targets = ['select']\n  static values = {\n    acceptsNew: Boolean,\n    allowClear: Boolean,\n    menuAsCheckboxes: { type: Boolean, default: false },\n    closeOnSelect: { type: Boolean, default: true },\n    containerWidth: String,\n    data: Array,\n    displaySelectionSummary: { type: Boolean, default: false },\n    enableSearch: Boolean,\n    maximumInputLength: Number,\n    maximumSelectionLength: Number,\n    noResultsMessage: String,\n    selectedMessageTemplate: String,\n    placeholder: { type: String, default: '' },\n    searchUrl: String,\n    selected: Object,\n    selectDescriptor: String,\n    selectedMessageTemplateCountKey: { type: String, default: '{{count}}' },\n    selectedMessageTemplateTotalKey: { type: String, default: '{{total}}' },\n    selectedMessageTemplateDescriptorKey: { type: String, default: '{{descriptor}}' },\n    createPrefix: { type: String, default: '' },\n  }\n\n  // select2 does not re-trigger native events.\n  // These events are what will be retriggered by this controller.\n  static jQueryEventsToReissue = [\n    'change',\n    'select2:closing',\n    'select2:close',\n    'select2:opening',\n    'select2:open',\n    'select2:selecting',\n    'select2:select',\n    'select2:unselecting',\n    'select2:unselect',\n    'select2:clearing',\n    'select2:clear',\n  ]\n\n  connect() {\n    this.dispatchNativeEventBoundFn = this.dispatchNativeEvent.bind(this)\n    this.initPluginInstance()\n    this.closeSelectDropdownAfterClearing()\n  }\n\n  disconnect() {\n    this.teardownPluginInstance()\n  }\n\n  // TODO may want to re-evaluate\n  // This is called when going from initial undefined value to a blank string\n  // when the controller is connected\n  searchUrlValueChanged(newValue, prevValue) {\n    if (newValue === prevValue) return\n\n    this.initPluginInstance()\n  }\n\n  cleanupBeforeInit() {\n    $(this.element).find('.select2-container--default').remove()\n  }\n\n  initPluginInstance() {\n    const locale = Cookies.get('locale') || 'en'\n    let $select2\n    let options = {\n      dropdownParent: $(this.element),\n      language: locale,\n    }\n\n    if (this.hasDataValue) {\n      options.data = this.dataValue\n    }\n\n    if (!this.enableSearchValue) {\n      options.minimumResultsForSearch = -1\n    }\n\n    if (this.maximumSelectionLengthValue > 0) {\n      options.maximumSelectionLength = this.maximumSelectionLengthValue\n    }\n\n    if (this.maximumInputLengthValue > 0) {\n      options.maximumInputLength = this.maximumInputLengthValue\n    }\n\n    if (this.noResultsMessageValue) {\n      options.language = {\n        noResults: () => this.noResultsMessageValue,\n      }\n    }\n\n    options.allowClear = this.allowClearValue\n    options.placeholder = this.placeholderValue\n    options.tags = this.acceptsNewValue\n    options.templateResult = this.formatState\n    options.templateSelection = this.formatState\n    options.tokenSeparators = [',']\n    options.width = this.containerWidthValue || '100%'\n    options.menuAsCheckboxes = this.menuAsCheckboxesValue\n    options.closeOnSelect = this.closeOnSelectValue\n\n    if (this.createPrefixValue.length > 0) {\n      options.createTag = (params) => {\n        // Check if the tag already exists\n        var term = $.trim(params.term)\n        if (term === '') {\n          return null\n        }\n\n        // Append \"Create:\" to the newly created tag\n        return {\n          id: term,\n          text: `${this.createPrefixValue}: ${term}`,\n          newTag: true, // Add this property to indicate it's a new tag\n        }\n      }\n      options.templateSelection = (selection) => {\n        // Modify the appearance of the selected tag\n        if (selection.id && selection.newTag) {\n          selection.text = selection.text.replace(`${this.createPrefixValue}:`, '')\n          return selection.text\n        }\n        return selection.text\n      }\n    }\n\n    if (this.searchUrlValue) {\n      options.ajax = {\n        url: this.searchUrlValue,\n        dataType: 'json',\n        delay: 300,\n        data: (params) => {\n          const query = { page: params.page || 1 }\n          if (params.term) query.search = params.term\n          return query\n        },\n        processResults: (data) => ({\n          results: (data.results || []).map((r) => ({ id: r.condition_id ?? r.id, text: r.label ?? r.text })),\n          pagination: data.pagination,\n        }),\n      }\n    }\n\n    if (this.displaySelectionSummaryValue == true) {\n      options.allowClear = true\n      options.templateSelection = (selected, total) => { // eslint-disable-line\n        if (selected.length == 0) {\n          return options.placeholder\n        }\n\n        return this.updateSelectionText(selected, options.maximumSelectionLength)\n      }\n    }\n\n    this.cleanupBeforeInit() // in case improperly torn down\n    this.pluginMainEl = this.selectTarget // required because this.selectTarget is unavailable on disconnect()\n\n    // check if dropdown is in a sidepanel\n    var $sidepanel = $(this.pluginMainEl).parents('#side_panel')\n    if ($sidepanel.length > 0) {\n      //scope to sidepanel if applicable\n      options.dropdownParent = $('#side_panel')\n\n      // Hacking this event to prevent clickOutside event from triggering in controllers/panel.js\n      $(this.pluginMainEl).on('select2:unselect', function () {\n        event.cancelBubble = true\n        return\n      })\n    }\n\n    if (this.displaySelectionSummaryValue == true) {\n      $(this.pluginMainEl).select2MultiCheckboxes(options)\n    } else {\n      $select2 = $(this.pluginMainEl)?.select2(options)\n      if (this.menuAsCheckboxesValue && $select2) {\n        $select2.data('select2').$dropdown.addClass('select2--checkbox')\n      }\n    }\n\n    this.initReissuePluginEventsAsNativeEvents()\n\n    // https://select2.org/data-sources/ajax#default-pre-selected-values\n    if (this.hasSelectedValue) {\n      var newOption = new Option(this.selectedValue.text, this.selectedValue.id, true, true)\n      $(this.pluginMainEl).append(newOption).trigger('change')\n    }\n  }\n\n  closeSelectDropdownAfterClearing() {\n    // prevent the select menu from opening after we close it via allow_clear option\n    // https://github.com/select2/select2/issues/3320\n    $('select').on('select2:clear', function () {\n      $(this).on('select2:opening.cancelOpen', function (evt) {\n        evt.preventDefault()\n\n        $(this).off('select2:opening.cancelOpen')\n      })\n    })\n  }\n\n  updateSelectionText(selection, total) {\n    let template = this.selectedMessageTemplateValue\n\n    template = template.replace(this.selectedMessageTemplateCountKeyValue, selection.length)\n    template = template.replace(this.selectedMessageTemplateTotalKeyValue, total)\n    template = template.replace(this.selectedMessageTemplateDescriptorKeyValue, this.selectDescriptorValue)\n\n    return template.trim()\n  }\n\n  teardownPluginInstance() {\n    if (this.pluginMainEl === undefined) {\n      return\n    }\n\n    // ensure there are no orphaned event handlers\n    this.teardownPluginEventsAsNativeEvents()\n\n    // revert to original markup, remove any event listeners\n    $(this.pluginMainEl)?.select2('destroy')\n  }\n\n  // select2 does not re-trigger native events.\n  // this tread details the issue: https://github.com/select2/select2/issues/1908\n  // Direct link to the recommended fix: https://github.com/select2/select2/issues/1908#issuecomment-871095578\n  // note one(...), not on(...), which triggers once and detaches. Otherwise you get stackoverflow as\n  // this triggers more on(change) events.\n  initReissuePluginEventsAsNativeEvents() {\n    this.constructor.jQueryEventsToReissue.forEach((eventName) => {\n      $(this.pluginMainEl).one(eventName, this.dispatchNativeEventBoundFn)\n    })\n  }\n\n  teardownPluginEventsAsNativeEvents() {\n    this.constructor.jQueryEventsToReissue.forEach((eventName) => {\n      $(this.pluginMainEl).off(eventName)\n    })\n  }\n\n  // BT deviation\n  // we've opted to not prepend $ to reissued event names.\n  dispatchNativeEvent(event) {\n    this.pluginMainEl.dispatchEvent(\n      new CustomEvent(event.type, {\n        detail: { event: event },\n        bubbles: true,\n        cancelable: false,\n      })\n    )\n\n    // rebind event that was fired.\n    $(this.pluginMainEl).one(event.type, this.dispatchNativeEventBoundFn)\n  }\n\n  // https://stackoverflow.com/questions/29290389/select2-add-image-icon-to-option-dynamically\n  formatState(opt) {\n    var imageUrl = $(opt.element).attr('data-image')\n    var imageStyle = $(opt.element).attr('data-image-style')\n    if (imageStyle) {\n      // use this\n    } else {\n      imageStyle = 'default'\n    }\n    var imageHtml = ''\n    if (imageUrl) {\n      imageHtml = '<img src=\"' + imageUrl + '\" class=\"' + imageStyle + '\" /> '\n      return $(\n        '<span class=\"flex items-center\">' +\n          imageHtml +\n          '<span class=\"block truncate\">' +\n          sanitizeHTML(opt.text) +\n          '</span>' +\n          '</span>'\n      )\n    }\n    var iconClass = $(opt.element).attr('data-icon-class')\n    if (iconClass) {\n      return $('<span>' + `<i class=\"${iconClass}\"></i>` + sanitizeHTML(opt.text) + '</span>')\n    }\n    return $('<span>' + sanitizeHTML(opt.text) + '</span>')\n  }\n}\n\n// https://portswigger.net/web-security/cross-site-scripting/preventing\n// strips scary things while preserving valid html entities like emojis\nfunction sanitizeHTML(str) {\n  if (!str) return ''\n\n  return str.replace(/[&<>\"']/g, function (match) {\n    return {\n      '&': '&amp;',\n      '<': '&lt;',\n      '>': '&gt;',\n      '\"': '&quot;',\n      \"'\": '&#39;',\n    }[match]\n  })\n}\n", "import ApplicationController from './application_controller'\nimport { useClickOutside } from 'stimulus-use'\n\nexport default class extends ApplicationController {\n  static targets = ['toggleContent', 'multi']\n\n  connect() {\n    useClickOutside(this) // eslint-disable-line react-hooks/rules-of-hooks\n  }\n\n  hideAllContent() {\n    this.toggleContentTargets.forEach((el) => el.classList.add('hidden'))\n  }\n\n  showAllContent() {\n    this.toggleContentTargets.forEach((el) => el.classList.remove('hidden'))\n  }\n\n  toggleAllContent() {\n    this.toggleContentTargets.forEach((el) => el.classList.toggle('hidden'))\n    this.dispatch('toggled', { detail: { sourceEl: this.element } })\n  }\n\n  toggleHiddenElements() {\n    this.toggleAllContent()\n  }\n\n  toggleSpecificContent(event) {\n    const selector = event.currentTarget.dataset.contentSelector\n    const specificContent = Array.from(this.element.querySelectorAll(selector))\n\n    this.toggleContentTargets.filter((el) => !specificContent.includes(el)).forEach((el) => el.classList.add('hidden'))\n    specificContent.forEach((el) => el.classList.toggle('hidden'))\n    // TODO: Also clear inner form fields that are being hidden\n    this.dispatch('toggled', { detail: { sourceEl: this.element } })\n  }\n\n  toggleByValue(event) {\n    this.multiTargets.forEach((el) => el.classList.add('hidden'))\n    $(`#${event.currentTarget.value}`).removeClass('hidden')\n    this.dispatch('toggled', { detail: { sourceEl: this.element } })\n  }\n}\n", null, null, null, null, "import ApplicationController from '../application_controller'\nimport TomSelect from 'tom-select'\nimport { computePosition, autoUpdate, size, flip } from '@floating-ui/dom'\nimport { get } from '@rails/request.js'\n\nfunction pinwheelSvg(sizeClass) {\n  const colors = ['#FF2101', '#FF9A00', '#FFED00', '#00B538', '#0064FF', '#9B00FF']\n  const petals = colors\n    .map(\n      (color, i) => `<path d=\"M 8 8 L 8 0 A 8 8 0 0 1 14.93 4 Z\" fill=\"${color}\" transform=\"rotate(${i * 60}, 8, 8)\"/>`\n    )\n    .join('')\n  return `<svg class=\"${sizeClass} shrink-0\" viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\">${petals}</svg>`\n}\n\nconst renderConfigs = {\n  // Customize any of the HTML rendered by passing in a custom render object.\n  // Must conform to the shape defined here:\n  // https://github.com/orchidjs/tom-select/blob/master/doc_src/pages/docs/index.md#render-templates\n  codes: {\n    render: {\n      option: function (data, escape) {\n        const anchorId = `code-tooltip-${crypto.randomUUID()}`\n        return `\n          <div class=\"py-2 px-3\">\n            <div id=\"${anchorId}\" class=\"truncate\">${escape(data.text)}</div>\n            <wa-tooltip for=\"${anchorId}\">${escape(data.code)}</wa-tooltip>\n          </div>\n        `\n      },\n    },\n  },\n  contacts: {\n    render: {\n      option: function (data, escape) {\n        return `\n          <div class=\"py-2 px-3 flex items-center space-x-3\">\n            <div class=\"shrink-0\">\n              <img class=\"h-6 w-6 rounded-full\" src=\"${escape(data.avatar_url)}\" alt=\"\">\n            </div>\n            <div class=\"flex flex-col min-w-0\">\n              <div class=\"font-medium\">\n                ${escape(data.full_name)}\n              </div>\n              <div class=\"truncate text-xs\">\n                ${escape(data.email_address)}\n              </div>\n            </div>\n          </div>\n        `\n      },\n      item: function (data, escape) {\n        return `\n          <div class=\"flex items-center space-x-2 rounded-lg min-w-0\">\n          ${data.avatar_url ? `<img class=\"h-4 w-4 rounded-full\" src=\"${escape(data.avatar_url)}\" alt=\"\">` : ''}\n            <span class=\"truncate text-sm\">\n              ${escape(data.full_name || data.email_address || data.text)}\n            </span>\n          </div>\n        `\n      },\n    },\n  },\n  prices: {\n    render: {\n      option: function (data, escape) {\n        return `\n          <div class=\"py-2 px-3\">\n            <div class=\"flex items-center justify-between space-x-1\">\n              <span class=\"font-medium\">${escape(data.price)}</span>\n              <span class=\"inline-block shrink-0 h-2 w-2 rounded-full ${\n                data.visible === 'true' ? 'bg-green-600' : 'bg-coolGray-400'\n              }\"></span>\n            </div>\n            ${data.name && `<div class=\"truncate text-xs\">${escape(data.name)}</div>`}\n          </div>\n        `\n      },\n      item: function (data, escape) {\n        return `\n          <div class=\"pr-7\">${escape(data.text)}</div>\n        `\n      },\n      optgroup_header: function (data, escape) {\n        const translations = this.settings.translations\n        return `\n          <div class=\"flex items-center justify-between px-3 pt-2 pb-1 border-b border-coolGray-100\">\n            <div class=\"text-coolGray font-semibold text-xs\">\n              ${escape(data.label)}\n            </div>\n            <div class=\"text-coolGray font-semibold text-xs text-right\">\n              ${translations.visible}\n            </div>\n           </div>\n        `\n      },\n    },\n  },\n  pages: {\n    render: {\n      option: function (data, escape) {\n        return `\n          <div class=\"py-2 px-3 flex items-center space-x-3\">\n            <div class=\"flex flex-col min-w-0\">\n              <div class=\"font-medium\">\n                ${escape(data.name)}\n              </div>\n              <div class=\"truncate text-xs font-light\">\n                ${escape(data.path)}\n              </div>\n            </div>\n          </div>\n        `\n      },\n      item: function (data, escape) {\n        return `\n          <div class=\"flex items-center space-x-2 rounded-lg min-w-0\">\n            <span class=\"truncate text-sm\">\n              ${escape(data.name)}\n            </span>\n          </div>\n        `\n      },\n    },\n  },\n  tags: {\n    // Tom Select compares the typed text against option *values*, which here are tag ids, so it\n    // offers to create a tag that already exists. Compare against the labels instead.\n    createFilter: function (input) {\n      const name = input.trim().toLowerCase()\n\n      return !Object.values(this.options).some((option) => (option.text || '').trim().toLowerCase() === name)\n    },\n    render: {\n      // Without this, a tag that does not exist yet shows up as \"Add <term>...\", which reads\n      // like another search result rather than something that will create the tag.\n      option_create: function (data, escape) {\n        const translations = this.settings.translations\n        // The whole phrase lives in the translation, so a language can put the name where it\n        // belongs and quote it its own way. A function replacement keeps a typed dollar sign\n        // from being read as a `$&`-style pattern.\n        const label = translations.create.replace('%{name}', () => escape(data.input))\n\n        return `\n          <div class=\"create flex items-center space-x-2\">\n            <i class=\"fa-solid fa-plus text-xs text-blue\" aria-hidden=\"true\"></i>\n            <div class=\"truncate\">${label}</div>\n          </div>\n        `\n      },\n      no_results: function () {\n        const translations = this.settings.translations\n\n        return `<div class=\"no-results\">${translations.no_results}</div>`\n      },\n      option: function (data, escape) {\n        const color = data.color || '#D7E0E5'\n        return `\n          <div>\n            <div class=\"flex items-center space-x-2\">\n              <div class=\"h-3 w-3 rounded-full\" style=\"background-color: ${color}\"></div>\n              <div class=\"truncate\">${escape(data.text)}</div>\n            </div>\n          </div>\n        `\n      },\n      item: function (data, escape) {\n        const color = data.color || '#D7E0E5'\n        return `\n          <div>\n            <div class=\"flex items-center space-x-2\">\n              <div class=\"h-3 w-3 rounded-full ring-1 ring-coolGray-200\" style=\"background-color: ${color}\"></div>\n              <div class=\"truncate\">${escape(data.text)}</div>\n            </div>\n          </div>\n        `\n      },\n    },\n  },\n  themes: {\n    render: {\n      option: function (data, escape) {\n        const translations = this.settings.translations\n        return `\n          <div class=\"py-2 px-3\">\n            <div class=\"flex items-center justify-between\">\n              <div class=\"flex items-center space-x-3\">\n                ${data.imgSrc ? `<img src=\"${escape(data.imgSrc)}\" class=\"w-8 h-6\">` : ''}\n                <div class=\"truncate\">${escape(data.text)}</div>\n              </div>\n              <div class=\"flex items gap-2\">\n              ${\n                data.new === 'true'\n                  ? '<span class=\"inline-flex items-center font-medium px-2.5 text-button ' +\n                    `bg-green-100 text-green-800 rounded-sm capitalize\">${translations.new}</span>`\n                  : ''\n              }\n                <button\n                  type=\"button\"\n                  data-controller=\"tooltip\"\n                  data-tooltip-content-value=\"${translations.preview_theme_pages}\"\n                  data-turbo-command=\"Themes::ViewThemePages\"\n                  data-theme-id=\"${escape(data.themeId)}\"\n                >\n                  <i class=\"fa-solid fa-eye text-coolGray-400\"></i>\n                </button>\n              </div>\n            </div\n          </div>\n        `\n      },\n      item: function (data, escape) {\n        return `\n          <div>\n            <div class=\"flex items-center space-x-3\">\n              ${data.imgSrc ? `<img src=\"${escape(data.imgSrc)}\" class=\"w-8 h-6\">` : ''}\n              <div class=\"truncate\">${escape(data.text)}</div>\n              <div class=\"flex items gap-2\">\n              ${\n                data.new === 'true'\n                  ? '<span class=\"inline-flex items-center font-medium px-2.5 text-button ' +\n                    `bg-green-100 text-green-800 rounded-sm capitalize\">${this.settings.translations.new}</span>`\n                  : ''\n              }\n              </div>\n            </div>\n          </div>\n        `\n      },\n      dropdown: function () {\n        const translations = this.settings.translations\n        return `\n          <div>\n            <div class=\"flex items-center py-2 px-3 border border-b border-coolGray-150\">\n             <span class=\"text-coolGray-900 mr-1\">${translations.dont_see_one}</span>\n             <button\n              type=\"button\"\n              class=\"link\"\n              data-turbo-command=\"Marketplaces::Themes::OpenGallery\"\n              >\n                ${translations.explore_new_themes}\n              </button>\n             </div>\n          </div>\n        `\n      },\n    },\n  },\n  mergeTags: {\n    render: {\n      option: function (data, escape) {\n        return `\n          <div class=\"py-2 px-3 flex items-center space-x-3\">\n            <div class=\"flex flex-col min-w-0\">\n              <div class=\"font-medium\">\n                ${escape(data.name)}\n              </div>\n              <div class=\"truncate text-xs font-light\">\n                ${escape(data.tag)}\n              </div>\n            </div>\n          </div>\n        `\n      },\n      item: function (data, escape) {\n        return `\n          <div class=\"flex items-center space-x-2 rounded-lg min-w-0\">\n            <span class=\"truncate text-sm\">\n              ${escape(data.name)}\n            </span>\n          </div>\n        `\n      },\n    },\n  },\n  urls: {\n    render: {\n      option: function (data, escape) {\n        return `\n          <div class=\"py-2 px-3\">\n            <div class=\"flex items-center space-x-2\">\n              <i class=\"far fa-link text-gray-400\"></i>\n              <div class=\"truncate\">${escape(data.text)}</div>\n            </div>\n          </div>\n        `\n      },\n      item: function (data, escape) {\n        return `\n          <div class=\"flex items-center space-x-2\">\n            <i class=\"far fa-link text-gray-400\"></i>\n            <div class=\"truncate\">${escape(data.text)}</div>\n          </div>\n        `\n      },\n    },\n  },\n  color_swatches: {\n    render: {\n      option: function (data, escape) {\n        const swatch = data.color ? `<div class=\"h-4 w-4 rounded-sm ${data.color}\"></div>` : pinwheelSvg('h-4 w-4')\n        return `\n          <div class=\"py-2 px-3\">\n            <div class=\"flex items-center space-x-2\">\n              ${swatch}\n              <div class=\"truncate\">${escape(data.text)}</div>\n            </div>\n          </div>\n        `\n      },\n      item: function (data, escape) {\n        const swatch = data.color ? `<div class=\"h-3 w-3 rounded-sm ${data.color}\"></div>` : pinwheelSvg('h-3 w-3')\n        return `\n          <div>\n            <div class=\"flex items-center space-x-2\">\n              ${swatch}\n              <div class=\"truncate\">${escape(data.text)}</div>\n            </div>\n          </div>\n        `\n      },\n    },\n  },\n}\n\nconst loadConfigs = {\n  // uses `fetch` to access external urls\n  external: function (baseUrl, queryParam, pathToData) {\n    return {\n      load: async function (query, callback) {\n        var url = `${baseUrl}?${queryParam}=` + encodeURIComponent(query)\n        fetch(url)\n          .then((response) => response.json())\n          .then((json) => {\n            callback(getValueByKeys(json, pathToData))\n          })\n          .catch(() => {\n            callback()\n          })\n      },\n    }\n  },\n  // uses `@rails/requestjs` to access internal application\n  internal: function (baseUrl, queryParam, pathToData) {\n    return {\n      load: async function (query, callback) {\n        const separator = baseUrl.includes('?') ? '&' : '?'\n        const url = `${baseUrl}${separator}${queryParam}=` + encodeURIComponent(query)\n        const response = await get(url, { responseKind: 'json' })\n\n        if (response.ok) {\n          const data = await response.json\n          callback(getValueByKeys(data, pathToData))\n        } else {\n          callback()\n        }\n      },\n    }\n  },\n}\n\nconst getValueByKeys = (data, keys) => {\n  let result = data\n  for (let key of keys) {\n    if (result[key] === undefined) {\n      return undefined\n    }\n    result = result[key]\n  }\n  return result\n}\n\nexport default class extends ApplicationController {\n  static targets = ['select']\n\n  static values = {\n    checkboxOptions: { type: Boolean, default: false },\n    clearButtonTitle: { type: String, default: 'Clear All' },\n    loadConfigName: { type: String, default: 'external' },\n    multiple: { type: Boolean, default: false },\n    queryParam: { type: String, default: 'q' },\n    remoteUrl: { type: String, default: '' },\n    remoteDataPath: { type: Array, default: ['items'] },\n    renderConfigName: { type: String, default: '' },\n    renderConfigTranslations: { type: Object, default: {} },\n    settings: { type: Object, default: {} },\n    focusOnLoad: { type: Boolean, default: false },\n    onDelete: { type: Boolean, default: false },\n    hoist: Boolean,\n  }\n\n  connect() {\n    const settings = this.initOptions()\n\n    this.tomSelect = new TomSelect(this.selectTarget, settings)\n    if (this.focusOnLoadValue) {\n      this.focus()\n    }\n  }\n\n  initOptions() {\n    let defaultOptions = {\n      plugins: {},\n      create: true,\n      copyClassesToDropdown: false,\n      render: {},\n      hidePlaceholder: true,\n      maxOptions: null,\n      onDropdownOpen: this.onDropdownOpen.bind(this),\n      onDropdownClose: this.onDropdownClose.bind(this),\n    }\n\n    if (this.multipleValue) {\n      defaultOptions.plugins['remove_button'] = {}\n      defaultOptions.plugins['clear_button'] = {\n        title: this.clearButtonTitleValue,\n        html: (data) => {\n          return `\n            <div\n              class=\"${data.className}\"\n              title=\"${data.title}\"\n              data-controller=\"tooltip\"\n              data-tooltip-content-value=\"${data.title}\"\n            >\n              <i class=\"fa fa-circle-x\"></i>\n            </div>\n          `\n        },\n      }\n    }\n\n    if (this.checkboxOptionsValue) {\n      defaultOptions.plugins['checkbox_options'] = {}\n    }\n\n    // don't allow deleting the currently selected option\n    // if in single select mode. Use include_blank + allow_empty_option instead.\n    if (!this.multipleValue && !this.onDeleteValue) {\n      defaultOptions['onDelete'] = function () {\n        return false\n      }\n    }\n\n    let combinedOptions = {\n      ...defaultOptions,\n      ...this.settingsValue,\n      ...(this.hasRenderConfigNameValue && renderConfigs[this.renderConfigNameValue]),\n      ...(this.hasRenderConfigTranslationsValue && { translations: this.renderConfigTranslationsValue }),\n      ...(this.hasLoadConfigNameValue &&\n        this.remoteUrlValue !== '' &&\n        loadConfigs[this.loadConfigNameValue](this.remoteUrlValue, this.queryParamValue, this.remoteDataPathValue)),\n    }\n\n    combinedOptions.render.loading = function () {\n      return `\n        <div class=\"flex items-center justify-center p-3 text-blue-50\">\n          <l-dot-pulse\n            size=\"40\"\n            speed=\"1.3\" \n            color=\"rgb(var(--eva-color-blue-100))\" \n          ></l-dot-pulse>\n        </div>\n      `\n    }\n\n    return combinedOptions\n  }\n\n  onDropdownOpen(dropdownElement) {\n    if (!this.hoistValue) return\n\n    // hoisting the dropdown requires help to position it correctly\n    this.anchorElement = dropdownElement.parentElement\n    this.dropdownElement = dropdownElement\n    this.cleanUpHoistedDropdown = autoUpdate(this.anchorElement, this.dropdownElement, this.reposition.bind(this))\n  }\n\n  onDropdownClose() {\n    if (!this.hoistValue) return\n\n    this.cleanUpHoistedDropdown()\n    this.cleanUpHoistedDropdown = null\n    this.anchorElement = null\n    this.dropdownElement = null\n  }\n\n  reposition() {\n    const middleware = [\n      size({\n        apply: ({ rects }) => {\n          this.dropdownElement.style.width = `${rects.reference.width}px`\n        },\n      }),\n      flip({\n        flipAlignment: false,\n      }),\n    ]\n\n    computePosition(this.anchorElement, this.dropdownElement, {\n      placement: 'bottom-start',\n      middleware,\n      strategy: 'fixed',\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    }).then(({ x, y, middlewareData, placement }) => {\n      if (placement.startsWith('top')) {\n        y -= 8 // needs a small nudge when placed above the anchor\n      }\n\n      Object.assign(this.dropdownElement.style, {\n        position: 'fixed',\n        left: `${x}px`,\n        top: `${y}px`,\n      })\n    })\n  }\n\n  // Tom Select API Actions\n  // Add more as needed: https://tom-select.js.org/docs/api/\n  open() {\n    this.tomSelect.open()\n  }\n\n  close() {\n    this.tomSelect.close()\n  }\n\n  focus() {\n    this.tomSelect.focus()\n  }\n\n  enable() {\n    this.tomSelect.enable()\n  }\n\n  disable() {\n    this.tomSelect.disable()\n  }\n}\n", "import { rectToClientRect, detectOverflow as detectOverflow$1, offset as offset$1, autoPlacement as autoPlacement$1, shift as shift$1, flip as flip$1, size as size$1, hide as hide$1, arrow as arrow$1, inline as inline$1, limitShift as limitShift$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n  const css = getComputedStyle(element);\n  // In testing environments, the `width` and `height` properties are empty\n  // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n  let width = parseFloat(css.width) || 0;\n  let height = parseFloat(css.height) || 0;\n  const hasOffset = isHTMLElement(element);\n  const offsetWidth = hasOffset ? element.offsetWidth : width;\n  const offsetHeight = hasOffset ? element.offsetHeight : height;\n  const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n  if (shouldFallback) {\n    width = offsetWidth;\n    height = offsetHeight;\n  }\n  return {\n    width,\n    height,\n    $: shouldFallback\n  };\n}\n\nfunction unwrapElement(element) {\n  return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n  const domElement = unwrapElement(element);\n  if (!isHTMLElement(domElement)) {\n    return createCoords(1);\n  }\n  const rect = domElement.getBoundingClientRect();\n  const {\n    width,\n    height,\n    $\n  } = getCssDimensions(domElement);\n  let x = ($ ? round(rect.width) : rect.width) / width;\n  let y = ($ ? round(rect.height) : rect.height) / height;\n\n  // 0, NaN, or Infinity should always fallback to 1.\n\n  if (!x || !Number.isFinite(x)) {\n    x = 1;\n  }\n  if (!y || !Number.isFinite(y)) {\n    y = 1;\n  }\n  return {\n    x,\n    y\n  };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n  const win = getWindow(element);\n  if (!isWebKit() || !win.visualViewport) {\n    return noOffsets;\n  }\n  return {\n    x: win.visualViewport.offsetLeft,\n    y: win.visualViewport.offsetTop\n  };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n  if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n    return false;\n  }\n  return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n  const clientRect = element.getBoundingClientRect();\n  const domElement = unwrapElement(element);\n  let scale = createCoords(1);\n  if (includeScale) {\n    if (offsetParent) {\n      if (isElement(offsetParent)) {\n        scale = getScale(offsetParent);\n      }\n    } else {\n      scale = getScale(element);\n    }\n  }\n  const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n  let x = (clientRect.left + visualOffsets.x) / scale.x;\n  let y = (clientRect.top + visualOffsets.y) / scale.y;\n  let width = clientRect.width / scale.x;\n  let height = clientRect.height / scale.y;\n  if (domElement) {\n    const win = getWindow(domElement);\n    const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n    let currentWin = win;\n    let currentIFrame = getFrameElement(currentWin);\n    while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle(currentIFrame);\n      const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n      const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n      x *= iframeScale.x;\n      y *= iframeScale.y;\n      width *= iframeScale.x;\n      height *= iframeScale.y;\n      x += left;\n      y += top;\n      currentWin = getWindow(currentIFrame);\n      currentIFrame = getFrameElement(currentWin);\n    }\n  }\n  return rectToClientRect({\n    width,\n    height,\n    x,\n    y\n  });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n  const leftScroll = getNodeScroll(element).scrollLeft;\n  if (!rect) {\n    return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n  }\n  return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll, ignoreScrollbarX) {\n  if (ignoreScrollbarX === void 0) {\n    ignoreScrollbarX = false;\n  }\n  const htmlRect = documentElement.getBoundingClientRect();\n  const x = htmlRect.left + scroll.scrollLeft - (ignoreScrollbarX ? 0 :\n  // RTL <body> scrollbar.\n  getWindowScrollBarX(documentElement, htmlRect));\n  const y = htmlRect.top + scroll.scrollTop;\n  return {\n    x,\n    y\n  };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isFixed = strategy === 'fixed';\n  const documentElement = getDocumentElement(offsetParent);\n  const topLayer = elements ? isTopLayer(elements.floating) : false;\n  if (offsetParent === documentElement || topLayer && isFixed) {\n    return rect;\n  }\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  let scale = createCoords(1);\n  const offsets = createCoords(0);\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isHTMLElement(offsetParent)) {\n      const offsetRect = getBoundingClientRect(offsetParent);\n      scale = getScale(offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll, true) : createCoords(0);\n  return {\n    width: rect.width * scale.x,\n    height: rect.height * scale.y,\n    x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n  };\n}\n\nfunction getClientRects(element) {\n  return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n  const html = getDocumentElement(element);\n  const scroll = getNodeScroll(element);\n  const body = element.ownerDocument.body;\n  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n  let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -scroll.scrollTop;\n  if (getComputedStyle(body).direction === 'rtl') {\n    x += max(html.clientWidth, body.clientWidth) - width;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\nfunction getViewportRect(element, strategy) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    const visualViewportBased = isWebKit();\n    if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n  const top = clientRect.top + element.clientTop;\n  const left = clientRect.left + element.clientLeft;\n  const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n  const width = element.clientWidth * scale.x;\n  const height = element.clientHeight * scale.y;\n  const x = left * scale.x;\n  const y = top * scale.y;\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n  let rect;\n  if (clippingAncestor === 'viewport') {\n    rect = getViewportRect(element, strategy);\n  } else if (clippingAncestor === 'document') {\n    rect = getDocumentRect(getDocumentElement(element));\n  } else if (isElement(clippingAncestor)) {\n    rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n  } else {\n    const visualOffsets = getVisualOffsets(element);\n    rect = {\n      x: clippingAncestor.x - visualOffsets.x,\n      y: clippingAncestor.y - visualOffsets.y,\n      width: clippingAncestor.width,\n      height: clippingAncestor.height\n    };\n  }\n  return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n  const parentNode = getParentNode(element);\n  if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n    return false;\n  }\n  return getComputedStyle(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n  const cachedResult = cache.get(element);\n  if (cachedResult) {\n    return cachedResult;\n  }\n  let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n  let currentContainingBlockComputedStyle = null;\n  const elementIsFixed = getComputedStyle(element).position === 'fixed';\n  let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    const computedStyle = getComputedStyle(currentNode);\n    const currentNodeIsContaining = isContainingBlock(currentNode);\n    if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n      currentContainingBlockComputedStyle = null;\n    }\n    const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n    if (shouldDropCurrentNode) {\n      // Drop non-containing blocks.\n      result = result.filter(ancestor => ancestor !== currentNode);\n    } else {\n      // Record last containing block for next iteration.\n      currentContainingBlockComputedStyle = computedStyle;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  cache.set(element, result);\n  return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n  let {\n    element,\n    boundary,\n    rootBoundary,\n    strategy\n  } = _ref;\n  const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n  const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n  const firstClippingAncestor = clippingAncestors[0];\n  const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n    const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\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  }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n  return {\n    width: clippingRect.right - clippingRect.left,\n    height: clippingRect.bottom - clippingRect.top,\n    x: clippingRect.left,\n    y: clippingRect.top\n  };\n}\n\nfunction getDimensions(element) {\n  const {\n    width,\n    height\n  } = getCssDimensions(element);\n  return {\n    width,\n    height\n  };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const isFixed = strategy === 'fixed';\n  const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const offsets = createCoords(0);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isOffsetParentAnElement) {\n      const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    } else if (documentElement) {\n      // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n      // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n  const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n  const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n  return {\n    x,\n    y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nfunction isStaticPositioned(element) {\n  return getComputedStyle(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n  if (!isHTMLElement(element) || getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n  if (polyfill) {\n    return polyfill(element);\n  }\n  let rawOffsetParent = element.offsetParent;\n\n  // Firefox returns the <html> element as the offsetParent if it's non-static,\n  // while Chrome and Safari return the <body> element. The <body> element must\n  // be used to perform the correct calculations even if the <html> element is\n  // non-static.\n  if (getDocumentElement(element) === rawOffsetParent) {\n    rawOffsetParent = rawOffsetParent.ownerDocument.body;\n  }\n  return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n  const win = getWindow(element);\n  if (isTopLayer(element)) {\n    return win;\n  }\n  if (!isHTMLElement(element)) {\n    let svgOffsetParent = getParentNode(element);\n    while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n      if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n        return svgOffsetParent;\n      }\n      svgOffsetParent = getParentNode(svgOffsetParent);\n    }\n    return win;\n  }\n  let offsetParent = getTrueOffsetParent(element, polyfill);\n  while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n    offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n  }\n  if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n    return win;\n  }\n  return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n  const getDimensionsFn = this.getDimensions;\n  const floatingDimensions = await getDimensionsFn(data.floating);\n  return {\n    reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n    floating: {\n      x: 0,\n      y: 0,\n      width: floatingDimensions.width,\n      height: floatingDimensions.height\n    }\n  };\n};\n\nfunction isRTL(element) {\n  return getComputedStyle(element).direction === 'rtl';\n}\n\nconst platform = {\n  convertOffsetParentRelativeRectToViewportRelativeRect,\n  getDocumentElement,\n  getClippingRect,\n  getOffsetParent,\n  getElementRects,\n  getClientRects,\n  getDimensions,\n  getScale,\n  isElement,\n  isRTL\n};\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n  let io = null;\n  let timeoutId;\n  const root = getDocumentElement(element);\n  function cleanup() {\n    var _io;\n    clearTimeout(timeoutId);\n    (_io = io) == null || _io.disconnect();\n    io = null;\n  }\n  function refresh(skip, threshold) {\n    if (skip === void 0) {\n      skip = false;\n    }\n    if (threshold === void 0) {\n      threshold = 1;\n    }\n    cleanup();\n    const {\n      left,\n      top,\n      width,\n      height\n    } = element.getBoundingClientRect();\n    if (!skip) {\n      onMove();\n    }\n    if (!width || !height) {\n      return;\n    }\n    const insetTop = floor(top);\n    const insetRight = floor(root.clientWidth - (left + width));\n    const insetBottom = floor(root.clientHeight - (top + height));\n    const insetLeft = floor(left);\n    const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n    const options = {\n      rootMargin,\n      threshold: max(0, min(1, threshold)) || 1\n    };\n    let isFirstUpdate = true;\n    function handleObserve(entries) {\n      const ratio = entries[0].intersectionRatio;\n      if (ratio !== threshold) {\n        if (!isFirstUpdate) {\n          return refresh();\n        }\n        if (!ratio) {\n          // If the reference is clipped, the ratio is 0. Throttle the refresh\n          // to prevent an infinite loop of updates.\n          timeoutId = setTimeout(() => {\n            refresh(false, 1e-7);\n          }, 1000);\n        } else {\n          refresh(false, ratio);\n        }\n      }\n      isFirstUpdate = false;\n    }\n\n    // Older browsers don't support a `document` as the root and will throw an\n    // error.\n    try {\n      io = new IntersectionObserver(handleObserve, {\n        ...options,\n        // Handle <iframe>s\n        root: root.ownerDocument\n      });\n    } catch (e) {\n      io = new IntersectionObserver(handleObserve, options);\n    }\n    io.observe(element);\n  }\n  refresh(true);\n  return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    ancestorScroll = true,\n    ancestorResize = true,\n    elementResize = typeof ResizeObserver === 'function',\n    layoutShift = typeof IntersectionObserver === 'function',\n    animationFrame = false\n  } = options;\n  const referenceEl = unwrapElement(reference);\n  const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n  ancestors.forEach(ancestor => {\n    ancestorScroll && ancestor.addEventListener('scroll', update, {\n      passive: true\n    });\n    ancestorResize && ancestor.addEventListener('resize', update);\n  });\n  const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n  let reobserveFrame = -1;\n  let resizeObserver = null;\n  if (elementResize) {\n    resizeObserver = new ResizeObserver(_ref => {\n      let [firstEntry] = _ref;\n      if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n        // Prevent update loops when using the `size` middleware.\n        // https://github.com/floating-ui/floating-ui/issues/1740\n        resizeObserver.unobserve(floating);\n        cancelAnimationFrame(reobserveFrame);\n        reobserveFrame = requestAnimationFrame(() => {\n          var _resizeObserver;\n          (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n        });\n      }\n      update();\n    });\n    if (referenceEl && !animationFrame) {\n      resizeObserver.observe(referenceEl);\n    }\n    resizeObserver.observe(floating);\n  }\n  let frameId;\n  let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n  if (animationFrame) {\n    frameLoop();\n  }\n  function frameLoop() {\n    const nextRefRect = getBoundingClientRect(reference);\n    if (prevRefRect && (nextRefRect.x !== prevRefRect.x || nextRefRect.y !== prevRefRect.y || nextRefRect.width !== prevRefRect.width || nextRefRect.height !== prevRefRect.height)) {\n      update();\n    }\n    prevRefRect = nextRefRect;\n    frameId = requestAnimationFrame(frameLoop);\n  }\n  update();\n  return () => {\n    var _resizeObserver2;\n    ancestors.forEach(ancestor => {\n      ancestorScroll && ancestor.removeEventListener('scroll', update);\n      ancestorResize && ancestor.removeEventListener('resize', update);\n    });\n    cleanupIo == null || cleanupIo();\n    (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n    resizeObserver = null;\n    if (animationFrame) {\n      cancelAnimationFrame(frameId);\n    }\n  };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element \u2014\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n  // This caches the expensive `getClippingElementAncestors` function so that\n  // multiple lifecycle resets re-use the same result. It only lives for a\n  // single call. If other functions become expensive, we can add them as well.\n  const cache = new Map();\n  const mergedOptions = {\n    platform,\n    ...options\n  };\n  const platformWithCache = {\n    ...mergedOptions.platform,\n    _c: cache\n  };\n  return computePosition$1(reference, floating, {\n    ...mergedOptions,\n    platform: platformWithCache\n  });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n", "import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n  let {\n    reference,\n    floating\n  } = _ref;\n  const sideAxis = getSideAxis(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const alignLength = getAxisLength(alignmentAxis);\n  const side = getSide(placement);\n  const isVertical = sideAxis === 'y';\n  const commonX = reference.x + reference.width / 2 - floating.width / 2;\n  const commonY = reference.y + reference.height / 2 - floating.height / 2;\n  const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n  let coords;\n  switch (side) {\n    case 'top':\n      coords = {\n        x: commonX,\n        y: reference.y - floating.height\n      };\n      break;\n    case 'bottom':\n      coords = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n    case 'right':\n      coords = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n    case 'left':\n      coords = {\n        x: reference.x - floating.width,\n        y: commonY\n      };\n      break;\n    default:\n      coords = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n  switch (getAlignment(placement)) {\n    case 'start':\n      coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n    case 'end':\n      coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n  }\n  return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform\n  } = config;\n  const validMiddleware = middleware.filter(Boolean);\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n  let rects = await platform.getElementRects({\n    reference,\n    floating,\n    strategy\n  });\n  let {\n    x,\n    y\n  } = computeCoordsFromPlacement(rects, placement, rtl);\n  let statefulPlacement = placement;\n  let middlewareData = {};\n  let resetCount = 0;\n  for (let i = 0; i < validMiddleware.length; i++) {\n    const {\n      name,\n      fn\n    } = validMiddleware[i];\n    const {\n      x: nextX,\n      y: nextY,\n      data,\n      reset\n    } = await fn({\n      x,\n      y,\n      initialPlacement: placement,\n      placement: statefulPlacement,\n      strategy,\n      middlewareData,\n      rects,\n      platform,\n      elements: {\n        reference,\n        floating\n      }\n    });\n    x = nextX != null ? nextX : x;\n    y = nextY != null ? nextY : y;\n    middlewareData = {\n      ...middlewareData,\n      [name]: {\n        ...middlewareData[name],\n        ...data\n      }\n    };\n    if (reset && resetCount <= 50) {\n      resetCount++;\n      if (typeof reset === 'object') {\n        if (reset.placement) {\n          statefulPlacement = reset.placement;\n        }\n        if (reset.rects) {\n          rects = reset.rects === true ? await platform.getElementRects({\n            reference,\n            floating,\n            strategy\n          }) : reset.rects;\n        }\n        ({\n          x,\n          y\n        } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n      }\n      i = -1;\n    }\n  }\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData\n  };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n  var _await$platform$isEle;\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    x,\n    y,\n    platform,\n    rects,\n    elements,\n    strategy\n  } = state;\n  const {\n    boundary = 'clippingAncestors',\n    rootBoundary = 'viewport',\n    elementContext = 'floating',\n    altBoundary = false,\n    padding = 0\n  } = evaluate(options, state);\n  const paddingObject = getPaddingObject(padding);\n  const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n  const element = elements[altBoundary ? altContext : elementContext];\n  const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n    element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n    boundary,\n    rootBoundary,\n    strategy\n  }));\n  const rect = elementContext === 'floating' ? {\n    x,\n    y,\n    width: rects.floating.width,\n    height: rects.floating.height\n  } : rects.reference;\n  const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n  const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n    x: 1,\n    y: 1\n  } : {\n    x: 1,\n    y: 1\n  };\n  const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  }) : rect);\n  return {\n    top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n    bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n    left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n    right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n  };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n  name: 'arrow',\n  options,\n  async fn(state) {\n    const {\n      x,\n      y,\n      placement,\n      rects,\n      platform,\n      elements,\n      middlewareData\n    } = state;\n    // Since `element` is required, we don't Partial<> the type.\n    const {\n      element,\n      padding = 0\n    } = evaluate(options, state) || {};\n    if (element == null) {\n      return {};\n    }\n    const paddingObject = getPaddingObject(padding);\n    const coords = {\n      x,\n      y\n    };\n    const axis = getAlignmentAxis(placement);\n    const length = getAxisLength(axis);\n    const arrowDimensions = await platform.getDimensions(element);\n    const isYAxis = axis === 'y';\n    const minProp = isYAxis ? 'top' : 'left';\n    const maxProp = isYAxis ? 'bottom' : 'right';\n    const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n    const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n    const startDiff = coords[axis] - rects.reference[axis];\n    const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n    let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n    // DOM platform can return `window` as the `offsetParent`.\n    if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n      clientSize = elements.floating[clientProp] || rects.floating[length];\n    }\n    const centerToReference = endDiff / 2 - startDiff / 2;\n\n    // If the padding is large enough that it causes the arrow to no longer be\n    // centered, modify the padding so that it is centered.\n    const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n    const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n    const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n    // Make sure the arrow doesn't overflow the floating element if the center\n    // point is outside the floating element's bounds.\n    const min$1 = minPadding;\n    const max = clientSize - arrowDimensions[length] - maxPadding;\n    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n    const offset = clamp(min$1, center, max);\n\n    // If the reference is small enough that the arrow's padding causes it to\n    // to point to nothing for an aligned placement, adjust the offset of the\n    // floating element itself. To ensure `shift()` continues to take action,\n    // a single reset is performed when this is true.\n    const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n    const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n    return {\n      [axis]: coords[axis] + alignmentOffset,\n      data: {\n        [axis]: offset,\n        centerOffset: center - offset - alignmentOffset,\n        ...(shouldAddOffset && {\n          alignmentOffset\n        })\n      },\n      reset: shouldAddOffset\n    };\n  }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n  const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n  return allowedPlacementsSortedByAlignment.filter(placement => {\n    if (alignment) {\n      return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n    }\n    return true;\n  });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'autoPlacement',\n    options,\n    async fn(state) {\n      var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n      const {\n        rects,\n        middlewareData,\n        placement,\n        platform,\n        elements\n      } = state;\n      const {\n        crossAxis = false,\n        alignment,\n        allowedPlacements = placements,\n        autoAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n      const currentPlacement = placements$1[currentIndex];\n      if (currentPlacement == null) {\n        return {};\n      }\n      const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n      // Make `computeCoords` start from the right place.\n      if (placement !== currentPlacement) {\n        return {\n          reset: {\n            placement: placements$1[0]\n          }\n        };\n      }\n      const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n      const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n        placement: currentPlacement,\n        overflows: currentOverflows\n      }];\n      const nextPlacement = placements$1[currentIndex + 1];\n\n      // There are more placements to check.\n      if (nextPlacement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: nextPlacement\n          }\n        };\n      }\n      const placementsSortedByMostSpace = allOverflows.map(d => {\n        const alignment = getAlignment(d.placement);\n        return [d.placement, alignment && crossAxis ?\n        // Check along the mainAxis and main crossAxis side.\n        d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n        // Check only the mainAxis.\n        d.overflows[0], d.overflows];\n      }).sort((a, b) => a[1] - b[1]);\n      const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n      // Aligned placements should not check their opposite crossAxis\n      // side.\n      getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n      const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n      if (resetPlacement !== placement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: resetPlacement\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'flip',\n    options,\n    async fn(state) {\n      var _middlewareData$arrow, _middlewareData$flip;\n      const {\n        placement,\n        middlewareData,\n        rects,\n        initialPlacement,\n        platform,\n        elements\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true,\n        fallbackPlacements: specifiedFallbackPlacements,\n        fallbackStrategy = 'bestFit',\n        fallbackAxisSideDirection = 'none',\n        flipAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n\n      // If a reset by the arrow was caused due to an alignment offset being\n      // added, we should skip any logic now since `flip()` has already done its\n      // work.\n      // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n      if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      const side = getSide(placement);\n      const initialSideAxis = getSideAxis(initialPlacement);\n      const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n      const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n      const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n      if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n        fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n      }\n      const placements = [initialPlacement, ...fallbackPlacements];\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const overflows = [];\n      let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n      if (checkMainAxis) {\n        overflows.push(overflow[side]);\n      }\n      if (checkCrossAxis) {\n        const sides = getAlignmentSides(placement, rects, rtl);\n        overflows.push(overflow[sides[0]], overflow[sides[1]]);\n      }\n      overflowsData = [...overflowsData, {\n        placement,\n        overflows\n      }];\n\n      // One or more sides is overflowing.\n      if (!overflows.every(side => side <= 0)) {\n        var _middlewareData$flip2, _overflowsData$filter;\n        const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n        const nextPlacement = placements[nextIndex];\n        if (nextPlacement) {\n          // Try next placement and re-run the lifecycle.\n          return {\n            data: {\n              index: nextIndex,\n              overflows: overflowsData\n            },\n            reset: {\n              placement: nextPlacement\n            }\n          };\n        }\n\n        // First, find the candidates that fit on the mainAxis side of overflow,\n        // then find the placement that fits the best on the main crossAxis side.\n        let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n        // Otherwise fallback.\n        if (!resetPlacement) {\n          switch (fallbackStrategy) {\n            case 'bestFit':\n              {\n                var _overflowsData$filter2;\n                const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n                  if (hasFallbackAxisSideDirection) {\n                    const currentSideAxis = getSideAxis(d.placement);\n                    return currentSideAxis === initialSideAxis ||\n                    // Create a bias to the `y` side axis due to horizontal\n                    // reading directions favoring greater width.\n                    currentSideAxis === 'y';\n                  }\n                  return true;\n                }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n                if (placement) {\n                  resetPlacement = placement;\n                }\n                break;\n              }\n            case 'initialPlacement':\n              resetPlacement = initialPlacement;\n              break;\n          }\n        }\n        if (placement !== resetPlacement) {\n          return {\n            reset: {\n              placement: resetPlacement\n            }\n          };\n        }\n      }\n      return {};\n    }\n  };\n};\n\nfunction getSideOffsets(overflow, rect) {\n  return {\n    top: overflow.top - rect.height,\n    right: overflow.right - rect.width,\n    bottom: overflow.bottom - rect.height,\n    left: overflow.left - rect.width\n  };\n}\nfunction isAnySideFullyClipped(overflow) {\n  return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'hide',\n    options,\n    async fn(state) {\n      const {\n        rects\n      } = state;\n      const {\n        strategy = 'referenceHidden',\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      switch (strategy) {\n        case 'referenceHidden':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              elementContext: 'reference'\n            });\n            const offsets = getSideOffsets(overflow, rects.reference);\n            return {\n              data: {\n                referenceHiddenOffsets: offsets,\n                referenceHidden: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        case 'escaped':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              altBoundary: true\n            });\n            const offsets = getSideOffsets(overflow, rects.floating);\n            return {\n              data: {\n                escapedOffsets: offsets,\n                escaped: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        default:\n          {\n            return {};\n          }\n      }\n    }\n  };\n};\n\nfunction getBoundingRect(rects) {\n  const minX = min(...rects.map(rect => rect.left));\n  const minY = min(...rects.map(rect => rect.top));\n  const maxX = max(...rects.map(rect => rect.right));\n  const maxY = max(...rects.map(rect => rect.bottom));\n  return {\n    x: minX,\n    y: minY,\n    width: maxX - minX,\n    height: maxY - minY\n  };\n}\nfunction getRectsByLine(rects) {\n  const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n  const groups = [];\n  let prevRect = null;\n  for (let i = 0; i < sortedRects.length; i++) {\n    const rect = sortedRects[i];\n    if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n      groups.push([rect]);\n    } else {\n      groups[groups.length - 1].push(rect);\n    }\n    prevRect = rect;\n  }\n  return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'inline',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        elements,\n        rects,\n        platform,\n        strategy\n      } = state;\n      // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n      // ClientRect's bounds, despite the event listener being triggered. A\n      // padding of 2 seems to handle this issue.\n      const {\n        padding = 2,\n        x,\n        y\n      } = evaluate(options, state);\n      const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n      const clientRects = getRectsByLine(nativeClientRects);\n      const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n      const paddingObject = getPaddingObject(padding);\n      function getBoundingClientRect() {\n        // There are two rects and they are disjoined.\n        if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n          // Find the first rect in which the point is fully inside.\n          return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n        }\n\n        // There are 2 or more connected rects.\n        if (clientRects.length >= 2) {\n          if (getSideAxis(placement) === 'y') {\n            const firstRect = clientRects[0];\n            const lastRect = clientRects[clientRects.length - 1];\n            const isTop = getSide(placement) === 'top';\n            const top = firstRect.top;\n            const bottom = lastRect.bottom;\n            const left = isTop ? firstRect.left : lastRect.left;\n            const right = isTop ? firstRect.right : lastRect.right;\n            const width = right - left;\n            const height = bottom - top;\n            return {\n              top,\n              bottom,\n              left,\n              right,\n              width,\n              height,\n              x: left,\n              y: top\n            };\n          }\n          const isLeftSide = getSide(placement) === 'left';\n          const maxRight = max(...clientRects.map(rect => rect.right));\n          const minLeft = min(...clientRects.map(rect => rect.left));\n          const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n          const top = measureRects[0].top;\n          const bottom = measureRects[measureRects.length - 1].bottom;\n          const left = minLeft;\n          const right = maxRight;\n          const width = right - left;\n          const height = bottom - top;\n          return {\n            top,\n            bottom,\n            left,\n            right,\n            width,\n            height,\n            x: left,\n            y: top\n          };\n        }\n        return fallback;\n      }\n      const resetRects = await platform.getElementRects({\n        reference: {\n          getBoundingClientRect\n        },\n        floating: elements.floating,\n        strategy\n      });\n      if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n        return {\n          reset: {\n            rects: resetRects\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n  const {\n    placement,\n    platform,\n    elements\n  } = state;\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n  const side = getSide(placement);\n  const alignment = getAlignment(placement);\n  const isVertical = getSideAxis(placement) === 'y';\n  const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n  const crossAxisMulti = rtl && isVertical ? -1 : 1;\n  const rawValue = evaluate(options, state);\n\n  // eslint-disable-next-line prefer-const\n  let {\n    mainAxis,\n    crossAxis,\n    alignmentAxis\n  } = typeof rawValue === 'number' ? {\n    mainAxis: rawValue,\n    crossAxis: 0,\n    alignmentAxis: null\n  } : {\n    mainAxis: rawValue.mainAxis || 0,\n    crossAxis: rawValue.crossAxis || 0,\n    alignmentAxis: rawValue.alignmentAxis\n  };\n  if (alignment && typeof alignmentAxis === 'number') {\n    crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n  }\n  return isVertical ? {\n    x: crossAxis * crossAxisMulti,\n    y: mainAxis * mainAxisMulti\n  } : {\n    x: mainAxis * mainAxisMulti,\n    y: crossAxis * crossAxisMulti\n  };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n  if (options === void 0) {\n    options = 0;\n  }\n  return {\n    name: 'offset',\n    options,\n    async fn(state) {\n      var _middlewareData$offse, _middlewareData$arrow;\n      const {\n        x,\n        y,\n        placement,\n        middlewareData\n      } = state;\n      const diffCoords = await convertValueToCoords(state, options);\n\n      // If the placement is the same and the arrow caused an alignment offset\n      // then we don't need to change the positioning coordinates.\n      if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      return {\n        x: x + diffCoords.x,\n        y: y + diffCoords.y,\n        data: {\n          ...diffCoords,\n          placement\n        }\n      };\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'shift',\n    options,\n    async fn(state) {\n      const {\n        x,\n        y,\n        placement\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = false,\n        limiter = {\n          fn: _ref => {\n            let {\n              x,\n              y\n            } = _ref;\n            return {\n              x,\n              y\n            };\n          }\n        },\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const crossAxis = getSideAxis(getSide(placement));\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      if (checkMainAxis) {\n        const minSide = mainAxis === 'y' ? 'top' : 'left';\n        const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n        const min = mainAxisCoord + overflow[minSide];\n        const max = mainAxisCoord - overflow[maxSide];\n        mainAxisCoord = clamp(min, mainAxisCoord, max);\n      }\n      if (checkCrossAxis) {\n        const minSide = crossAxis === 'y' ? 'top' : 'left';\n        const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n        const min = crossAxisCoord + overflow[minSide];\n        const max = crossAxisCoord - overflow[maxSide];\n        crossAxisCoord = clamp(min, crossAxisCoord, max);\n      }\n      const limitedCoords = limiter.fn({\n        ...state,\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      });\n      return {\n        ...limitedCoords,\n        data: {\n          x: limitedCoords.x - x,\n          y: limitedCoords.y - y,\n          enabled: {\n            [mainAxis]: checkMainAxis,\n            [crossAxis]: checkCrossAxis\n          }\n        }\n      };\n    }\n  };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    options,\n    fn(state) {\n      const {\n        x,\n        y,\n        placement,\n        rects,\n        middlewareData\n      } = state;\n      const {\n        offset = 0,\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const crossAxis = getSideAxis(placement);\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const rawOffset = evaluate(offset, state);\n      const computedOffset = typeof rawOffset === 'number' ? {\n        mainAxis: rawOffset,\n        crossAxis: 0\n      } : {\n        mainAxis: 0,\n        crossAxis: 0,\n        ...rawOffset\n      };\n      if (checkMainAxis) {\n        const len = mainAxis === 'y' ? 'height' : 'width';\n        const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n        const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n        if (mainAxisCoord < limitMin) {\n          mainAxisCoord = limitMin;\n        } else if (mainAxisCoord > limitMax) {\n          mainAxisCoord = limitMax;\n        }\n      }\n      if (checkCrossAxis) {\n        var _middlewareData$offse, _middlewareData$offse2;\n        const len = mainAxis === 'y' ? 'width' : 'height';\n        const isOriginSide = ['top', 'left'].includes(getSide(placement));\n        const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n        const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n        if (crossAxisCoord < limitMin) {\n          crossAxisCoord = limitMin;\n        } else if (crossAxisCoord > limitMax) {\n          crossAxisCoord = limitMax;\n        }\n      }\n      return {\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      };\n    }\n  };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element \u2014\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'size',\n    options,\n    async fn(state) {\n      var _state$middlewareData, _state$middlewareData2;\n      const {\n        placement,\n        rects,\n        platform,\n        elements\n      } = state;\n      const {\n        apply = () => {},\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const side = getSide(placement);\n      const alignment = getAlignment(placement);\n      const isYAxis = getSideAxis(placement) === 'y';\n      const {\n        width,\n        height\n      } = rects.floating;\n      let heightSide;\n      let widthSide;\n      if (side === 'top' || side === 'bottom') {\n        heightSide = side;\n        widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n      } else {\n        widthSide = side;\n        heightSide = alignment === 'end' ? 'top' : 'bottom';\n      }\n      const maximumClippingHeight = height - overflow.top - overflow.bottom;\n      const maximumClippingWidth = width - overflow.left - overflow.right;\n      const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n      const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n      const noShift = !state.middlewareData.shift;\n      let availableHeight = overflowAvailableHeight;\n      let availableWidth = overflowAvailableWidth;\n      if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n        availableWidth = maximumClippingWidth;\n      }\n      if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n        availableHeight = maximumClippingHeight;\n      }\n      if (noShift && !alignment) {\n        const xMin = max(overflow.left, 0);\n        const xMax = max(overflow.right, 0);\n        const yMin = max(overflow.top, 0);\n        const yMax = max(overflow.bottom, 0);\n        if (isYAxis) {\n          availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n        } else {\n          availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n        }\n      }\n      await apply({\n        ...state,\n        availableWidth,\n        availableHeight\n      });\n      const nextDimensions = await platform.getDimensions(elements.floating);\n      if (width !== nextDimensions.width || height !== nextDimensions.height) {\n        return {\n          reset: {\n            rects: true\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n", "/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n  x: v,\n  y: v\n});\nconst oppositeSideMap = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n  start: 'end',\n  end: 'start'\n};\nfunction clamp(start, value, end) {\n  return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n  return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n  return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n  return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n  return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n  return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const length = getAxisLength(alignmentAxis);\n  let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n  return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n  const lr = ['left', 'right'];\n  const rl = ['right', 'left'];\n  const tb = ['top', 'bottom'];\n  const bt = ['bottom', 'top'];\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rl : lr;\n      return isStart ? lr : rl;\n    case 'left':\n    case 'right':\n      return isStart ? tb : bt;\n    default:\n      return [];\n  }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n  const alignment = getAlignment(placement);\n  let list = getSideList(getSide(placement), direction === 'start', rtl);\n  if (alignment) {\n    list = list.map(side => side + \"-\" + alignment);\n    if (flipAlignment) {\n      list = list.concat(list.map(getOppositeAlignmentPlacement));\n    }\n  }\n  return list;\n}\nfunction getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\n  };\n}\nfunction getPaddingObject(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\nfunction rectToClientRect(rect) {\n  const {\n    x,\n    y,\n    width,\n    height\n  } = rect;\n  return {\n    width,\n    height,\n    top: y,\n    left: x,\n    right: x + width,\n    bottom: y + height,\n    x,\n    y\n  };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n", "/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n  x: v,\n  y: v\n});\nconst oppositeSideMap = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n  start: 'end',\n  end: 'start'\n};\nfunction clamp(start, value, end) {\n  return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n  return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n  return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n  return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n  return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n  return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const length = getAxisLength(alignmentAxis);\n  let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n  return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n  const lr = ['left', 'right'];\n  const rl = ['right', 'left'];\n  const tb = ['top', 'bottom'];\n  const bt = ['bottom', 'top'];\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rl : lr;\n      return isStart ? lr : rl;\n    case 'left':\n    case 'right':\n      return isStart ? tb : bt;\n    default:\n      return [];\n  }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n  const alignment = getAlignment(placement);\n  let list = getSideList(getSide(placement), direction === 'start', rtl);\n  if (alignment) {\n    list = list.map(side => side + \"-\" + alignment);\n    if (flipAlignment) {\n      list = list.concat(list.map(getOppositeAlignmentPlacement));\n    }\n  }\n  return list;\n}\nfunction getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\n  };\n}\nfunction getPaddingObject(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\nfunction rectToClientRect(rect) {\n  const {\n    x,\n    y,\n    width,\n    height\n  } = rect;\n  return {\n    width,\n    height,\n    top: y,\n    left: x,\n    right: x + width,\n    bottom: y + height,\n    x,\n    y\n  };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n", "function hasWindow() {\n  return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n  if (isNode(node)) {\n    return (node.nodeName || '').toLowerCase();\n  }\n  // Mocked nodes in testing environments may not be instances of Node. By\n  // returning `#document` an infinite loop won't occur.\n  // https://github.com/floating-ui/floating-ui/issues/2317\n  return '#document';\n}\nfunction getWindow(node) {\n  var _node$ownerDocument;\n  return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n  var _ref;\n  return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n  if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n  const {\n    overflow,\n    overflowX,\n    overflowY,\n    display\n  } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n  return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isTopLayer(element) {\n  return [':popover-open', ':modal'].some(selector => {\n    try {\n      return element.matches(selector);\n    } catch (e) {\n      return false;\n    }\n  });\n}\nfunction isContainingBlock(elementOrCss) {\n  const webkit = isWebKit();\n  const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  return css.transform !== 'none' || css.perspective !== 'none' || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || ['transform', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n  let currentNode = getParentNode(element);\n  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    if (isContainingBlock(currentNode)) {\n      return currentNode;\n    } else if (isTopLayer(currentNode)) {\n      return null;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  return null;\n}\nfunction isWebKit() {\n  if (typeof CSS === 'undefined' || !CSS.supports) return false;\n  return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nfunction isLastTraversableNode(node) {\n  return ['html', 'body', '#document'].includes(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n  if (isElement(element)) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n  return {\n    scrollLeft: element.scrollX,\n    scrollTop: element.scrollY\n  };\n}\nfunction getParentNode(node) {\n  if (getNodeName(node) === 'html') {\n    return node;\n  }\n  const result =\n  // Step into the shadow DOM of the parent of a slotted node.\n  node.assignedSlot ||\n  // DOM Element detected.\n  node.parentNode ||\n  // ShadowRoot detected.\n  isShadowRoot(node) && node.host ||\n  // Fallback.\n  getDocumentElement(node);\n  return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n  const parentNode = getParentNode(node);\n  if (isLastTraversableNode(parentNode)) {\n    return node.ownerDocument ? node.ownerDocument.body : node.body;\n  }\n  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n    return parentNode;\n  }\n  return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n  var _node$ownerDocument2;\n  if (list === void 0) {\n    list = [];\n  }\n  if (traverseIframes === void 0) {\n    traverseIframes = true;\n  }\n  const scrollableAncestor = getNearestOverflowAncestor(node);\n  const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n  const win = getWindow(scrollableAncestor);\n  if (isBody) {\n    const frameElement = getFrameElement(win);\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n  }\n  return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\nfunction getFrameElement(win) {\n  return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n", "import ApplicationController from '../application_controller'\nimport { get } from '@rails/request.js'\n\n// Attached by ComboboxFieldComponent to every <wa-combobox>.\n//\n// The selected value shows the option's `slot=\"start\"` content (a tag's color dot, a\n// contact's avatar) before its label:\n// - With `multiple`, each tag gets a copy through the combobox's `getTag`. Tags render inside\n//   the combobox's shadow root, where our utility classes don't apply, so the copy is exposed\n//   as `part=\"tag-start\"` and sized in combobox.css; anything else about it has to be inline\n//   styles or a Web Awesome element.\n// - A single select has no hook for this; its value is plain text in the search input. The\n//   copy goes in the combobox's own `start` slot instead, after any start decoration, and is\n//   hidden while the input holds a search rather than the selected label.\n//\n// With `remote:`, it loads options from an endpoint as the user types, by giving the\n// combobox a `dataSource`. `json` maps each result to a plain `{ value, label }` option.\n// `html` expects the endpoint to render the <wa-option>s itself, which the combobox inserts\n// unsanitized, so it must only ever point at our own endpoints.\n\n// The same parts the combobox's default tag exports, so the `::part(tag__\u2026)` rules still apply.\nconst TAG_EXPORTPARTS = [\n  'base:tag__base',\n  'content:tag__content',\n  'remove-button:tag__remove-button',\n  'remove-button__base:tag__remove-button__base',\n].join(', ')\n\n// The single-select value doesn't change on every one of these, but the combobox puts the\n// selected label back in the input on blur and close without firing anything of its own.\nconst SELECTED_START_EVENTS = ['input', 'change', 'focusout', 'wa-after-hide']\n\nexport default class extends ApplicationController {\n  static values = {\n    url: String,\n    queryParam: { type: String, default: 'q' },\n    format: { type: String, default: 'json' },\n    dataPath: { type: Array, default: [] },\n    valueField: { type: String, default: 'value' },\n    labelField: { type: String, default: 'label' },\n  }\n\n  async connect() {\n    if (this.hasUrlValue) this.element.dataSource = this.load\n\n    // A selected option that a later search leaves out is swapped for a plain stand-in with\n    // only its label, so keep each value's start content to reuse.\n    this.startContent = new Map()\n    await customElements.whenDefined('wa-combobox')\n    // Disconnected while waiting (a quick Turbo visit or morph): disconnect() already ran,\n    // so adding listeners now would leave them attached.\n    if (!this.element.isConnected) return\n\n    if (this.element.multiple) {\n      this.element.getTag = this.getTag\n    } else {\n      SELECTED_START_EVENTS.forEach((type) => this.element.addEventListener(type, this.renderSelectedStart))\n      this.renderSelectedStart()\n    }\n  }\n\n  disconnect() {\n    this.element.dataSource = null\n    SELECTED_START_EVENTS.forEach((type) => this.element.removeEventListener(type, this.renderSelectedStart))\n    this.removeSelectedStart()\n  }\n\n  getTag = (option) => {\n    const tag = document.createElement('wa-tag')\n    tag.setAttribute('part', 'tag')\n    tag.setAttribute('exportparts', TAG_EXPORTPARTS)\n    tag.setAttribute('size', this.element.size)\n    tag.toggleAttribute('pill', this.element.pill)\n    // The combobox removes the option whose value is on the tag when its remove button is clicked.\n    tag.setAttribute('with-remove', '')\n    tag.dataset.value = option.value\n\n    const copy = this.copyStart(option)\n    if (copy) {\n      copy.setAttribute('part', 'tag-start')\n      tag.append(copy)\n    }\n    tag.append(option.label)\n\n    return tag\n  }\n\n  renderSelectedStart = async () => {\n    await this.element.updateComplete\n\n    const option = this.element.selectedOptions[0]\n    const showingLabel = option && this.element.inputValue === option.label\n    const copy = showingLabel && this.copyStart(option)\n\n    this.removeSelectedStart()\n    if (!copy) return\n\n    copy.setAttribute('slot', 'start')\n    copy.dataset.comboboxSelectedStart = ''\n    this.element.append(copy)\n  }\n\n  // Found by attribute rather than kept on the instance: Turbo snapshots the page for its cache\n  // while the copy is still showing, so a restored page arrives with one this instance never made.\n  removeSelectedStart() {\n    this.element.querySelectorAll(':scope > [data-combobox-selected-start]').forEach((copy) => copy.remove())\n  }\n\n  copyStart(option) {\n    const start = option.querySelector(':scope > [slot=\"start\"]')\n    if (start) this.startContent.set(option.value, start)\n\n    const copy = this.startContent.get(option.value)?.cloneNode(true)\n    copy?.removeAttribute('slot')\n    return copy\n  }\n\n  load = async ({ query, signal }) => {\n    const url = new URL(this.urlValue, window.location.origin)\n    url.searchParams.set(this.queryParamValue, query)\n\n    const html = this.formatValue === 'html'\n    const response = await get(url.toString(), { responseKind: html ? 'html' : 'json', signal })\n    if (!response.ok) throw new Error(`Combobox options request failed with ${response.statusCode}`)\n\n    if (html) return response.text\n\n    const data = await response.json\n    const items = this.dataPathValue.reduce((value, key) => value?.[key], data) || []\n\n    return items.map((item) => ({\n      value: String(item[this.valueFieldValue]),\n      label: String(item[this.labelFieldValue] ?? ''),\n    }))\n  }\n}\n", "import ApplicationController from './application_controller'\nimport tippy from 'tippy.js'\n\nexport default class extends ApplicationController {\n  static values = {\n    content: String,\n    placement: { type: String, default: 'bottom' },\n    otherOptions: { type: Object, default: {} },\n    minCharCount: { type: String, default: '0' },\n  }\n\n  connect() {\n    this.initTippy()\n  }\n\n  disconnect() {\n    this.teardownTippy()\n  }\n\n  initTippy() {\n    const minContentLength = this.minCharCountValue\n    const charCount = this.contentValue.length\n\n    return charCount > minContentLength ? this.setTippy() : false\n  }\n\n  setTippy() {\n    this.tippy = tippy(this.element, {\n      content: this.contentValue,\n      placement: this.placementValue,\n      // This allows interactive: true to not cut off the tooltip.\n      // https://atomiks.github.io/tippyjs/v5/faq/#my-tooltip-appears-cut-off-or-is-not-showing-at-all\n      appendTo: document.body,\n      ...this.otherOptionsValue,\n    })\n  }\n\n  contentValueChanged(value, previousValue) {\n    if (value !== previousValue && previousValue !== '') {\n      if (this.tippy === undefined) {\n        return\n      }\n      this.tippy.destroy()\n      this.initTippy()\n    }\n  }\n\n  teardownTippy() {\n    if (this.tippy === undefined) {\n      return\n    }\n    this.tippy.destroy()\n  }\n}\n", "/* global AbortController */\nimport ApplicationController from '../../controllers/application_controller'\nexport default class extends ApplicationController {\n  connect() {\n    this.editor = this.element.editor\n    this.abortController = new AbortController()\n\n    this.element.addEventListener('keyup', this.handleKeyUp.bind(this), { signal: this.abortController.signal })\n  }\n\n  disconnect() {\n    this.abortController.abort()\n  }\n\n  handleKeyUp(event) {\n    const editorDocument = this.editor.getDocument()\n    const text = editorDocument.toString()\n    const position = this.editor.getSelectedRange()[0]\n\n    if (text.slice(position - 3, position) !== '```') return\n\n    event.preventDefault()\n\n    // Delete the backticks\n    this.editor.setSelectedRange([position - 3, position])\n    this.editor.deleteInDirection('backward')\n\n    // Record the undo entry\n    this.editor.recordUndoEntry('Insert Code Block')\n\n    // Create the code block\n    this.editor.activateAttribute('code')\n  }\n}\n", "import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n  /* Grab all links within the rendered trix content area, excluding turbo frame links,\n     setting their target attribute to _blank.\n  */\n  connect() {\n    let trixWrapper = this.element.querySelector('.trix-content')\n    ;[...trixWrapper.querySelectorAll('a:not([data-turbo-frame])')].forEach((link) => {\n      link.setAttribute('target', '_blank')\n    })\n  }\n\n  // TODO: When old community is deprecated, we can remove this function\n  setTrixContentLinkTargetBlank(event) {\n    const el = event.target\n    // Only set link target to blank if the link is inside a trix-content element\n    if (el.tagName.toLowerCase() !== 'a:not([data-turbo-frame])') return\n    if (el.closest('[class=\"trix-content\"]')) el.target = '_blank'\n  }\n}\n", "import ApplicationController from './application_controller'\n\nexport default class extends ApplicationController {\n  static values = {\n    attachments: { type: Boolean, default: true },\n    headings: { type: Boolean, default: true },\n  }\n\n  connect() {\n    if (!this.attachmentsValue) this.disableAttachments()\n    if (!this.headingsValue) this.disableHeadings()\n  }\n\n  // disable the trix editor's attachment(s) feature\n  // see: https://github.com/basecamp/trix#storing-attached-files\n  disableAttachments() {\n    this.toolbarFileToolsElement?.remove()\n    this.element.addEventListener('trix-file-accept', (event) => event.preventDefault(), true)\n  }\n\n  // disable the trix editor's heading(s) feature\n  disableHeadings() {\n    // this.element.editor.deactivateAttribute(\"heading1\")\n    this.heading1Element?.remove()\n  }\n\n  // returns the trix editor attached to the trix-editor element\n  get editor() {\n    return this.element.editor\n  }\n\n  // returns the trix toolbar element\n  get toolbarElement() {\n    let sibling\n    while ((sibling = this.element.previousElementSibling)) if (sibling.tagName.match(/trix-toolbar/i)) return sibling\n    return null\n  }\n\n  // returns the toolbar file-tools button group element\n  get toolbarFileToolsElement() {\n    return this.toolbarElement?.querySelector('[data-trix-button-group=file-tools]')\n  }\n\n  // returns the toolbar heading1 button element\n  get heading1Element() {\n    return this.toolbarElement?.querySelector('[data-trix-attribute=heading1]')\n  }\n}\n", "/* NOTE: This controller has a dependency on the Web Awesome Tooltip component. */\nimport ApplicationController from './application_controller'\n\nconst STRATEGIES = {\n  multiline: 'multiline',\n  singleline: 'singleline',\n  both: 'both',\n}\n\nexport default class extends ApplicationController {\n  static targets = ['text']\n  static values = {\n    strategy: { type: String, default: STRATEGIES.multiline },\n    placement: { type: String, default: 'top' },\n    message: String, // override the target's textContent if desired\n    showDelay: String,\n    hideDelay: String,\n    maxWidth: String,\n    classes: String,\n  }\n\n  strategyMethods = {}\n  tooltip = null\n\n  initialize() {\n    this.strategyMethods = {\n      [STRATEGIES.multiline]: () => this.checkForMultilineTruncation(),\n      [STRATEGIES.singleline]: () => this.checkForSingleLineTruncation(),\n      [STRATEGIES.both]: () => this.checkForMultilineTruncation() || this.checkForSingleLineTruncation(),\n    }\n  }\n\n  connect() {\n    // Re-check when the text is swapped out (e.g. by a turbo stream) or the element is resized.\n    this.resizeObserver = new ResizeObserver(() => this.checkIfTruncated())\n    this.resizeObserver.observe(this.textTarget)\n    this.mutationObserver = new MutationObserver(() => this.checkIfTruncated())\n    this.mutationObserver.observe(this.textTarget, {\n      childList: true,\n      characterData: true,\n      subtree: true,\n    })\n  }\n\n  disconnect() {\n    this.resizeObserver.disconnect()\n    this.mutationObserver.disconnect()\n    this.tooltip?.remove()\n    this.tooltip = null\n  }\n\n  checkIfTruncated() {\n    const strategyCheck = this.strategyMethods[this.strategyValue]\n\n    if (strategyCheck?.()) {\n      this.tooltip ||= this.applyTooltip()\n      this.tooltip.textContent = this.#tooltipText()\n    } else {\n      this.tooltip?.remove()\n      this.tooltip = null\n    }\n  }\n\n  checkForMultilineTruncation() {\n    return this.textTarget.scrollHeight > this.textTarget.clientHeight\n  }\n\n  checkForSingleLineTruncation() {\n    return this.textTarget.scrollWidth > this.textTarget.clientWidth\n  }\n\n  applyTooltip() {\n    const fragment = document.createDocumentFragment()\n    const tooltip = document.createElement('wa-tooltip')\n\n    this.textTarget.id ||= `tooltip-anchor-${crypto.randomUUID()}`\n    tooltip.setAttribute('for', this.textTarget.id)\n    tooltip.setAttribute('placement', this.placementValue)\n    if (this.hasShowDelayValue) tooltip.showDelay = this.#delayMilliseconds(this.showDelayValue)\n    if (this.hasHideDelayValue) tooltip.hideDelay = this.#delayMilliseconds(this.hideDelayValue)\n\n    const styles = this.#buildStyleOptions()\n    if (styles.length) {\n      tooltip.setAttribute('style', styles)\n    }\n\n    if (this.hasClassesValue) {\n      tooltip.setAttribute('class', this.classesValue)\n    }\n\n    fragment.appendChild(tooltip)\n    this.textTarget.parentNode.insertBefore(fragment, this.textTarget)\n    return tooltip\n  }\n\n  #tooltipText() {\n    return this.hasMessageValue ? this.messageValue : this.textTarget.textContent\n  }\n\n  #delayMilliseconds(value) {\n    return Number.parseFloat(value) * (value.endsWith('ms') ? 1 : 1000)\n  }\n\n  #buildStyleOptions() {\n    const options = [this.hasMaxWidthValue && `--max-width: ${this.maxWidthValue}`].filter(Boolean).join('; ')\n\n    return options\n  }\n}\n", "/* Stimulus controller to prevent user from losing unsaved changes to forms\n\n  Usage:\n    On the <form> element add:\n      1. data-controller='unsaved-changes'\n      2. data-action='beforeunload@window->unsaved-changes#confirmChanges\n                      turbo:before-visit@window->unsaved-changes#confirmChanges\n                      turbo:submit-end@window->unsaved-changes#reset'\n      3. (Optional) data-unsaved-changes-disabled-class-value='special-class-name'\n      4. (Optional) data-unsaved-changes-confirm-msg-value='Bah! You're gonna lose your stuff!'\n      5. (Optional) data-unsaved-changes-ignore='true'\n      6. (Optional) click@window->unsaved-changes#confirmFrameNavigation:capture when the form sits in a\n         turbo-frame that links navigate (e.g. tabs): the frame replaces the form before turbo:before-visit fires.\n\n    On the submit button(s) on the form add:\n      1. data-unsaved-changes-target='submit' (or) data: {unsaved_changes_target: \"submit\"}\n*/\nimport ApplicationController from './application_controller'\nimport { i18n } from '../i18n-js/config'\nimport Cookies from 'js-cookie'\n\nexport default class extends ApplicationController {\n  static targets = ['submit', 'restrictWithSubmit']\n  static values = {\n    disabledClass: String,\n    confirmMsg: String,\n    dirty: { type: Boolean, default: false },\n  }\n\n  isDirty = false\n  isSubmitting = false\n  isDiscarding = false\n  isInitializing = true\n  subscribedEvents = 'change input select2:select select2:unselecting cancel.daterangepicker dragula.drop sortable:drop'\n\n  connect() {\n    this.element.classList.add('unsaved-changes-root')\n\n    // Clear any stale readiness marker (e.g. baked into a Turbo snapshot\n    // restore) \u2014 this instance hasn't initialized yet.\n    this.element.removeAttribute('data-unsaved-changes-ready')\n\n    $(this.element).on(this.subscribedEvents, this.handleChange.bind(this))\n\n    // Track when form is being submitted to prevent beforeunload confirmation\n    this.boundHandleSubmit = this.handleSubmit.bind(this)\n    this.element.addEventListener('submit', this.boundHandleSubmit)\n\n    this.boundHandleMorph = this.handleMorph.bind(this)\n    document.addEventListener('turbo:morph', this.boundHandleMorph)\n\n    // Delay initial serialization to allow other controllers (autofill, validation) to settle\n    // This ensures originalForm captures the state after all initial JS has run\n    requestAnimationFrame(() => {\n      this.serializeForm()\n      this.isInitializing = false\n      // Behavior-neutral readiness marker. Changes made before this point are\n      // ignored (see handleChange), so a fill that lands before init leaves the\n      // submit stuck disabled. System tests wait for this attribute before\n      // filling so their edits register as unsaved changes.\n      this.element.setAttribute('data-unsaved-changes-ready', 'true')\n    })\n  }\n\n  disconnect() {\n    this.element.removeAttribute('data-unsaved-changes-ready')\n    $(this.element).off(this.subscribedEvents, this.handleChange.bind(this))\n    this.element.removeEventListener('submit', this.boundHandleSubmit)\n    document.removeEventListener('turbo:morph', this.boundHandleMorph)\n  }\n\n  handleSubmit() {\n    this.isSubmitting = true\n  }\n\n  // A morph refresh (turbo_refresh_method_tag(:morph)) keeps this element and controller but copies the server's\n  // markup over them: a new authenticity token, an enabled submit, and no root class or readiness marker. Without a\n  // fresh snapshot the just-saved form reads as dirty, so the submit stays enabled and leaving prompts \"Leave site?\".\n  handleMorph() {\n    if (this.isInitializing) return\n\n    this.isSubmitting = false\n    this.element.classList.add('unsaved-changes-root')\n    this.reset()\n    this.element.setAttribute('data-unsaved-changes-ready', 'true')\n  }\n\n  formValues() {\n    // FormData includes native form-associated Web Awesome controls.\n    return new URLSearchParams(\n      [...new FormData(this.element)].filter(([, value]) => typeof value === 'string')\n    ).toString()\n  }\n\n  serializeForm() {\n    this.originalForm = this.formValues()\n  }\n\n  initialize() {\n    this.reset()\n  }\n\n  handleChange(event) {\n    if (event.target.dataset?.unsavedChangesIgnore) return\n    // Ignore changes during initialization (other controllers like autofill may trigger changes)\n    if (this.isInitializing) return\n\n    // Track file selections separately from the serialized string fields.\n    const hasFileChanges = this.#hasFileInputChanges()\n    this.isDirty = hasFileChanges || this.formValues() !== this.originalForm\n    // Reset submitting flag when form changes (handles case where submit was prevented)\n    this.isSubmitting = false\n\n    if (this.isDirty) {\n      this.enableSubmit()\n      this.enableRestrictedTargets()\n      this.dispatch('has-changes')\n    } else {\n      this.reset()\n      this.dispatch('no-changes')\n    }\n\n    this.dispatch('change', { detail: { dirty: this.isDirty } })\n  }\n\n  enableSubmit() {\n    this.submitTargets.forEach((target) => {\n      target.classList.remove(this.disabledClassName)\n      target.disabled = false\n      target.title = ''\n    })\n  }\n\n  enableRestrictedTargets() {\n    this.restrictWithSubmitTargets.forEach((target) => {\n      target.classList.remove(this.disabledClassName)\n      target.disabled = false\n      target.title = ''\n    })\n  }\n\n  reset(event) {\n    const { formSubmission } = event?.detail || {}\n    const formElement = formSubmission?.formElement\n\n    if (formElement && formElement !== this.element) return\n\n    this.isDirty = this.dirtyValue || false\n    // Don't serialize during initialization - connect() will do it after other JS settles\n    if (!this.isInitializing) {\n      this.serializeForm()\n    }\n\n    // If dirtyValue is true, keep buttons enabled\n    if (this.isDirty) {\n      this.enableSubmit()\n      this.enableRestrictedTargets()\n    } else {\n      const locale = Cookies.get('locale') || 'en'\n      const title = i18n.t('unsaved_changes_controller.noChanges', { lng: locale })\n\n      this.submitTargets.forEach((target) => {\n        target.classList.add(this.disabledClassName)\n        target.disabled = true\n        target.title = title\n      })\n      this.restrictWithSubmitTargets.forEach((target) => {\n        target.classList.add(this.disabledClassName)\n        target.disabled = true\n        target.title = title\n      })\n    }\n\n    this.dispatch('reset')\n  }\n\n  confirmChanges(event) {\n    // Don't show confirmation if form is being submitted\n    if (this.isSubmitting) return\n\n    // Don't show confirmation if user already confirmed discard\n    if (this.isDiscarding) return\n\n    // Don't show confirmation if form is inside a hidden dialog\n    if (this.isInsideHiddenDialog()) return\n\n    // For turbo/click events, use isDirty (tracks user interactions).\n    // For beforeunload, use hasActualChanges() as a safety net.\n    const hasChanges =\n      event.type === 'turbo:before-visit' || event.type === 'click' ? this.isDirty : this.hasActualChanges()\n\n    if (hasChanges) {\n      if (event.type === 'turbo:before-visit' || event.type === 'click') {\n        if (!window.confirm(this.confirmMsg)) {\n          event.preventDefault()\n        } else {\n          // User confirmed navigation, prevent beforeunload from showing another dialog\n          this.isDiscarding = true\n        }\n      } else {\n        event.returnValue = this.confirmMsg\n        return event.returnValue\n      }\n    }\n  }\n\n  // form.reset() can't restore fields that JavaScript builds (pickers, image fields, tags), so reload the saved state.\n  // An optional data-unsaved-changes-message-param replaces the confirmation text. Unlike discard(), isDirty counts here:\n  // after a failed save the snapshot already holds the rejected edits, and a reload drops them.\n  discardAndReload(event) {\n    if ((this.isDirty || this.hasActualChanges()) && !window.confirm(event.params?.message || this.confirmMsg)) return\n\n    this.isDiscarding = true\n    window.location.reload()\n  }\n\n  // Runs in the capture phase so a cancelled click never reaches Turbo, which ignores defaultPrevented clicks.\n  confirmFrameNavigation(event) {\n    // Turbo leaves these to the browser (new tab or window), so the form stays and needs no prompt.\n    if (event.defaultPrevented || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey)\n      return\n\n    const link = event.target.closest?.('a[href]')\n    if (!link || !this.isDirty || this.isSubmitting || this.isDiscarding) return\n    if (!this.#replacesOwnFrame(link)) return\n\n    if (window.confirm(this.confirmMsg)) {\n      this.isDiscarding = true\n    } else {\n      event.preventDefault()\n      event.stopImmediatePropagation()\n    }\n  }\n\n  hasActualChanges() {\n    return this.#hasFileInputChanges() || this.formValues() !== this.originalForm\n  }\n\n  #replacesOwnFrame(link) {\n    const frame = this.element.closest('turbo-frame')\n    if (!frame || (link.target && link.target !== '_self') || link.dataset.turbo === 'false') return false\n\n    return (link.dataset.turboFrame || link.closest('turbo-frame')?.id) === frame.id\n  }\n\n  #hasFileInputChanges() {\n    return Array.from(this.element.querySelectorAll('input[type=\"file\"]')).some((input) => input.files.length > 0)\n  }\n\n  isInsideHiddenDialog() {\n    // Check if form is inside a Web Awesome dialog that is not open\n    const dialog = this.element.closest('wa-dialog')\n    if (dialog && !dialog.hasAttribute('open')) {\n      return true\n    }\n    return false\n  }\n\n  discard(event) {\n    // Check for actual changes, not just isDirty (which may be true due to dirtyValue)\n    if (this.hasActualChanges() && !window.confirm(this.confirmMsg)) {\n      event.preventDefault()\n      event.stopImmediatePropagation()\n    } else {\n      // Set flag to prevent beforeunload from showing another confirmation\n      this.isDiscarding = true\n      this.element.reset()\n      this.reset()\n      this.dispatch('discard')\n    }\n  }\n\n  get disabledClassName() {\n    return this.disabledClassValue === '' ? 'disabled' : this.disabledClassValue\n  }\n\n  get confirmMsg() {\n    const locale = Cookies.get('locale') || 'en'\n    const msg = i18n.t('unsaved_changes_controller.haveChanges', { lng: locale })\n\n    return this.confirmMsgValue === '' ? msg : this.confirmMsgValue\n  }\n}\n", "import '@rails/actiontext'\nimport Trix from 'trix'\nimport TrixEmbed from 'trix-embed'\n\nexport { Trix, TrixEmbed }\n\n// The <trix-editor> prevents focus after a morph via the idiomorph algorithm.\n// This workaround ensures re-initialization of the <trix-editor> after morphing\n// by forcing a stimulus controller re-connect which re-enables focus behavior.\n//\n// Wait for TurboBoost Command to finish and apply focus to the [focus-selector] element\n// TODO: (hopsoft) Update TurboBoost Elements to handle this after the Streams morph update\n//       This strategy handles the TurboBoost.Streams.morph.delay\nconst focusTrixEditor = (morphs, selector, attempts = 1) => {\n  if (attempts > 10) return\n  const container = document.getElementById(morphs)\n  const editor = container?.querySelector(selector)\n\n  if (container && editor) {\n    const clone = editor.cloneNode(true)\n    editor.replaceWith(clone)\n    clone.focus()\n  } else {\n    setTimeout(() => focusTrixEditor(morphs, selector, attempts + 1), 25 * attempts)\n  }\n}\n\ndocument.addEventListener('turbo-boost:command:finish', (event) => {\n  const { morphs, focusSelector } = event.detail.elementAttributes || {}\n  if (morphs && focusSelector) focusTrixEditor(morphs, focusSelector)\n})\n", "import { AttachmentUpload } from \"./attachment_upload\"\n\naddEventListener(\"trix-attachment-add\", event => {\n  const { attachment, target } = event\n\n  if (attachment.file) {\n    const upload = new AttachmentUpload(attachment, target)\n    upload.start()\n  }\n})\n", "import { DirectUpload } from \"@rails/activestorage\"\n\nexport class AttachmentUpload {\n  constructor(attachment, element) {\n    this.attachment = attachment\n    this.element = element\n    this.directUpload = new DirectUpload(attachment.file, this.directUploadUrl, this)\n  }\n\n  start() {\n    this.directUpload.create(this.directUploadDidComplete.bind(this))\n  }\n\n  directUploadWillStoreFileWithXHR(xhr) {\n    xhr.upload.addEventListener(\"progress\", event => {\n      const progress = event.loaded / event.total * 100\n      this.attachment.setUploadProgress(progress)\n    })\n  }\n\n  directUploadDidComplete(error, attributes) {\n    if (error) {\n      throw new Error(`Direct upload failed: ${error}`)\n    }\n\n    this.attachment.setAttributes({\n      sgid: attributes.attachable_sgid,\n      url: this.createBlobUrl(attributes.signed_id, attributes.filename)\n    })\n  }\n\n  createBlobUrl(signedId, filename) {\n    return this.blobUrlTemplate\n      .replace(\":signed_id\", signedId)\n      .replace(\":filename\", encodeURIComponent(filename))\n  }\n\n  get directUploadUrl() {\n    return this.element.dataset.directUploadUrl\n  }\n\n  get blobUrlTemplate() {\n    return this.element.dataset.blobUrlTemplate\n  }\n}\n", "export const attachmentSelector = \"[data-trix-attachment]\"\n\nconst attachments = {\n  preview: {\n    presentation: \"gallery\",\n    caption: {\n      name: true,\n      size: true,\n    },\n  },\n  file: {\n    caption: {\n      size: true,\n    },\n  },\n}\nexport default attachments\n", "const attributes = {\n  default: {\n    tagName: \"div\",\n    parse: false,\n  },\n  quote: {\n    tagName: \"blockquote\",\n    nestable: true,\n  },\n  heading1: {\n    tagName: \"h1\",\n    terminal: true,\n    breakOnReturn: true,\n    group: false,\n  },\n  code: {\n    tagName: \"pre\",\n    terminal: true,\n    htmlAttributes: [ \"language\" ],\n    text: {\n      plaintext: true,\n    },\n  },\n  bulletList: {\n    tagName: \"ul\",\n    parse: false,\n  },\n  bullet: {\n    tagName: \"li\",\n    listAttribute: \"bulletList\",\n    group: false,\n    nestable: true,\n    test(element) {\n      return tagName(element.parentNode) === attributes[this.listAttribute].tagName\n    },\n  },\n  numberList: {\n    tagName: \"ol\",\n    parse: false,\n  },\n  number: {\n    tagName: \"li\",\n    listAttribute: \"numberList\",\n    group: false,\n    nestable: true,\n    test(element) {\n      return tagName(element.parentNode) === attributes[this.listAttribute].tagName\n    },\n  },\n  attachmentGallery: {\n    tagName: \"div\",\n    exclusive: true,\n    terminal: true,\n    parse: false,\n    group: false,\n  },\n}\n\nconst tagName = (element) => element?.tagName?.toLowerCase()\n\nexport default attributes\n", "const androidVersionMatch = navigator.userAgent.match(/android\\s([0-9]+.*Chrome)/i)\nconst androidVersion = androidVersionMatch && parseInt(androidVersionMatch[1])\n\nexport default {\n  // Android emits composition events when moving the cursor through existing text\n  // Introduced in Chrome 65: https://bugs.chromium.org/p/chromium/issues/detail?id=764439#c9\n  composesExistingText: /Android.*Chrome/.test(navigator.userAgent),\n\n  // Android 13, especially on Samsung keyboards, emits extra compositionend and beforeinput events\n  // that can make the input handler lose the current selection or enter an infinite input -> render -> input\n  // loop.\n  recentAndroid: androidVersion && androidVersion > 12,\n  samsungAndroid: androidVersion && navigator.userAgent.match(/Android.*SM-/),\n\n  // IE 11 activates resizing handles on editable elements that have \"layout\"\n  forcesObjectResizing: /Trident.*rv:11/.test(navigator.userAgent),\n  // https://www.w3.org/TR/input-events-1/ + https://www.w3.org/TR/input-events-2/\n  supportsInputEvents: typeof InputEvent !== \"undefined\" &&\n    [ \"data\", \"getTargetRanges\", \"inputType\" ].every(prop => prop in InputEvent.prototype),\n}\n", "export default {\n  ADD_ATTR: [ \"language\" ],\n  SAFE_FOR_XML: false,\n  RETURN_DOM: true\n}\n", "export default {\n  attachFiles: \"Attach Files\",\n  bold: \"Bold\",\n  bullets: \"Bullets\",\n  byte: \"Byte\",\n  bytes: \"Bytes\",\n  captionPlaceholder: \"Add a caption…\",\n  code: \"Code\",\n  heading1: \"Heading\",\n  indent: \"Increase Level\",\n  italic: \"Italic\",\n  link: \"Link\",\n  numbers: \"Numbers\",\n  outdent: \"Decrease Level\",\n  quote: \"Quote\",\n  redo: \"Redo\",\n  remove: \"Remove\",\n  strike: \"Strikethrough\",\n  undo: \"Undo\",\n  unlink: \"Unlink\",\n  url: \"URL\",\n  urlPlaceholder: \"Enter a URL…\",\n  GB: \"GB\",\n  KB: \"KB\",\n  MB: \"MB\",\n  PB: \"PB\",\n  TB: \"TB\",\n}\n", "/* eslint-disable\n    no-case-declarations,\n*/\nimport lang from \"trix/config/lang\"\n\nconst sizes = [ lang.bytes, lang.KB, lang.MB, lang.GB, lang.TB, lang.PB ]\n\nexport default {\n  prefix: \"IEC\",\n  precision: 2,\n\n  formatter(number) {\n    switch (number) {\n      case 0:\n        return `0 ${lang.bytes}`\n      case 1:\n        return `1 ${lang.byte}`\n      default:\n        let base\n\n        if (this.prefix === \"SI\") {\n          base = 1000\n        } else if (this.prefix === \"IEC\") {\n          base = 1024\n        }\n\n        const exp = Math.floor(Math.log(number) / Math.log(base))\n        const humanSize = number / Math.pow(base, exp)\n        const string = humanSize.toFixed(this.precision)\n        const withoutInsignificantZeros = string.replace(/0*$/, \"\").replace(/\\.$/, \"\")\n        return `${withoutInsignificantZeros} ${sizes[exp]}`\n    }\n  },\n}\n", "export const ZERO_WIDTH_SPACE = \"\\uFEFF\"\nexport const NON_BREAKING_SPACE = \"\\u00A0\"\nexport const OBJECT_REPLACEMENT_CHARACTER = \"\\uFFFC\"\n", "export const extend = function(properties) {\n  for (const key in properties) {\n    const value = properties[key]\n    this[key] = value\n  }\n  return this\n}\n", "import blockAttributes from \"trix/config/block_attributes\"\nimport { ZERO_WIDTH_SPACE } from \"trix/constants\"\nimport { extend } from \"./extend\"\nimport { attachmentSelector } from \"trix/config/attachments\"\n\nconst html = document.documentElement\nconst match = html.matches\n\nexport const handleEvent = function(eventName, { onElement, matchingSelector, withCallback, inPhase, preventDefault, times } = {}) {\n  const element = onElement ? onElement : html\n  const selector = matchingSelector\n  const useCapture = inPhase === \"capturing\"\n\n  const handler = function(event) {\n    if (times != null && --times === 0) {\n      handler.destroy()\n    }\n    const target = findClosestElementFromNode(event.target, { matchingSelector: selector })\n    if (target != null) {\n      withCallback?.call(target, event, target)\n      if (preventDefault) {\n        event.preventDefault()\n      }\n    }\n  }\n\n  handler.destroy = () => element.removeEventListener(eventName, handler, useCapture)\n\n  element.addEventListener(eventName, handler, useCapture)\n  return handler\n}\n\nexport const handleEventOnce = function(eventName, options = {}) {\n  options.times = 1\n  return handleEvent(eventName, options)\n}\n\nexport const createEvent = function(eventName, { bubbles, cancelable, attributes } = {}) {\n  bubbles = bubbles !== false\n  cancelable = cancelable !== false\n\n  const event = document.createEvent(\"Events\")\n  event.initEvent(eventName, bubbles, cancelable)\n  if (attributes != null) {\n    extend.call(event, attributes)\n  }\n  return event\n}\n\nexport const triggerEvent = function(eventName, { onElement, bubbles, cancelable, attributes } = {}) {\n  const element = onElement != null ? onElement : html\n  const event = createEvent(eventName, { bubbles, cancelable, attributes })\n  return element.dispatchEvent(event)\n}\n\nexport const elementMatchesSelector = function(element, selector) {\n  if (element?.nodeType === 1) {\n    return match.call(element, selector)\n  }\n}\n\nexport const findClosestElementFromNode = function(node, { matchingSelector, untilNode } = {}) {\n  while (node && node.nodeType !== Node.ELEMENT_NODE) {\n    node = node.parentNode\n  }\n  if (node == null) {\n    return\n  }\n\n  if (matchingSelector != null) {\n    if (node.closest && untilNode == null) {\n      return node.closest(matchingSelector)\n    } else {\n      while (node && node !== untilNode) {\n        if (elementMatchesSelector(node, matchingSelector)) {\n          return node\n        }\n        node = node.parentNode\n      }\n    }\n  } else {\n    return node\n  }\n}\n\nexport const findInnerElement = function(element) {\n  while (element?.firstElementChild) {\n    element = element.firstElementChild\n  }\n  return element\n}\n\nexport const innerElementIsActive = (element) =>\n  document.activeElement !== element && elementContainsNode(element, document.activeElement)\n\nexport const elementContainsNode = function(element, node) {\n  if (!element || !node) {\n    return\n  }\n  while (node) {\n    if (node === element) {\n      return true\n    }\n    node = node.parentNode\n  }\n}\n\nexport const findNodeFromContainerAndOffset = function(container, offset) {\n  if (!container) {\n    return\n  }\n  if (container.nodeType === Node.TEXT_NODE) {\n    return container\n  } else if (offset === 0) {\n    return container.firstChild != null ? container.firstChild : container\n  } else {\n    return container.childNodes.item(offset - 1)\n  }\n}\n\nexport const findElementFromContainerAndOffset = function(container, offset) {\n  const node = findNodeFromContainerAndOffset(container, offset)\n  return findClosestElementFromNode(node)\n}\n\nexport const findChildIndexOfNode = function(node) {\n  if (!node?.parentNode) {\n    return\n  }\n  let childIndex = 0\n  node = node.previousSibling\n  while (node) {\n    childIndex++\n    node = node.previousSibling\n  }\n  return childIndex\n}\n\nexport const removeNode = (node) => node?.parentNode?.removeChild(node)\n\nexport const walkTree = function(tree, { onlyNodesOfType, usingFilter, expandEntityReferences } = {}) {\n  const whatToShow = (() => {\n    switch (onlyNodesOfType) {\n      case \"element\":\n        return NodeFilter.SHOW_ELEMENT\n      case \"text\":\n        return NodeFilter.SHOW_TEXT\n      case \"comment\":\n        return NodeFilter.SHOW_COMMENT\n      default:\n        return NodeFilter.SHOW_ALL\n    }\n  })()\n\n  return document.createTreeWalker(\n    tree,\n    whatToShow,\n    usingFilter != null ? usingFilter : null,\n    expandEntityReferences === true\n  )\n}\n\nexport const tagName = (element) => element?.tagName?.toLowerCase()\n\nexport const makeElement = function(tag, options = {}) {\n  let key, value\n  if (typeof tag === \"object\") {\n    options = tag\n    tag = options.tagName\n  } else {\n    options = { attributes: options }\n  }\n\n  const element = document.createElement(tag)\n\n  if (options.editable != null) {\n    if (options.attributes == null) {\n      options.attributes = {}\n    }\n    options.attributes.contenteditable = options.editable\n  }\n\n  if (options.attributes) {\n    for (key in options.attributes) {\n      value = options.attributes[key]\n      element.setAttribute(key, value)\n    }\n  }\n\n  if (options.style) {\n    for (key in options.style) {\n      value = options.style[key]\n      element.style[key] = value\n    }\n  }\n\n  if (options.data) {\n    for (key in options.data) {\n      value = options.data[key]\n      element.dataset[key] = value\n    }\n  }\n\n  if (options.className) {\n    options.className.split(\" \").forEach((className) => {\n      element.classList.add(className)\n    })\n  }\n\n  if (options.textContent) {\n    element.textContent = options.textContent\n  }\n\n  if (options.childNodes) {\n    [].concat(options.childNodes).forEach((childNode) => {\n      element.appendChild(childNode)\n    })\n  }\n\n  return element\n}\n\nlet blockTagNames = undefined\n\nexport const getBlockTagNames = function() {\n  if (blockTagNames != null) {\n    return blockTagNames\n  }\n\n  blockTagNames = []\n  for (const key in blockAttributes) {\n    const attributes = blockAttributes[key]\n    if (attributes.tagName) {\n      blockTagNames.push(attributes.tagName)\n    }\n  }\n\n  return blockTagNames\n}\n\nexport const nodeIsBlockContainer = (node) => nodeIsBlockStartComment(node?.firstChild)\n\nexport const nodeProbablyIsBlockContainer = function(node) {\n  return getBlockTagNames().includes(tagName(node)) && !getBlockTagNames().includes(tagName(node.firstChild))\n}\n\nexport const nodeIsBlockStart = function(node, { strict } = { strict: true }) {\n  if (strict) {\n    return nodeIsBlockStartComment(node)\n  } else {\n    return (\n      nodeIsBlockStartComment(node) || !nodeIsBlockStartComment(node.firstChild) && nodeProbablyIsBlockContainer(node)\n    )\n  }\n}\n\nexport const nodeIsBlockStartComment = (node) => nodeIsCommentNode(node) && node?.data === \"block\"\n\nexport const nodeIsCommentNode = (node) => node?.nodeType === Node.COMMENT_NODE\n\nexport const nodeIsCursorTarget = function(node, { name } = {}) {\n  if (!node) {\n    return\n  }\n  if (nodeIsTextNode(node)) {\n    if (node.data === ZERO_WIDTH_SPACE) {\n      if (name) {\n        return node.parentNode.dataset.trixCursorTarget === name\n      } else {\n        return true\n      }\n    }\n  } else {\n    return nodeIsCursorTarget(node.firstChild)\n  }\n}\n\nexport const nodeIsAttachmentElement = (node) => elementMatchesSelector(node, attachmentSelector)\n\nexport const nodeIsEmptyTextNode = (node) => nodeIsTextNode(node) && node?.data === \"\"\n\nexport const nodeIsTextNode = (node) => node?.nodeType === Node.TEXT_NODE\n", "import browser from \"trix/config/browser\"\nimport { makeElement, removeNode } from \"trix/core/helpers/dom\"\n\nconst input = {\n  level2Enabled: true,\n\n  getLevel() {\n    if (this.level2Enabled && browser.supportsInputEvents) {\n      return 2\n    } else {\n      return 0\n    }\n  },\n  pickFiles(callback) {\n    const input = makeElement(\"input\", { type: \"file\", multiple: true, hidden: true, id: this.fileInputId })\n\n    input.addEventListener(\"change\", () => {\n      callback(input.files)\n      removeNode(input)\n    })\n\n    removeNode(document.getElementById(this.fileInputId))\n    document.body.appendChild(input)\n    input.click()\n  }\n}\n\nexport default input\n", "export default {\n  8: \"backspace\",\n  9: \"tab\",\n  13: \"return\",\n  27: \"escape\",\n  37: \"left\",\n  39: \"right\",\n  46: \"delete\",\n  68: \"d\",\n  72: \"h\",\n  79: \"o\",\n}\n", "export default {\n  removeBlankTableCells: false,\n  tableCellSeparator: \" | \",\n  tableRowSeparator: \"\\n\",\n}\n", "import { attachmentSelector } from \"trix/config/attachments\"\n\nexport default {\n  bold: {\n    tagName: \"strong\",\n    inheritable: true,\n    parser(element) {\n      const style = window.getComputedStyle(element)\n      return style.fontWeight === \"bold\" || style.fontWeight >= 600\n    },\n  },\n  italic: {\n    tagName: \"em\",\n    inheritable: true,\n    parser(element) {\n      const style = window.getComputedStyle(element)\n      return style.fontStyle === \"italic\"\n    },\n  },\n  href: {\n    groupTagName: \"a\",\n    parser(element) {\n      const matchingSelector = `a:not(${attachmentSelector})`\n      const link = element.closest(matchingSelector)\n      if (link) {\n        return link.getAttribute(\"href\")\n      }\n    },\n  },\n  strike: {\n    tagName: \"del\",\n    inheritable: true,\n  },\n  frozen: {\n    style: { backgroundColor: \"highlight\" },\n  },\n}\n", "import lang from \"trix/config/lang\"\n\nexport default {\n  getDefaultHTML() {\n    return `<div class=\"trix-button-row\">\n      <span class=\"trix-button-group trix-button-group--text-tools\" data-trix-button-group=\"text-tools\">\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-bold\" data-trix-attribute=\"bold\" data-trix-key=\"b\" title=\"${lang.bold}\" tabindex=\"-1\">${lang.bold}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-italic\" data-trix-attribute=\"italic\" data-trix-key=\"i\" title=\"${lang.italic}\" tabindex=\"-1\">${lang.italic}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-strike\" data-trix-attribute=\"strike\" title=\"${lang.strike}\" tabindex=\"-1\">${lang.strike}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-link\" data-trix-attribute=\"href\" data-trix-action=\"link\" data-trix-key=\"k\" title=\"${lang.link}\" tabindex=\"-1\">${lang.link}</button>\n      </span>\n\n      <span class=\"trix-button-group trix-button-group--block-tools\" data-trix-button-group=\"block-tools\">\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-heading-1\" data-trix-attribute=\"heading1\" title=\"${lang.heading1}\" tabindex=\"-1\">${lang.heading1}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-quote\" data-trix-attribute=\"quote\" title=\"${lang.quote}\" tabindex=\"-1\">${lang.quote}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-code\" data-trix-attribute=\"code\" title=\"${lang.code}\" tabindex=\"-1\">${lang.code}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-bullet-list\" data-trix-attribute=\"bullet\" title=\"${lang.bullets}\" tabindex=\"-1\">${lang.bullets}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-number-list\" data-trix-attribute=\"number\" title=\"${lang.numbers}\" tabindex=\"-1\">${lang.numbers}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-decrease-nesting-level\" data-trix-action=\"decreaseNestingLevel\" title=\"${lang.outdent}\" tabindex=\"-1\">${lang.outdent}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-increase-nesting-level\" data-trix-action=\"increaseNestingLevel\" title=\"${lang.indent}\" tabindex=\"-1\">${lang.indent}</button>\n      </span>\n\n      <span class=\"trix-button-group trix-button-group--file-tools\" data-trix-button-group=\"file-tools\">\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-attach\" data-trix-action=\"attachFiles\" title=\"${lang.attachFiles}\" tabindex=\"-1\">${lang.attachFiles}</button>\n      </span>\n\n      <span class=\"trix-button-group-spacer\"></span>\n\n      <span class=\"trix-button-group trix-button-group--history-tools\" data-trix-button-group=\"history-tools\">\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-undo\" data-trix-action=\"undo\" data-trix-key=\"z\" title=\"${lang.undo}\" tabindex=\"-1\">${lang.undo}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-redo\" data-trix-action=\"redo\" data-trix-key=\"shift+z\" title=\"${lang.redo}\" tabindex=\"-1\">${lang.redo}</button>\n      </span>\n    </div>\n\n    <div class=\"trix-dialogs\" data-trix-dialogs>\n      <div class=\"trix-dialog trix-dialog--link\" data-trix-dialog=\"href\" data-trix-dialog-attribute=\"href\">\n        <div class=\"trix-dialog__link-fields\">\n          <input type=\"url\" name=\"href\" class=\"trix-input trix-input--dialog\" placeholder=\"${lang.urlPlaceholder}\" aria-label=\"${lang.url}\" data-trix-validate-href required data-trix-input>\n          <div class=\"trix-button-group\">\n            <input type=\"button\" class=\"trix-button trix-button--dialog\" value=\"${lang.link}\" data-trix-method=\"setAttribute\">\n            <input type=\"button\" class=\"trix-button trix-button--dialog\" value=\"${lang.unlink}\" data-trix-method=\"removeAttribute\">\n          </div>\n        </div>\n      </div>\n    </div>`\n  },\n}\n", "const undo = { interval: 5000 }\nexport default undo\n", "export default {\n  attachment: \"attachment\",\n  attachmentCaption: \"attachment__caption\",\n  attachmentCaptionEditor: \"attachment__caption-editor\",\n  attachmentMetadata: \"attachment__metadata\",\n  attachmentMetadataContainer: \"attachment__metadata-container\",\n  attachmentName: \"attachment__name\",\n  attachmentProgress: \"attachment__progress\",\n  attachmentSize: \"attachment__size\",\n  attachmentToolbar: \"attachment__toolbar\",\n  attachmentGallery: \"attachment-gallery\",\n}\n", "export default class BasicObject {\n  static proxyMethod(expression) {\n    const { name, toMethod, toProperty, optional } = parseProxyMethodExpression(expression)\n\n    this.prototype[name] = function() {\n      let subject\n      let object\n\n      if (toMethod) {\n        if (optional) {\n          object = this[toMethod]?.()\n        } else {\n          object = this[toMethod]()\n        }\n      } else if (toProperty) {\n        object = this[toProperty]\n      }\n\n      if (optional) {\n        subject = object?.[name]\n        if (subject) {\n          return apply.call(subject, object, arguments)\n        }\n      } else {\n        subject = object[name]\n        return apply.call(subject, object, arguments)\n      }\n    }\n  }\n}\n\nconst parseProxyMethodExpression = function(expression) {\n  const match = expression.match(proxyMethodExpressionPattern)\n  if (!match) {\n    throw new Error(`can't parse @proxyMethod expression: ${expression}`)\n  }\n\n  const args = { name: match[4] }\n\n  if (match[2] != null) {\n    args.toMethod = match[1]\n  } else {\n    args.toProperty = match[1]\n  }\n\n  if (match[3] != null) {\n    args.optional = true\n  }\n\n  return args\n}\n\nconst { apply } = Function.prototype\n\nconst proxyMethodExpressionPattern = new RegExp(\"\\\n^\\\n(.+?)\\\n(\\\\(\\\\))?\\\n(\\\\?)?\\\n\\\\.\\\n(.+?)\\\n$\\\n\")\n", "import BasicObject from \"trix/core/basic_object\"\n\nexport default class UTF16String extends BasicObject {\n  static box(value = \"\") {\n    if (value instanceof this) {\n      return value\n    } else {\n      return this.fromUCS2String(value?.toString())\n    }\n  }\n\n  static fromUCS2String(ucs2String) {\n    return new this(ucs2String, ucs2decode(ucs2String))\n  }\n\n  static fromCodepoints(codepoints) {\n    return new this(ucs2encode(codepoints), codepoints)\n  }\n\n  constructor(ucs2String, codepoints) {\n    super(...arguments)\n    this.ucs2String = ucs2String\n    this.codepoints = codepoints\n    this.length = this.codepoints.length\n    this.ucs2Length = this.ucs2String.length\n  }\n\n  offsetToUCS2Offset(offset) {\n    return ucs2encode(this.codepoints.slice(0, Math.max(0, offset))).length\n  }\n\n  offsetFromUCS2Offset(ucs2Offset) {\n    return ucs2decode(this.ucs2String.slice(0, Math.max(0, ucs2Offset))).length\n  }\n\n  slice() {\n    return this.constructor.fromCodepoints(this.codepoints.slice(...arguments))\n  }\n\n  charAt(offset) {\n    return this.slice(offset, offset + 1)\n  }\n\n  isEqualTo(value) {\n    return this.constructor.box(value).ucs2String === this.ucs2String\n  }\n\n  toJSON() {\n    return this.ucs2String\n  }\n\n  getCacheKey() {\n    return this.ucs2String\n  }\n\n  toString() {\n    return this.ucs2String\n  }\n}\n\nconst hasArrayFrom = Array.from?.(\"\\ud83d\\udc7c\").length === 1\nconst hasStringCodePointAt = \" \".codePointAt?.(0) != null\nconst hasStringFromCodePoint = String.fromCodePoint?.(32, 128124) === \" \\ud83d\\udc7c\"\n\n// UCS-2 conversion helpers ported from Mathias Bynens' Punycode.js:\n// https://github.com/bestiejs/punycode.js#punycodeucs2\n\nlet ucs2decode, ucs2encode\n\n// Creates an array containing the numeric code points of each Unicode\n// character in the string. While JavaScript uses UCS-2 internally,\n// this function will convert a pair of surrogate halves (each of which\n// UCS-2 exposes as separate characters) into a single code point,\n// matching UTF-16.\nif (hasArrayFrom && hasStringCodePointAt) {\n  ucs2decode = (string) => Array.from(string).map((char) => char.codePointAt(0))\n} else {\n  ucs2decode = function(string) {\n    const output = []\n    let counter = 0\n    const { length } = string\n\n    while (counter < length) {\n      let value = string.charCodeAt(counter++)\n      if (0xd800 <= value && value <= 0xdbff && counter < length) {\n        // high surrogate, and there is a next character\n        const extra = string.charCodeAt(counter++)\n        if ((extra & 0xfc00) === 0xdc00) {\n          // low surrogate\n          value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000\n        } else {\n          // unmatched surrogate; only append this code unit, in case the\n          // next code unit is the high surrogate of a surrogate pair\n          counter--\n        }\n      }\n      output.push(value)\n    }\n\n    return output\n  }\n}\n\n// Creates a string based on an array of numeric code points.\nif (hasStringFromCodePoint) {\n  ucs2encode = (array) => String.fromCodePoint(...Array.from(array || []))\n} else {\n  ucs2encode = function(array) {\n    const characters = (() => {\n      const result = []\n\n      Array.from(array).forEach((value) => {\n        let output = \"\"\n        if (value > 0xffff) {\n          value -= 0x10000\n          output += String.fromCharCode(value >>> 10 & 0x3ff | 0xd800)\n          value = 0xdc00 | value & 0x3ff\n        }\n        result.push(output + String.fromCharCode(value))\n      })\n\n      return result\n    })()\n\n    return characters.join(\"\")\n  }\n}\n", "import BasicObject from \"trix/core/basic_object\"\nimport UTF16String from \"trix/core/utilities/utf16_string\"\n\nlet id = 0\n\nexport default class TrixObject extends BasicObject {\n  static fromJSONString(jsonString) {\n    return this.fromJSON(JSON.parse(jsonString))\n  }\n\n  constructor() {\n    super(...arguments)\n    this.id = ++id\n  }\n\n  hasSameConstructorAs(object) {\n    return this.constructor === object?.constructor\n  }\n\n  isEqualTo(object) {\n    return this === object\n  }\n\n  inspect() {\n    const parts = []\n    const contents = this.contentsForInspection() || {}\n\n    for (const key in contents) {\n      const value = contents[key]\n      parts.push(`${key}=${value}`)\n    }\n\n    return `#<${this.constructor.name}:${this.id}${parts.length ? ` ${parts.join(\", \")}` : \"\"}>`\n  }\n\n  contentsForInspection() {}\n\n  toJSONString() {\n    return JSON.stringify(this)\n  }\n\n  toUTF16String() {\n    return UTF16String.box(this)\n  }\n\n  getCacheKey() {\n    return this.id.toString()\n  }\n}\n", "/* eslint-disable\n    id-length,\n*/\nexport const arraysAreEqual = function(a = [], b = []) {\n  if (a.length !== b.length) {\n    return false\n  }\n  for (let index = 0; index < a.length; index++) {\n    const value = a[index]\n    if (value !== b[index]) {\n      return false\n    }\n  }\n  return true\n}\n\nexport const arrayStartsWith = (a = [], b = []) => arraysAreEqual(a.slice(0, b.length), b)\n\nexport const spliceArray = function(array, ...args) {\n  const result = array.slice(0)\n  result.splice(...args)\n  return result\n}\n\nexport const summarizeArrayChange = function(oldArray = [], newArray = []) {\n  const added = []\n  const removed = []\n\n  const existingValues = new Set()\n\n  oldArray.forEach((value) => {\n    existingValues.add(value)\n  })\n\n  const currentValues = new Set()\n\n  newArray.forEach((value) => {\n    currentValues.add(value)\n    if (!existingValues.has(value)) {\n      added.push(value)\n    }\n  })\n\n  oldArray.forEach((value) => {\n    if (!currentValues.has(value)) {\n      removed.push(value)\n    }\n  })\n\n  return { added, removed }\n}\n", "import { makeElement } from \"trix/core/helpers/dom\"\n\n// https://github.com/mathiasbynens/unicode-2.1.8/blob/master/Bidi_Class/Right_To_Left/regex.js\nconst RTL_PATTERN =\n  /[\\u05BE\\u05C0\\u05C3\\u05D0-\\u05EA\\u05F0-\\u05F4\\u061B\\u061F\\u0621-\\u063A\\u0640-\\u064A\\u066D\\u0671-\\u06B7\\u06BA-\\u06BE\\u06C0-\\u06CE\\u06D0-\\u06D5\\u06E5\\u06E6\\u200F\\u202B\\u202E\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE72\\uFE74\\uFE76-\\uFEFC]/\n\nexport const getDirection = (function() {\n  const input = makeElement(\"input\", { dir: \"auto\", name: \"x\", dirName: \"x.dir\" })\n  const textArea = makeElement(\"textarea\", { dir: \"auto\", name: \"y\", dirName: \"y.dir\" })\n  const form = makeElement(\"form\")\n  form.appendChild(input)\n  form.appendChild(textArea)\n\n  const supportsDirName = (function() {\n    try {\n      return new FormData(form).has(textArea.dirName)\n    } catch (error) {\n      return false\n    }\n  })()\n\n  const supportsDirSelector = (function() {\n    try {\n      return input.matches(\":dir(ltr),:dir(rtl)\")\n    } catch (error) {\n      return false\n    }\n  })()\n\n  if (supportsDirName) {\n    return function(string) {\n      textArea.value = string\n      return new FormData(form).get(textArea.dirName)\n    }\n  } else if (supportsDirSelector) {\n    return function(string) {\n      input.value = string\n      if (input.matches(\":dir(rtl)\")) {\n        return \"rtl\"\n      } else {\n        return \"ltr\"\n      }\n    }\n  } else {\n    return function(string) {\n      const char = string.trim().charAt(0)\n      if (RTL_PATTERN.test(char)) {\n        return \"rtl\"\n      } else {\n        return \"ltr\"\n      }\n    }\n  }\n})()\n", "import * as config from \"trix/config\"\n\nlet allAttributeNames = null\nlet blockAttributeNames = null\nlet textAttributeNames = null\nlet listAttributeNames = null\n\nexport const getAllAttributeNames = () => {\n  if (!allAttributeNames) {\n    allAttributeNames = getTextAttributeNames().concat(getBlockAttributeNames())\n  }\n  return allAttributeNames\n}\n\nexport const getBlockConfig = (attributeName) => config.blockAttributes[attributeName]\n\nexport const getBlockAttributeNames = () => {\n  if (!blockAttributeNames) {\n    blockAttributeNames = Object.keys(config.blockAttributes)\n  }\n  return blockAttributeNames\n}\n\nexport const getTextConfig = (attributeName) => config.textAttributes[attributeName]\n\nexport const getTextAttributeNames = () => {\n  if (!textAttributeNames) {\n    textAttributeNames = Object.keys(config.textAttributes)\n  }\n  return textAttributeNames\n}\n\nexport const getListAttributeNames = () => {\n  if (!listAttributeNames) {\n    listAttributeNames = []\n    for (const key in config.blockAttributes) {\n      const { listAttribute } = config.blockAttributes[key]\n      if (listAttribute != null) {\n        listAttributeNames.push(listAttribute)\n      }\n    }\n  }\n  return listAttributeNames\n}\n", "/* eslint-disable\n*/\nexport const installDefaultCSSForTagName = function(tagName, defaultCSS) {\n  const styleElement = insertStyleElementForTagName(tagName)\n  styleElement.textContent = defaultCSS.replace(/%t/g, tagName)\n}\n\nconst insertStyleElementForTagName = function(tagName) {\n  const element = document.createElement(\"style\")\n  element.setAttribute(\"type\", \"text/css\")\n  element.setAttribute(\"data-tag-name\", tagName.toLowerCase())\n  const nonce = getCSPNonce()\n  if (nonce) {\n    element.setAttribute(\"nonce\", nonce)\n  }\n  document.head.insertBefore(element, document.head.firstChild)\n  return element\n}\n\nconst getCSPNonce = function() {\n  const element = getMetaElement(\"trix-csp-nonce\") || getMetaElement(\"csp-nonce\")\n  if (element) {\n    const { nonce, content } = element\n    return nonce == \"\" ? content : nonce\n  }\n}\n\nconst getMetaElement = (name) => document.head.querySelector(`meta[name=${name}]`)\n", "const testTransferData = { \"application/x-trix-feature-detection\": \"test\" }\n\nexport const dataTransferIsPlainText = function(dataTransfer) {\n  const text = dataTransfer.getData(\"text/plain\")\n  const html = dataTransfer.getData(\"text/html\")\n\n  if (text && html) {\n    const { body } = new DOMParser().parseFromString(html, \"text/html\")\n    if (body.textContent === text) {\n      return !body.querySelector(\"*\")\n    }\n  } else {\n    return text?.length\n  }\n}\n\nexport const dataTransferIsMsOfficePaste = ({ dataTransfer }) => {\n  return dataTransfer.types.includes(\"Files\") &&\n    dataTransfer.types.includes(\"text/html\") &&\n    dataTransfer.getData(\"text/html\").includes(\"urn:schemas-microsoft-com:office:office\")\n}\n\nexport const dataTransferIsWritable = function(dataTransfer) {\n  if (!dataTransfer?.setData) return false\n\n  for (const key in testTransferData) {\n    const value = testTransferData[key]\n\n    try {\n      dataTransfer.setData(key, value)\n      if (!dataTransfer.getData(key) === value) return false\n    } catch (error) {\n      return false\n    }\n  }\n  return true\n}\n\nexport const keyEventIsKeyboardCommand = (function() {\n  if (/Mac|^iP/.test(navigator.platform)) {\n    return (event) => event.metaKey\n  } else {\n    return (event) => event.ctrlKey\n  }\n})()\n\nexport function shouldRenderInmmediatelyToDealWithIOSDictation(inputEvent) {\n  if (/iPhone|iPad/.test(navigator.userAgent)) {\n    // Handle garbled content and duplicated newlines when using dictation on iOS 18+. Upon dictation completion, iOS sends\n    // the list of insertText / insertParagraph events in a quick sequence. If we don't render\n    // the editor synchronously, the internal range fails to update and results in garbled content or duplicated newlines.\n    //\n    // This workaround is necessary because iOS doesn't send composing events as expected while dictating:\n    // https://bugs.webkit.org/show_bug.cgi?id=261764\n    return !inputEvent.inputType || inputEvent.inputType === \"insertParagraph\"\n  } else {\n    return false\n  }\n}\n", "export const defer = (fn) => setTimeout(fn, 1)\n", "/* eslint-disable\n    id-length,\n*/\nexport const copyObject = function(object = {}) {\n  const result = {}\n  for (const key in object) {\n    const value = object[key]\n    result[key] = value\n  }\n  return result\n}\n\nexport const objectsAreEqual = function(a = {}, b = {}) {\n  if (Object.keys(a).length !== Object.keys(b).length) {\n    return false\n  }\n  for (const key in a) {\n    const value = a[key]\n    if (value !== b[key]) {\n      return false\n    }\n  }\n  return true\n}\n", "import { copyObject, objectsAreEqual } from \"trix/core/helpers/objects\"\n\nexport const normalizeRange = function(range) {\n  if (range == null) return\n\n  if (!Array.isArray(range)) {\n    range = [ range, range ]\n  }\n  return [ copyValue(range[0]), copyValue(range[1] != null ? range[1] : range[0]) ]\n}\n\nexport const rangeIsCollapsed = function(range) {\n  if (range == null) return\n\n  const [ start, end ] = normalizeRange(range)\n  return rangeValuesAreEqual(start, end)\n}\n\nexport const rangesAreEqual = function(leftRange, rightRange) {\n  if (leftRange == null || rightRange == null) return\n\n  const [ leftStart, leftEnd ] = normalizeRange(leftRange)\n  const [ rightStart, rightEnd ] = normalizeRange(rightRange)\n  return rangeValuesAreEqual(leftStart, rightStart) && rangeValuesAreEqual(leftEnd, rightEnd)\n}\n\nconst copyValue = function(value) {\n  if (typeof value === \"number\") {\n    return value\n  } else {\n    return copyObject(value)\n  }\n}\n\nconst rangeValuesAreEqual = function(left, right) {\n  if (typeof left === \"number\") {\n    return left === right\n  } else {\n    return objectsAreEqual(left, right)\n  }\n}\n", "import BasicObject from \"trix/core/basic_object\"\n\nexport default class SelectionChangeObserver extends BasicObject {\n  constructor() {\n    super(...arguments)\n    this.update = this.update.bind(this)\n    this.selectionManagers = []\n  }\n\n  start() {\n    if (!this.started) {\n      this.started = true\n      document.addEventListener(\"selectionchange\", this.update, true)\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.started = false\n      return document.removeEventListener(\"selectionchange\", this.update, true)\n    }\n  }\n\n  registerSelectionManager(selectionManager) {\n    if (!this.selectionManagers.includes(selectionManager)) {\n      this.selectionManagers.push(selectionManager)\n      return this.start()\n    }\n  }\n\n  unregisterSelectionManager(selectionManager) {\n    this.selectionManagers = this.selectionManagers.filter((sm) => sm !== selectionManager)\n    if (this.selectionManagers.length === 0) {\n      return this.stop()\n    }\n  }\n\n  notifySelectionManagersOfSelectionChange() {\n    return this.selectionManagers.map((selectionManager) => selectionManager.selectionDidChange())\n  }\n\n  update() {\n    this.notifySelectionManagersOfSelectionChange()\n  }\n\n  reset() {\n    this.update()\n  }\n}\n\nexport const selectionChangeObserver = new SelectionChangeObserver()\n\nexport const getDOMSelection = function() {\n  const selection = window.getSelection()\n  if (selection.rangeCount > 0) {\n    return selection\n  }\n}\n\nexport const getDOMRange = function() {\n  const domRange = getDOMSelection()?.getRangeAt(0)\n  if (domRange) {\n    if (!domRangeIsPrivate(domRange)) {\n      return domRange\n    }\n  }\n}\n\nexport const setDOMRange = function(domRange) {\n  const selection = window.getSelection()\n  selection.removeAllRanges()\n  selection.addRange(domRange)\n  return selectionChangeObserver.update()\n}\n\n// In Firefox, clicking certain <input> elements changes the selection to a\n// private element used to draw its UI. Attempting to access properties of those\n// elements throws an error.\n// https://bugzilla.mozilla.org/show_bug.cgi?id=208427\nconst domRangeIsPrivate = (domRange) => nodeIsPrivate(domRange.startContainer) || nodeIsPrivate(domRange.endContainer)\n\nconst nodeIsPrivate = (node) => !Object.getPrototypeOf(node)\n", "/* eslint-disable\n    id-length,\n    no-useless-escape,\n*/\nimport { NON_BREAKING_SPACE, ZERO_WIDTH_SPACE } from \"trix/constants\"\nimport UTF16String from \"trix/core/utilities/utf16_string\"\n\nexport const normalizeSpaces = (string) =>\n  string.replace(new RegExp(`${ZERO_WIDTH_SPACE}`, \"g\"), \"\").replace(new RegExp(`${NON_BREAKING_SPACE}`, \"g\"), \" \")\n\nexport const normalizeNewlines = (string) => string.replace(/\\r\\n?/g, \"\\n\")\n\nexport const breakableWhitespacePattern = new RegExp(`[^\\\\S${NON_BREAKING_SPACE}]`)\n\nexport const squishBreakableWhitespace = (string) =>\n  string\n    // Replace all breakable whitespace characters with a space\n    .replace(new RegExp(`${breakableWhitespacePattern.source}`, \"g\"), \" \")\n    // Replace two or more spaces with a single space\n    .replace(/\\ {2,}/g, \" \")\n\nexport const summarizeStringChange = function(oldString, newString) {\n  let added, removed\n  oldString = UTF16String.box(oldString)\n  newString = UTF16String.box(newString)\n\n  if (newString.length < oldString.length) {\n    [ removed, added ] = utf16StringDifferences(oldString, newString)\n  } else {\n    [ added, removed ] = utf16StringDifferences(newString, oldString)\n  }\n\n  return { added, removed }\n}\n\nconst utf16StringDifferences = function(a, b) {\n  if (a.isEqualTo(b)) {\n    return [ \"\", \"\" ]\n  }\n\n  const diffA = utf16StringDifference(a, b)\n  const { length } = diffA.utf16String\n\n  let diffB\n\n  if (length) {\n    const { offset } = diffA\n    const codepoints = a.codepoints.slice(0, offset).concat(a.codepoints.slice(offset + length))\n    diffB = utf16StringDifference(b, UTF16String.fromCodepoints(codepoints))\n  } else {\n    diffB = utf16StringDifference(b, a)\n  }\n\n  return [ diffA.utf16String.toString(), diffB.utf16String.toString() ]\n}\n\nconst utf16StringDifference = function(a, b) {\n  let leftIndex = 0\n  let rightIndexA = a.length\n  let rightIndexB = b.length\n\n  while (leftIndex < rightIndexA && a.charAt(leftIndex).isEqualTo(b.charAt(leftIndex))) {\n    leftIndex++\n  }\n\n  while (rightIndexA > leftIndex + 1 && a.charAt(rightIndexA - 1).isEqualTo(b.charAt(rightIndexB - 1))) {\n    rightIndexA--\n    rightIndexB--\n  }\n\n  return {\n    utf16String: a.slice(leftIndex, rightIndexA),\n    offset: leftIndex,\n  }\n}\n", "import TrixObject from \"trix/core/object\" // Don't override window.Object\nimport { arraysAreEqual } from \"trix/core/helpers\"\n\nexport default class Hash extends TrixObject {\n  static fromCommonAttributesOfObjects(objects = []) {\n    if (!objects.length) {\n      return new this()\n    }\n    let hash = box(objects[0])\n    let keys = hash.getKeys()\n\n    objects.slice(1).forEach((object) => {\n      keys = hash.getKeysCommonToHash(box(object))\n      hash = hash.slice(keys)\n    })\n\n    return hash\n  }\n\n  static box(values) {\n    return box(values)\n  }\n\n  constructor(values = {}) {\n    super(...arguments)\n    this.values = copy(values)\n  }\n\n  add(key, value) {\n    return this.merge(object(key, value))\n  }\n\n  remove(key) {\n    return new Hash(copy(this.values, key))\n  }\n\n  get(key) {\n    return this.values[key]\n  }\n\n  has(key) {\n    return key in this.values\n  }\n\n  merge(values) {\n    return new Hash(merge(this.values, unbox(values)))\n  }\n\n  slice(keys) {\n    const values = {}\n\n    Array.from(keys).forEach((key) => {\n      if (this.has(key)) {\n        values[key] = this.values[key]\n      }\n    })\n\n    return new Hash(values)\n  }\n\n  getKeys() {\n    return Object.keys(this.values)\n  }\n\n  getKeysCommonToHash(hash) {\n    hash = box(hash)\n    return this.getKeys().filter((key) => this.values[key] === hash.values[key])\n  }\n\n  isEqualTo(values) {\n    return arraysAreEqual(this.toArray(), box(values).toArray())\n  }\n\n  isEmpty() {\n    return this.getKeys().length === 0\n  }\n\n  toArray() {\n    if (!this.array) {\n      const result = []\n      for (const key in this.values) {\n        const value = this.values[key]\n        result.push(result.push(key, value))\n      }\n      this.array = result.slice(0)\n    }\n\n    return this.array\n  }\n\n  toObject() {\n    return copy(this.values)\n  }\n\n  toJSON() {\n    return this.toObject()\n  }\n\n  contentsForInspection() {\n    return { values: JSON.stringify(this.values) }\n  }\n}\n\nconst object = function(key, value) {\n  const result = {}\n  result[key] = value\n  return result\n}\n\nconst merge = function(object, values) {\n  const result = copy(object)\n  for (const key in values) {\n    const value = values[key]\n    result[key] = value\n  }\n  return result\n}\n\nconst copy = function(object, keyToRemove) {\n  const result = {}\n  const sortedKeys = Object.keys(object).sort()\n\n  sortedKeys.forEach((key) => {\n    if (key !== keyToRemove) {\n      result[key] = object[key]\n    }\n  })\n\n  return result\n}\n\nconst box = function(object) {\n  if (object instanceof Hash) {\n    return object\n  } else {\n    return new Hash(object)\n  }\n}\n\nconst unbox = function(object) {\n  if (object instanceof Hash) {\n    return object.values\n  } else {\n    return object\n  }\n}\n", "export default class ObjectGroup {\n  static groupObjects(ungroupedObjects = [], { depth, asTree } = {}) {\n    let group\n    if (asTree) {\n      if (depth == null) {\n        depth = 0\n      }\n    }\n    const objects = []\n\n    Array.from(ungroupedObjects).forEach((object) => {\n      if (group) {\n        if (object.canBeGrouped?.(depth) && group[group.length - 1].canBeGroupedWith?.(object, depth)) {\n          group.push(object)\n          return\n        } else {\n          objects.push(new this(group, { depth, asTree }))\n          group = null\n        }\n      }\n\n      if (object.canBeGrouped?.(depth)) {\n        group = [ object ]\n      } else {\n        objects.push(object)\n      }\n    })\n\n    if (group) {\n      objects.push(new this(group, { depth, asTree }))\n    }\n    return objects\n  }\n\n  constructor(objects = [], { depth, asTree }) {\n    this.objects = objects\n    if (asTree) {\n      this.depth = depth\n      this.objects = this.constructor.groupObjects(this.objects, { asTree, depth: this.depth + 1 })\n    }\n  }\n\n  getObjects() {\n    return this.objects\n  }\n\n  getDepth() {\n    return this.depth\n  }\n\n  getCacheKey() {\n    const keys = [ \"objectGroup\" ]\n    Array.from(this.getObjects()).forEach((object) => {\n      keys.push(object.getCacheKey())\n    })\n    return keys.join(\"/\")\n  }\n}\n", "import BasicObject from \"trix/core/basic_object\"\n\nexport default class ObjectMap extends BasicObject {\n  constructor(objects = []) {\n    super(...arguments)\n    this.objects = {}\n\n    Array.from(objects).forEach((object) => {\n      const hash = JSON.stringify(object)\n      if (this.objects[hash] == null) {\n        this.objects[hash] = object\n      }\n    })\n  }\n\n  find(object) {\n    const hash = JSON.stringify(object)\n    return this.objects[hash]\n  }\n}\n", "export default class ElementStore {\n  constructor(elements) {\n    this.reset(elements)\n  }\n\n  add(element) {\n    const key = getKey(element)\n    this.elements[key] = element\n  }\n\n  remove(element) {\n    const key = getKey(element)\n    const value = this.elements[key]\n    if (value) {\n      delete this.elements[key]\n      return value\n    }\n  }\n\n  reset(elements = []) {\n    this.elements = {}\n    Array.from(elements).forEach((element) => {\n      this.add(element)\n    })\n    return elements\n  }\n}\n\nconst getKey = (element) => element.dataset.trixStoreKey\n", "import BasicObject from \"trix/core/basic_object\"\n\nexport default class Operation extends BasicObject {\n  isPerforming() {\n    return this.performing === true\n  }\n\n  hasPerformed() {\n    return this.performed === true\n  }\n\n  hasSucceeded() {\n    return this.performed && this.succeeded\n  }\n\n  hasFailed() {\n    return this.performed && !this.succeeded\n  }\n\n  getPromise() {\n    if (!this.promise) {\n      this.promise = new Promise((resolve, reject) => {\n        this.performing = true\n        return this.perform((succeeded, result) => {\n          this.succeeded = succeeded\n          this.performing = false\n          this.performed = true\n\n          if (this.succeeded) {\n            resolve(result)\n          } else {\n            reject(result)\n          }\n        })\n      })\n    }\n\n    return this.promise\n  }\n\n  perform(callback) {\n    return callback(false)\n  }\n\n  release() {\n    this.promise?.cancel?.()\n    this.promise = null\n    this.performing = null\n    this.performed = null\n    this.succeeded = null\n  }\n}\n\nOperation.proxyMethod(\"getPromise().then\")\nOperation.proxyMethod(\"getPromise().catch\")\n", "import BasicObject from \"trix/core/basic_object\"\nimport ObjectGroup from \"trix/core/collections/object_group\"\n\nexport default class ObjectView extends BasicObject {\n  constructor(object, options = {}) {\n    super(...arguments)\n    this.object = object\n    this.options = options\n    this.childViews = []\n    this.rootView = this\n  }\n\n  getNodes() {\n    if (!this.nodes) { this.nodes = this.createNodes() }\n    return this.nodes.map((node) => node.cloneNode(true))\n  }\n\n  invalidate() {\n    this.nodes = null\n    this.childViews = []\n    return this.parentView?.invalidate()\n  }\n\n  invalidateViewForObject(object) {\n    return this.findViewForObject(object)?.invalidate()\n  }\n\n  findOrCreateCachedChildView(viewClass, object, options) {\n    let view = this.getCachedViewForObject(object)\n    if (view) {\n      this.recordChildView(view)\n    } else {\n      view = this.createChildView(...arguments)\n      this.cacheViewForObject(view, object)\n    }\n    return view\n  }\n\n  createChildView(viewClass, object, options = {}) {\n    if (object instanceof ObjectGroup) {\n      options.viewClass = viewClass\n      viewClass = ObjectGroupView\n    }\n\n    const view = new viewClass(object, options)\n    return this.recordChildView(view)\n  }\n\n  recordChildView(view) {\n    view.parentView = this\n    view.rootView = this.rootView\n    this.childViews.push(view)\n    return view\n  }\n\n  getAllChildViews() {\n    let views = []\n\n    this.childViews.forEach((childView) => {\n      views.push(childView)\n      views = views.concat(childView.getAllChildViews())\n    })\n\n    return views\n  }\n\n  findElement() {\n    return this.findElementForObject(this.object)\n  }\n\n  findElementForObject(object) {\n    const id = object?.id\n    if (id) {\n      return this.rootView.element.querySelector(`[data-trix-id='${id}']`)\n    }\n  }\n\n  findViewForObject(object) {\n    for (const view of this.getAllChildViews()) {\n      if (view.object === object) {\n        return view\n      }\n    }\n  }\n\n  getViewCache() {\n    if (this.rootView === this) {\n      if (this.isViewCachingEnabled()) {\n        if (!this.viewCache) { this.viewCache = {} }\n        return this.viewCache\n      }\n    } else {\n      return this.rootView.getViewCache()\n    }\n  }\n\n  isViewCachingEnabled() {\n    return this.shouldCacheViews !== false\n  }\n\n  enableViewCaching() {\n    this.shouldCacheViews = true\n  }\n\n  disableViewCaching() {\n    this.shouldCacheViews = false\n  }\n\n  getCachedViewForObject(object) {\n    return this.getViewCache()?.[object.getCacheKey()]\n  }\n\n  cacheViewForObject(view, object) {\n    const cache = this.getViewCache()\n    if (cache) {\n      cache[object.getCacheKey()] = view\n    }\n  }\n\n  garbageCollectCachedViews() {\n    const cache = this.getViewCache()\n    if (cache) {\n      const views = this.getAllChildViews().concat(this)\n      const objectKeys = views.map((view) => view.object.getCacheKey())\n      for (const key in cache) {\n        if (!objectKeys.includes(key)) {\n          delete cache[key]\n        }\n      }\n    }\n  }\n}\n\nexport class ObjectGroupView extends ObjectView {\n  constructor() {\n    super(...arguments)\n    this.objectGroup = this.object\n    this.viewClass = this.options.viewClass\n    delete this.options.viewClass\n  }\n\n  getChildViews() {\n    if (!this.childViews.length) {\n      Array.from(this.objectGroup.getObjects()).forEach((object) => {\n        this.findOrCreateCachedChildView(this.viewClass, object, this.options)\n      })\n    }\n    return this.childViews\n  }\n\n  createNodes() {\n    const element = this.createContainerElement()\n\n    this.getChildViews().forEach((view) => {\n      Array.from(view.getNodes()).forEach((node) => {\n        element.appendChild(node)\n      })\n    })\n\n    return [ element ]\n  }\n\n  createContainerElement(depth = this.objectGroup.getDepth()) {\n    return this.getChildViews()[0].createContainerElement(depth)\n  }\n}\n", "/*! @license DOMPurify 3.2.7 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.7/LICENSE */\n\nconst {\n  entries,\n  setPrototypeOf,\n  isFrozen,\n  getPrototypeOf,\n  getOwnPropertyDescriptor\n} = Object;\nlet {\n  freeze,\n  seal,\n  create\n} = Object; // eslint-disable-line import/no-mutable-exports\nlet {\n  apply,\n  construct\n} = typeof Reflect !== 'undefined' && Reflect;\nif (!freeze) {\n  freeze = function freeze(x) {\n    return x;\n  };\n}\nif (!seal) {\n  seal = function seal(x) {\n    return x;\n  };\n}\nif (!apply) {\n  apply = function apply(func, thisArg) {\n    for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n      args[_key - 2] = arguments[_key];\n    }\n    return func.apply(thisArg, args);\n  };\n}\nif (!construct) {\n  construct = function construct(Func) {\n    for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      args[_key2 - 1] = arguments[_key2];\n    }\n    return new Func(...args);\n  };\n}\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySplice = unapply(Array.prototype.splice);\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(func) {\n  return function (thisArg) {\n    if (thisArg instanceof RegExp) {\n      thisArg.lastIndex = 0;\n    }\n    for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n      args[_key3 - 1] = arguments[_key3];\n    }\n    return apply(func, thisArg, args);\n  };\n}\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct(Func) {\n  return function () {\n    for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n      args[_key4] = arguments[_key4];\n    }\n    return construct(Func, args);\n  };\n}\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(set, array) {\n  let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n  if (setPrototypeOf) {\n    // Make 'in' and truthy checks like Boolean(set.constructor)\n    // independent of any properties defined on Object.prototype.\n    // Prevent prototype setters from intercepting set as a this value.\n    setPrototypeOf(set, null);\n  }\n  let l = array.length;\n  while (l--) {\n    let element = array[l];\n    if (typeof element === 'string') {\n      const lcElement = transformCaseFunc(element);\n      if (lcElement !== element) {\n        // Config presets (e.g. tags.js, attrs.js) are immutable.\n        if (!isFrozen(array)) {\n          array[l] = lcElement;\n        }\n        element = lcElement;\n      }\n    }\n    set[element] = true;\n  }\n  return set;\n}\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray(array) {\n  for (let index = 0; index < array.length; index++) {\n    const isPropertyExist = objectHasOwnProperty(array, index);\n    if (!isPropertyExist) {\n      array[index] = null;\n    }\n  }\n  return array;\n}\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone(object) {\n  const newObject = create(null);\n  for (const [property, value] of entries(object)) {\n    const isPropertyExist = objectHasOwnProperty(object, property);\n    if (isPropertyExist) {\n      if (Array.isArray(value)) {\n        newObject[property] = cleanArray(value);\n      } else if (value && typeof value === 'object' && value.constructor === Object) {\n        newObject[property] = clone(value);\n      } else {\n        newObject[property] = value;\n      }\n    }\n  }\n  return newObject;\n}\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter(object, prop) {\n  while (object !== null) {\n    const desc = getOwnPropertyDescriptor(object, prop);\n    if (desc) {\n      if (desc.get) {\n        return unapply(desc.get);\n      }\n      if (typeof desc.value === 'function') {\n        return unapply(desc.value);\n      }\n    }\n    object = getPrototypeOf(object);\n  }\n  function fallbackValue() {\n    return null;\n  }\n  return fallbackValue;\n}\n\nconst html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'search', 'section', 'select', 'shadow', 'slot', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\nconst svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'enterkeyhint', 'exportparts', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'inputmode', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'part', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'slot', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\nconst svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nconst svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\nconst mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nconst mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\nconst text = freeze(['#text']);\n\nconst html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'exportparts', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inert', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'part', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'slot', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);\nconst svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\nconst mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\nconst xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n// eslint-disable-next-line unicorn/better-regex\nconst MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nconst ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nconst TMPLIT_EXPR = seal(/\\$\\{[\\w\\W]*/gm); // eslint-disable-line unicorn/better-regex\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nconst DOCTYPE_NAME = seal(/^html$/i);\nconst CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\nvar EXPRESSIONS = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  ARIA_ATTR: ARIA_ATTR,\n  ATTR_WHITESPACE: ATTR_WHITESPACE,\n  CUSTOM_ELEMENT: CUSTOM_ELEMENT,\n  DATA_ATTR: DATA_ATTR,\n  DOCTYPE_NAME: DOCTYPE_NAME,\n  ERB_EXPR: ERB_EXPR,\n  IS_ALLOWED_URI: IS_ALLOWED_URI,\n  IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n  MUSTACHE_EXPR: MUSTACHE_EXPR,\n  TMPLIT_EXPR: TMPLIT_EXPR\n});\n\n/* eslint-disable @typescript-eslint/indent */\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n  element: 1,\n  attribute: 2,\n  text: 3,\n  cdataSection: 4,\n  entityReference: 5,\n  // Deprecated\n  entityNode: 6,\n  // Deprecated\n  progressingInstruction: 7,\n  comment: 8,\n  document: 9,\n  documentType: 10,\n  documentFragment: 11,\n  notation: 12 // Deprecated\n};\nconst getGlobal = function getGlobal() {\n  return typeof window === 'undefined' ? null : window;\n};\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n  if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n    return null;\n  }\n  // Allow the callers to control the unique policy name\n  // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n  // Policy creation with duplicate names throws in Trusted Types.\n  let suffix = null;\n  const ATTR_NAME = 'data-tt-policy-suffix';\n  if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n    suffix = purifyHostElement.getAttribute(ATTR_NAME);\n  }\n  const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n  try {\n    return trustedTypes.createPolicy(policyName, {\n      createHTML(html) {\n        return html;\n      },\n      createScriptURL(scriptUrl) {\n        return scriptUrl;\n      }\n    });\n  } catch (_) {\n    // Policy creation failed (most likely another DOMPurify script has\n    // already run). Skip creating the policy, as this will only cause errors\n    // if TT are enforced.\n    console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n    return null;\n  }\n};\nconst _createHooksMap = function _createHooksMap() {\n  return {\n    afterSanitizeAttributes: [],\n    afterSanitizeElements: [],\n    afterSanitizeShadowDOM: [],\n    beforeSanitizeAttributes: [],\n    beforeSanitizeElements: [],\n    beforeSanitizeShadowDOM: [],\n    uponSanitizeAttribute: [],\n    uponSanitizeElement: [],\n    uponSanitizeShadowNode: []\n  };\n};\nfunction createDOMPurify() {\n  let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n  const DOMPurify = root => createDOMPurify(root);\n  DOMPurify.version = '3.2.7';\n  DOMPurify.removed = [];\n  if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {\n    // Not running in a browser, provide a factory function\n    // so that you can pass your own Window\n    DOMPurify.isSupported = false;\n    return DOMPurify;\n  }\n  let {\n    document\n  } = window;\n  const originalDocument = document;\n  const currentScript = originalDocument.currentScript;\n  const {\n    DocumentFragment,\n    HTMLTemplateElement,\n    Node,\n    Element,\n    NodeFilter,\n    NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n    HTMLFormElement,\n    DOMParser,\n    trustedTypes\n  } = window;\n  const ElementPrototype = Element.prototype;\n  const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n  const remove = lookupGetter(ElementPrototype, 'remove');\n  const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n  const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n  const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n  // As per issue #47, the web-components registry is inherited by a\n  // new document created via createHTMLDocument. As per the spec\n  // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n  // a new empty registry is used when creating a template contents owner\n  // document, so we use that as our parent document to ensure nothing\n  // is inherited.\n  if (typeof HTMLTemplateElement === 'function') {\n    const template = document.createElement('template');\n    if (template.content && template.content.ownerDocument) {\n      document = template.content.ownerDocument;\n    }\n  }\n  let trustedTypesPolicy;\n  let emptyHTML = '';\n  const {\n    implementation,\n    createNodeIterator,\n    createDocumentFragment,\n    getElementsByTagName\n  } = document;\n  const {\n    importNode\n  } = originalDocument;\n  let hooks = _createHooksMap();\n  /**\n   * Expose whether this browser supports running the full DOMPurify.\n   */\n  DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n  const {\n    MUSTACHE_EXPR,\n    ERB_EXPR,\n    TMPLIT_EXPR,\n    DATA_ATTR,\n    ARIA_ATTR,\n    IS_SCRIPT_OR_DATA,\n    ATTR_WHITESPACE,\n    CUSTOM_ELEMENT\n  } = EXPRESSIONS;\n  let {\n    IS_ALLOWED_URI: IS_ALLOWED_URI$1\n  } = EXPRESSIONS;\n  /**\n   * We consider the elements and attributes below to be safe. Ideally\n   * don't add any new ones but feel free to remove unwanted ones.\n   */\n  /* allowed element names */\n  let ALLOWED_TAGS = null;\n  const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n  /* Allowed attribute names */\n  let ALLOWED_ATTR = null;\n  const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n  /*\n   * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n   * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n   * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n   * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n   */\n  let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n    tagNameCheck: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: null\n    },\n    attributeNameCheck: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: null\n    },\n    allowCustomizedBuiltInElements: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: false\n    }\n  }));\n  /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n  let FORBID_TAGS = null;\n  /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n  let FORBID_ATTR = null;\n  /* Decide if ARIA attributes are okay */\n  let ALLOW_ARIA_ATTR = true;\n  /* Decide if custom data attributes are okay */\n  let ALLOW_DATA_ATTR = true;\n  /* Decide if unknown protocols are okay */\n  let ALLOW_UNKNOWN_PROTOCOLS = false;\n  /* Decide if self-closing tags in attributes are allowed.\n   * Usually removed due to a mXSS issue in jQuery 3.0 */\n  let ALLOW_SELF_CLOSE_IN_ATTR = true;\n  /* Output should be safe for common template engines.\n   * This means, DOMPurify removes data attributes, mustaches and ERB\n   */\n  let SAFE_FOR_TEMPLATES = false;\n  /* Output should be safe even for XML used within HTML and alike.\n   * This means, DOMPurify removes comments when containing risky content.\n   */\n  let SAFE_FOR_XML = true;\n  /* Decide if document with <html>... should be returned */\n  let WHOLE_DOCUMENT = false;\n  /* Track whether config is already set on this instance of DOMPurify. */\n  let SET_CONFIG = false;\n  /* Decide if all elements (e.g. style, script) must be children of\n   * document.body. By default, browsers might move them to document.head */\n  let FORCE_BODY = false;\n  /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n   * string (or a TrustedHTML object if Trusted Types are supported).\n   * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n   */\n  let RETURN_DOM = false;\n  /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n   * string  (or a TrustedHTML object if Trusted Types are supported) */\n  let RETURN_DOM_FRAGMENT = false;\n  /* Try to return a Trusted Type object instead of a string, return a string in\n   * case Trusted Types are not supported  */\n  let RETURN_TRUSTED_TYPE = false;\n  /* Output should be free from DOM clobbering attacks?\n   * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n   */\n  let SANITIZE_DOM = true;\n  /* Achieve full DOM Clobbering protection by isolating the namespace of named\n   * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n   *\n   * HTML/DOM spec rules that enable DOM Clobbering:\n   *   - Named Access on Window (§7.3.3)\n   *   - DOM Tree Accessors (§3.1.5)\n   *   - Form Element Parent-Child Relations (§4.10.3)\n   *   - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n   *   - HTMLCollection (§4.2.10.2)\n   *\n   * Namespace isolation is implemented by prefixing `id` and `name` attributes\n   * with a constant string, i.e., `user-content-`\n   */\n  let SANITIZE_NAMED_PROPS = false;\n  const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n  /* Keep element content when removing element? */\n  let KEEP_CONTENT = true;\n  /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n   * of importing it into a new Document and returning a sanitized copy */\n  let IN_PLACE = false;\n  /* Allow usage of profiles like html, svg and mathMl */\n  let USE_PROFILES = {};\n  /* Tags to ignore content of when KEEP_CONTENT is true */\n  let FORBID_CONTENTS = null;\n  const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n  /* Tags that are safe for data: URIs */\n  let DATA_URI_TAGS = null;\n  const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n  /* Attributes safe for values like \"javascript:\" */\n  let URI_SAFE_ATTRIBUTES = null;\n  const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n  const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n  const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n  const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n  /* Document namespace */\n  let NAMESPACE = HTML_NAMESPACE;\n  let IS_EMPTY_INPUT = false;\n  /* Allowed XHTML+XML namespaces */\n  let ALLOWED_NAMESPACES = null;\n  const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n  let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n  let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n  // Certain elements are allowed in both SVG and HTML\n  // namespace. We need to specify them explicitly\n  // so that they don't get erroneously deleted from\n  // HTML namespace.\n  const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n  /* Parsing of strict XHTML documents */\n  let PARSER_MEDIA_TYPE = null;\n  const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n  const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n  let transformCaseFunc = null;\n  /* Keep a reference to config to pass to hooks */\n  let CONFIG = null;\n  /* Ideally, do not touch anything below this line */\n  /* ______________________________________________ */\n  const formElement = document.createElement('form');\n  const isRegexOrFunction = function isRegexOrFunction(testValue) {\n    return testValue instanceof RegExp || testValue instanceof Function;\n  };\n  /**\n   * _parseConfig\n   *\n   * @param cfg optional config literal\n   */\n  // eslint-disable-next-line complexity\n  const _parseConfig = function _parseConfig() {\n    let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    if (CONFIG && CONFIG === cfg) {\n      return;\n    }\n    /* Shield configuration object from tampering */\n    if (!cfg || typeof cfg !== 'object') {\n      cfg = {};\n    }\n    /* Shield configuration object from prototype pollution */\n    cfg = clone(cfg);\n    PARSER_MEDIA_TYPE =\n    // eslint-disable-next-line unicorn/prefer-includes\n    SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n    // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n    transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n    /* Set configuration parameters */\n    ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n    ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n    ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n    URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;\n    DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;\n    FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n    FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : clone({});\n    FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : clone({});\n    USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n    ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n    ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n    ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n    ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n    SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n    SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n    WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n    RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n    RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n    RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n    FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n    SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n    SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n    KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n    IN_PLACE = cfg.IN_PLACE || false; // Default false\n    IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n    NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n    MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;\n    HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;\n    CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n    if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n      CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n    }\n    if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n      CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n    }\n    if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n      CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n    }\n    if (SAFE_FOR_TEMPLATES) {\n      ALLOW_DATA_ATTR = false;\n    }\n    if (RETURN_DOM_FRAGMENT) {\n      RETURN_DOM = true;\n    }\n    /* Parse profile info */\n    if (USE_PROFILES) {\n      ALLOWED_TAGS = addToSet({}, text);\n      ALLOWED_ATTR = [];\n      if (USE_PROFILES.html === true) {\n        addToSet(ALLOWED_TAGS, html$1);\n        addToSet(ALLOWED_ATTR, html);\n      }\n      if (USE_PROFILES.svg === true) {\n        addToSet(ALLOWED_TAGS, svg$1);\n        addToSet(ALLOWED_ATTR, svg);\n        addToSet(ALLOWED_ATTR, xml);\n      }\n      if (USE_PROFILES.svgFilters === true) {\n        addToSet(ALLOWED_TAGS, svgFilters);\n        addToSet(ALLOWED_ATTR, svg);\n        addToSet(ALLOWED_ATTR, xml);\n      }\n      if (USE_PROFILES.mathMl === true) {\n        addToSet(ALLOWED_TAGS, mathMl$1);\n        addToSet(ALLOWED_ATTR, mathMl);\n        addToSet(ALLOWED_ATTR, xml);\n      }\n    }\n    /* Merge configuration parameters */\n    if (cfg.ADD_TAGS) {\n      if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n        ALLOWED_TAGS = clone(ALLOWED_TAGS);\n      }\n      addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n    }\n    if (cfg.ADD_ATTR) {\n      if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n        ALLOWED_ATTR = clone(ALLOWED_ATTR);\n      }\n      addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n    }\n    if (cfg.ADD_URI_SAFE_ATTR) {\n      addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n    }\n    if (cfg.FORBID_CONTENTS) {\n      if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n        FORBID_CONTENTS = clone(FORBID_CONTENTS);\n      }\n      addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n    }\n    /* Add #text in case KEEP_CONTENT is set to true */\n    if (KEEP_CONTENT) {\n      ALLOWED_TAGS['#text'] = true;\n    }\n    /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n    if (WHOLE_DOCUMENT) {\n      addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n    }\n    /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n    if (ALLOWED_TAGS.table) {\n      addToSet(ALLOWED_TAGS, ['tbody']);\n      delete FORBID_TAGS.tbody;\n    }\n    if (cfg.TRUSTED_TYPES_POLICY) {\n      if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n        throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n      }\n      if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n        throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n      }\n      // Overwrite existing TrustedTypes policy.\n      trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n      // Sign local variables required by `sanitize`.\n      emptyHTML = trustedTypesPolicy.createHTML('');\n    } else {\n      // Uninitialized policy, attempt to initialize the internal dompurify policy.\n      if (trustedTypesPolicy === undefined) {\n        trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n      }\n      // If creating the internal policy succeeded sign internal variables.\n      if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n        emptyHTML = trustedTypesPolicy.createHTML('');\n      }\n    }\n    // Prevent further manipulation of configuration.\n    // Not available in IE8, Safari 5, etc.\n    if (freeze) {\n      freeze(cfg);\n    }\n    CONFIG = cfg;\n  };\n  /* Keep track of all possible SVG and MathML tags\n   * so that we can perform the namespace checks\n   * correctly. */\n  const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n  const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n  /**\n   * @param element a DOM element whose namespace is being checked\n   * @returns Return false if the element has a\n   *  namespace that a spec-compliant parser would never\n   *  return. Return true otherwise.\n   */\n  const _checkValidNamespace = function _checkValidNamespace(element) {\n    let parent = getParentNode(element);\n    // In JSDOM, if we're inside shadow DOM, then parentNode\n    // can be null. We just simulate parent in this case.\n    if (!parent || !parent.tagName) {\n      parent = {\n        namespaceURI: NAMESPACE,\n        tagName: 'template'\n      };\n    }\n    const tagName = stringToLowerCase(element.tagName);\n    const parentTagName = stringToLowerCase(parent.tagName);\n    if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n      return false;\n    }\n    if (element.namespaceURI === SVG_NAMESPACE) {\n      // The only way to switch from HTML namespace to SVG\n      // is via <svg>. If it happens via any other tag, then\n      // it should be killed.\n      if (parent.namespaceURI === HTML_NAMESPACE) {\n        return tagName === 'svg';\n      }\n      // The only way to switch from MathML to SVG is via`\n      // svg if parent is either <annotation-xml> or MathML\n      // text integration points.\n      if (parent.namespaceURI === MATHML_NAMESPACE) {\n        return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n      }\n      // We only allow elements that are defined in SVG\n      // spec. All others are disallowed in SVG namespace.\n      return Boolean(ALL_SVG_TAGS[tagName]);\n    }\n    if (element.namespaceURI === MATHML_NAMESPACE) {\n      // The only way to switch from HTML namespace to MathML\n      // is via <math>. If it happens via any other tag, then\n      // it should be killed.\n      if (parent.namespaceURI === HTML_NAMESPACE) {\n        return tagName === 'math';\n      }\n      // The only way to switch from SVG to MathML is via\n      // <math> and HTML integration points\n      if (parent.namespaceURI === SVG_NAMESPACE) {\n        return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n      }\n      // We only allow elements that are defined in MathML\n      // spec. All others are disallowed in MathML namespace.\n      return Boolean(ALL_MATHML_TAGS[tagName]);\n    }\n    if (element.namespaceURI === HTML_NAMESPACE) {\n      // The only way to switch from SVG to HTML is via\n      // HTML integration points, and from MathML to HTML\n      // is via MathML text integration points\n      if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n        return false;\n      }\n      if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n        return false;\n      }\n      // We disallow tags that are specific for MathML\n      // or SVG and should never appear in HTML namespace\n      return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n    }\n    // For XHTML and XML documents that support custom namespaces\n    if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n      return true;\n    }\n    // The code should never reach this place (this means\n    // that the element somehow got namespace that is not\n    // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n    // Return false just in case.\n    return false;\n  };\n  /**\n   * _forceRemove\n   *\n   * @param node a DOM node\n   */\n  const _forceRemove = function _forceRemove(node) {\n    arrayPush(DOMPurify.removed, {\n      element: node\n    });\n    try {\n      // eslint-disable-next-line unicorn/prefer-dom-node-remove\n      getParentNode(node).removeChild(node);\n    } catch (_) {\n      remove(node);\n    }\n  };\n  /**\n   * _removeAttribute\n   *\n   * @param name an Attribute name\n   * @param element a DOM node\n   */\n  const _removeAttribute = function _removeAttribute(name, element) {\n    try {\n      arrayPush(DOMPurify.removed, {\n        attribute: element.getAttributeNode(name),\n        from: element\n      });\n    } catch (_) {\n      arrayPush(DOMPurify.removed, {\n        attribute: null,\n        from: element\n      });\n    }\n    element.removeAttribute(name);\n    // We void attribute values for unremovable \"is\" attributes\n    if (name === 'is') {\n      if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n        try {\n          _forceRemove(element);\n        } catch (_) {}\n      } else {\n        try {\n          element.setAttribute(name, '');\n        } catch (_) {}\n      }\n    }\n  };\n  /**\n   * _initDocument\n   *\n   * @param dirty - a string of dirty markup\n   * @return a DOM, filled with the dirty markup\n   */\n  const _initDocument = function _initDocument(dirty) {\n    /* Create a HTML document */\n    let doc = null;\n    let leadingWhitespace = null;\n    if (FORCE_BODY) {\n      dirty = '<remove></remove>' + dirty;\n    } else {\n      /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n      const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n      leadingWhitespace = matches && matches[0];\n    }\n    if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n      // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n      dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + '</body></html>';\n    }\n    const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n    /*\n     * Use the DOMParser API by default, fallback later if needs be\n     * DOMParser not work for svg when has multiple root element.\n     */\n    if (NAMESPACE === HTML_NAMESPACE) {\n      try {\n        doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n      } catch (_) {}\n    }\n    /* Use createHTMLDocument in case DOMParser is not available */\n    if (!doc || !doc.documentElement) {\n      doc = implementation.createDocument(NAMESPACE, 'template', null);\n      try {\n        doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n      } catch (_) {\n        // Syntax error if dirtyPayload is invalid xml\n      }\n    }\n    const body = doc.body || doc.documentElement;\n    if (dirty && leadingWhitespace) {\n      body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n    }\n    /* Work on whole document or just its body */\n    if (NAMESPACE === HTML_NAMESPACE) {\n      return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n    }\n    return WHOLE_DOCUMENT ? doc.documentElement : body;\n  };\n  /**\n   * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n   *\n   * @param root The root element or node to start traversing on.\n   * @return The created NodeIterator\n   */\n  const _createNodeIterator = function _createNodeIterator(root) {\n    return createNodeIterator.call(root.ownerDocument || root, root,\n    // eslint-disable-next-line no-bitwise\n    NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n  };\n  /**\n   * _isClobbered\n   *\n   * @param element element to check for clobbering attacks\n   * @return true if clobbered, false if safe\n   */\n  const _isClobbered = function _isClobbered(element) {\n    return element instanceof HTMLFormElement && (typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function');\n  };\n  /**\n   * Checks whether the given object is a DOM node.\n   *\n   * @param value object to check whether it's a DOM node\n   * @return true is object is a DOM node\n   */\n  const _isNode = function _isNode(value) {\n    return typeof Node === 'function' && value instanceof Node;\n  };\n  function _executeHooks(hooks, currentNode, data) {\n    arrayForEach(hooks, hook => {\n      hook.call(DOMPurify, currentNode, data, CONFIG);\n    });\n  }\n  /**\n   * _sanitizeElements\n   *\n   * @protect nodeName\n   * @protect textContent\n   * @protect removeChild\n   * @param currentNode to check for permission to exist\n   * @return true if node was killed, false if left alive\n   */\n  const _sanitizeElements = function _sanitizeElements(currentNode) {\n    let content = null;\n    /* Execute a hook if present */\n    _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n    /* Check if element is clobbered or can clobber */\n    if (_isClobbered(currentNode)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Now let's check the element's type and name */\n    const tagName = transformCaseFunc(currentNode.nodeName);\n    /* Execute a hook if present */\n    _executeHooks(hooks.uponSanitizeElement, currentNode, {\n      tagName,\n      allowedTags: ALLOWED_TAGS\n    });\n    /* Detect mXSS attempts abusing namespace confusion */\n    if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w!]/g, currentNode.innerHTML) && regExpTest(/<[/\\w!]/g, currentNode.textContent)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Remove any occurrence of processing instructions */\n    if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Remove any kind of possibly harmful comments */\n    if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Remove element if anything forbids its presence */\n    if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n      /* Check if we have a custom element to handle */\n      if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n        if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n          return false;\n        }\n        if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n          return false;\n        }\n      }\n      /* Keep content except for bad-listed elements */\n      if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n        const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n        const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n        if (childNodes && parentNode) {\n          const childCount = childNodes.length;\n          for (let i = childCount - 1; i >= 0; --i) {\n            const childClone = cloneNode(childNodes[i], true);\n            childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n            parentNode.insertBefore(childClone, getNextSibling(currentNode));\n          }\n        }\n      }\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Check whether element has a valid namespace */\n    if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Make sure that older browsers don't get fallback-tag mXSS */\n    if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Sanitize element content to be template-safe */\n    if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n      /* Get the element's text content */\n      content = currentNode.textContent;\n      arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n        content = stringReplace(content, expr, ' ');\n      });\n      if (currentNode.textContent !== content) {\n        arrayPush(DOMPurify.removed, {\n          element: currentNode.cloneNode()\n        });\n        currentNode.textContent = content;\n      }\n    }\n    /* Execute a hook if present */\n    _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n    return false;\n  };\n  /**\n   * _isValidAttribute\n   *\n   * @param lcTag Lowercase tag name of containing element.\n   * @param lcName Lowercase attribute name.\n   * @param value Attribute value.\n   * @return Returns true if `value` is valid, otherwise false.\n   */\n  // eslint-disable-next-line complexity\n  const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n    /* Make sure attribute cannot clobber */\n    if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n      return false;\n    }\n    /* Allow valid data-* attributes: At least one character after \"-\"\n        (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n        XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n        We don't need to check the value; it's always URI safe. */\n    if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n      if (\n      // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n      // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n      // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n      _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName, lcTag)) ||\n      // Alternative, second condition checks if it's an `is`-attribute, AND\n      // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n      lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n        return false;\n      }\n      /* Check value is safe. First, is attr inert? If so, is safe */\n    } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n      return false;\n    } else ;\n    return true;\n  };\n  /**\n   * _isBasicCustomElement\n   * checks if at least one dash is included in tagName, and it's not the first char\n   * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n   *\n   * @param tagName name of the tag of the node to sanitize\n   * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n   */\n  const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n    return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n  };\n  /**\n   * _sanitizeAttributes\n   *\n   * @protect attributes\n   * @protect nodeName\n   * @protect removeAttribute\n   * @protect setAttribute\n   *\n   * @param currentNode to sanitize\n   */\n  const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n    /* Execute a hook if present */\n    _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n    const {\n      attributes\n    } = currentNode;\n    /* Check if we have attributes; if not we might have a text node */\n    if (!attributes || _isClobbered(currentNode)) {\n      return;\n    }\n    const hookEvent = {\n      attrName: '',\n      attrValue: '',\n      keepAttr: true,\n      allowedAttributes: ALLOWED_ATTR,\n      forceKeepAttr: undefined\n    };\n    let l = attributes.length;\n    /* Go backwards over all attributes; safely remove bad ones */\n    while (l--) {\n      const attr = attributes[l];\n      const {\n        name,\n        namespaceURI,\n        value: attrValue\n      } = attr;\n      const lcName = transformCaseFunc(name);\n      const initValue = attrValue;\n      let value = name === 'value' ? initValue : stringTrim(initValue);\n      /* Execute a hook if present */\n      hookEvent.attrName = lcName;\n      hookEvent.attrValue = value;\n      hookEvent.keepAttr = true;\n      hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n      _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n      value = hookEvent.attrValue;\n      /* Full DOM Clobbering protection via namespace isolation,\n       * Prefix id and name attributes with `user-content-`\n       */\n      if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n        // Remove the attribute with this value\n        _removeAttribute(name, currentNode);\n        // Prefix the value and later re-create the attribute with the sanitized value\n        value = SANITIZE_NAMED_PROPS_PREFIX + value;\n      }\n      /* Work around a security issue with comments inside attributes */\n      if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title|textarea)/i, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Make sure we cannot easily use animated hrefs, even if animations are allowed */\n      if (lcName === 'attributename' && stringMatch(value, 'href')) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Did the hooks approve of the attribute? */\n      if (hookEvent.forceKeepAttr) {\n        continue;\n      }\n      /* Did the hooks approve of the attribute? */\n      if (!hookEvent.keepAttr) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Work around a security issue in jQuery 3.0 */\n      if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Sanitize attribute content to be template-safe */\n      if (SAFE_FOR_TEMPLATES) {\n        arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n          value = stringReplace(value, expr, ' ');\n        });\n      }\n      /* Is `value` valid for this attribute? */\n      const lcTag = transformCaseFunc(currentNode.nodeName);\n      if (!_isValidAttribute(lcTag, lcName, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Handle attributes that require Trusted Types */\n      if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n        if (namespaceURI) ; else {\n          switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n            case 'TrustedHTML':\n              {\n                value = trustedTypesPolicy.createHTML(value);\n                break;\n              }\n            case 'TrustedScriptURL':\n              {\n                value = trustedTypesPolicy.createScriptURL(value);\n                break;\n              }\n          }\n        }\n      }\n      /* Handle invalid data-* attribute set by try-catching it */\n      if (value !== initValue) {\n        try {\n          if (namespaceURI) {\n            currentNode.setAttributeNS(namespaceURI, name, value);\n          } else {\n            /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n            currentNode.setAttribute(name, value);\n          }\n          if (_isClobbered(currentNode)) {\n            _forceRemove(currentNode);\n          } else {\n            arrayPop(DOMPurify.removed);\n          }\n        } catch (_) {\n          _removeAttribute(name, currentNode);\n        }\n      }\n    }\n    /* Execute a hook if present */\n    _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n  };\n  /**\n   * _sanitizeShadowDOM\n   *\n   * @param fragment to iterate over recursively\n   */\n  const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n    let shadowNode = null;\n    const shadowIterator = _createNodeIterator(fragment);\n    /* Execute a hook if present */\n    _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n    while (shadowNode = shadowIterator.nextNode()) {\n      /* Execute a hook if present */\n      _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n      /* Sanitize tags and elements */\n      _sanitizeElements(shadowNode);\n      /* Check attributes next */\n      _sanitizeAttributes(shadowNode);\n      /* Deep shadow DOM detected */\n      if (shadowNode.content instanceof DocumentFragment) {\n        _sanitizeShadowDOM(shadowNode.content);\n      }\n    }\n    /* Execute a hook if present */\n    _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n  };\n  // eslint-disable-next-line complexity\n  DOMPurify.sanitize = function (dirty) {\n    let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    let body = null;\n    let importedNode = null;\n    let currentNode = null;\n    let returnNode = null;\n    /* Make sure we have a string to sanitize.\n      DO NOT return early, as this will return the wrong type if\n      the user has requested a DOM object rather than a string */\n    IS_EMPTY_INPUT = !dirty;\n    if (IS_EMPTY_INPUT) {\n      dirty = '<!-->';\n    }\n    /* Stringify, in case dirty is an object */\n    if (typeof dirty !== 'string' && !_isNode(dirty)) {\n      if (typeof dirty.toString === 'function') {\n        dirty = dirty.toString();\n        if (typeof dirty !== 'string') {\n          throw typeErrorCreate('dirty is not a string, aborting');\n        }\n      } else {\n        throw typeErrorCreate('toString is not a function');\n      }\n    }\n    /* Return dirty HTML if DOMPurify cannot run */\n    if (!DOMPurify.isSupported) {\n      return dirty;\n    }\n    /* Assign config vars */\n    if (!SET_CONFIG) {\n      _parseConfig(cfg);\n    }\n    /* Clean up removed elements */\n    DOMPurify.removed = [];\n    /* Check if dirty is correctly typed for IN_PLACE */\n    if (typeof dirty === 'string') {\n      IN_PLACE = false;\n    }\n    if (IN_PLACE) {\n      /* Do some early pre-sanitization to avoid unsafe root nodes */\n      if (dirty.nodeName) {\n        const tagName = transformCaseFunc(dirty.nodeName);\n        if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n          throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n        }\n      }\n    } else if (dirty instanceof Node) {\n      /* If dirty is a DOM element, append to an empty document to avoid\n         elements being stripped by the parser */\n      body = _initDocument('<!---->');\n      importedNode = body.ownerDocument.importNode(dirty, true);\n      if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n        /* Node is already a body, use as is */\n        body = importedNode;\n      } else if (importedNode.nodeName === 'HTML') {\n        body = importedNode;\n      } else {\n        // eslint-disable-next-line unicorn/prefer-dom-node-append\n        body.appendChild(importedNode);\n      }\n    } else {\n      /* Exit directly if we have nothing to do */\n      if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n      // eslint-disable-next-line unicorn/prefer-includes\n      dirty.indexOf('<') === -1) {\n        return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n      }\n      /* Initialize the document to work on */\n      body = _initDocument(dirty);\n      /* Check we have a DOM node from the data */\n      if (!body) {\n        return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n      }\n    }\n    /* Remove first element node (ours) if FORCE_BODY is set */\n    if (body && FORCE_BODY) {\n      _forceRemove(body.firstChild);\n    }\n    /* Get node iterator */\n    const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n    /* Now start iterating over the created document */\n    while (currentNode = nodeIterator.nextNode()) {\n      /* Sanitize tags and elements */\n      _sanitizeElements(currentNode);\n      /* Check attributes next */\n      _sanitizeAttributes(currentNode);\n      /* Shadow DOM detected, sanitize it */\n      if (currentNode.content instanceof DocumentFragment) {\n        _sanitizeShadowDOM(currentNode.content);\n      }\n    }\n    /* If we sanitized `dirty` in-place, return it. */\n    if (IN_PLACE) {\n      return dirty;\n    }\n    /* Return sanitized string or DOM */\n    if (RETURN_DOM) {\n      if (RETURN_DOM_FRAGMENT) {\n        returnNode = createDocumentFragment.call(body.ownerDocument);\n        while (body.firstChild) {\n          // eslint-disable-next-line unicorn/prefer-dom-node-append\n          returnNode.appendChild(body.firstChild);\n        }\n      } else {\n        returnNode = body;\n      }\n      if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n        /*\n          AdoptNode() is not used because internal state is not reset\n          (e.g. the past names map of a HTMLFormElement), this is safe\n          in theory but we would rather not risk another attack vector.\n          The state that is cloned by importNode() is explicitly defined\n          by the specs.\n        */\n        returnNode = importNode.call(originalDocument, returnNode, true);\n      }\n      return returnNode;\n    }\n    let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n    /* Serialize doctype if allowed */\n    if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n      serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n    }\n    /* Sanitize final string template-safe */\n    if (SAFE_FOR_TEMPLATES) {\n      arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n        serializedHTML = stringReplace(serializedHTML, expr, ' ');\n      });\n    }\n    return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n  };\n  DOMPurify.setConfig = function () {\n    let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    _parseConfig(cfg);\n    SET_CONFIG = true;\n  };\n  DOMPurify.clearConfig = function () {\n    CONFIG = null;\n    SET_CONFIG = false;\n  };\n  DOMPurify.isValidAttribute = function (tag, attr, value) {\n    /* Initialize shared config vars if necessary. */\n    if (!CONFIG) {\n      _parseConfig({});\n    }\n    const lcTag = transformCaseFunc(tag);\n    const lcName = transformCaseFunc(attr);\n    return _isValidAttribute(lcTag, lcName, value);\n  };\n  DOMPurify.addHook = function (entryPoint, hookFunction) {\n    if (typeof hookFunction !== 'function') {\n      return;\n    }\n    arrayPush(hooks[entryPoint], hookFunction);\n  };\n  DOMPurify.removeHook = function (entryPoint, hookFunction) {\n    if (hookFunction !== undefined) {\n      const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n      return index === -1 ? undefined : arraySplice(hooks[entryPoint], index, 1)[0];\n    }\n    return arrayPop(hooks[entryPoint]);\n  };\n  DOMPurify.removeHooks = function (entryPoint) {\n    hooks[entryPoint] = [];\n  };\n  DOMPurify.removeAllHooks = function () {\n    hooks = _createHooksMap();\n  };\n  return DOMPurify;\n}\nvar purify = createDOMPurify();\n\nexport { purify as default };\n//# sourceMappingURL=purify.es.mjs.map\n", "import BasicObject from \"trix/core/basic_object\"\n\nimport { nodeIsAttachmentElement, removeNode, tagName, walkTree } from \"trix/core/helpers\"\nimport DOMPurify from \"dompurify\"\nimport * as config from \"trix/config\"\n\nDOMPurify.addHook(\"uponSanitizeAttribute\", function (node, data) {\n  if (data.attrName === \"data-trix-serialized-attributes\") {\n    data.keepAttr = false\n    return\n  }\n\n  const allowedAttributePattern = /^data-trix-/\n  if (allowedAttributePattern.test(data.attrName)) {\n    data.forceKeepAttr = true\n  }\n})\n\nconst DEFAULT_ALLOWED_ATTRIBUTES = \"style href src width height language class\".split(\" \")\nconst DEFAULT_FORBIDDEN_PROTOCOLS = \"javascript:\".split(\" \")\nconst DEFAULT_FORBIDDEN_ELEMENTS = \"script iframe form noscript\".split(\" \")\n\nexport default class HTMLSanitizer extends BasicObject {\n  static setHTML(element, html, options) {\n    const sanitizedElement = new this(html, options).sanitize()\n    const sanitizedHtml = sanitizedElement.getHTML ? sanitizedElement.getHTML() : sanitizedElement.outerHTML\n    element.innerHTML = sanitizedHtml\n  }\n\n  static sanitize(html, options) {\n    const sanitizer = new this(html, options)\n    sanitizer.sanitize()\n    return sanitizer\n  }\n\n  constructor(html, { allowedAttributes, forbiddenProtocols, forbiddenElements, purifyOptions } = {}) {\n    super(...arguments)\n    this.allowedAttributes = allowedAttributes || DEFAULT_ALLOWED_ATTRIBUTES\n    this.forbiddenProtocols = forbiddenProtocols || DEFAULT_FORBIDDEN_PROTOCOLS\n    this.forbiddenElements = forbiddenElements || DEFAULT_FORBIDDEN_ELEMENTS\n    this.purifyOptions = purifyOptions || {}\n    this.body = createBodyElementForHTML(html)\n  }\n\n  sanitize() {\n    this.sanitizeElements()\n    this.normalizeListElementNesting()\n    const purifyConfig = Object.assign({}, config.dompurify, this.purifyOptions)\n    DOMPurify.setConfig(purifyConfig)\n    this.body = DOMPurify.sanitize(this.body)\n\n    return this.body\n  }\n\n  getHTML() {\n    return this.body.innerHTML\n  }\n\n  getBody() {\n    return this.body\n  }\n\n  // Private\n\n  sanitizeElements() {\n    const walker = walkTree(this.body)\n    const nodesToRemove = []\n\n    while (walker.nextNode()) {\n      const node = walker.currentNode\n      switch (node.nodeType) {\n        case Node.ELEMENT_NODE:\n          if (this.elementIsRemovable(node)) {\n            nodesToRemove.push(node)\n          } else {\n            this.sanitizeElement(node)\n          }\n          break\n        case Node.COMMENT_NODE:\n          nodesToRemove.push(node)\n          break\n      }\n    }\n\n    nodesToRemove.forEach((node) => removeNode(node))\n\n    return this.body\n  }\n\n  sanitizeElement(element) {\n    if (element.hasAttribute(\"href\")) {\n      if (this.forbiddenProtocols.includes(element.protocol)) {\n        element.removeAttribute(\"href\")\n      }\n    }\n\n    Array.from(element.attributes).forEach(({ name }) => {\n      if (!this.allowedAttributes.includes(name) && name.indexOf(\"data-trix\") !== 0) {\n        element.removeAttribute(name)\n      }\n    })\n\n    return element\n  }\n\n  normalizeListElementNesting() {\n    Array.from(this.body.querySelectorAll(\"ul,ol\")).forEach((listElement) => {\n      const previousElement = listElement.previousElementSibling\n      if (previousElement) {\n        if (tagName(previousElement) === \"li\") {\n          previousElement.appendChild(listElement)\n        }\n      }\n    })\n\n    return this.body\n  }\n\n  elementIsRemovable(element) {\n    if (element?.nodeType !== Node.ELEMENT_NODE) return\n    return this.elementIsForbidden(element) || this.elementIsntSerializable(element)\n  }\n\n  elementIsForbidden(element) {\n    return this.forbiddenElements.includes(tagName(element))\n  }\n\n  elementIsntSerializable(element) {\n    return element.getAttribute(\"data-trix-serialize\") === \"false\" && !nodeIsAttachmentElement(element)\n  }\n}\n\nconst createBodyElementForHTML = function(html = \"\") {\n  // Remove everything after </html>\n  html = html.replace(/<\\/html[^>]*>[^]*$/i, \"</html>\")\n  const doc = document.implementation.createHTMLDocument(\"\")\n  doc.documentElement.innerHTML = html\n\n  Array.from(doc.head.querySelectorAll(\"style\")).forEach((element) => {\n    doc.body.appendChild(element)\n  })\n\n  return doc.body\n}\n", "import * as config from \"trix/config\"\nimport { ZERO_WIDTH_SPACE } from \"trix/constants\"\nimport { copyObject, makeElement } from \"trix/core/helpers\"\nimport ObjectView from \"trix/views/object_view\"\nimport HTMLSanitizer from \"trix/models/html_sanitizer\"\nimport DOMPurify from \"dompurify\"\n\nconst { css } = config\n\nexport default class AttachmentView extends ObjectView {\n  constructor() {\n    super(...arguments)\n    this.attachment = this.object\n    this.attachment.uploadProgressDelegate = this\n    this.attachmentPiece = this.options.piece\n  }\n\n  createContentNodes() {\n    return []\n  }\n\n  createNodes() {\n    let innerElement\n    const figure = innerElement = makeElement({\n      tagName: \"figure\",\n      className: this.getClassName(),\n      data: this.getData(),\n      editable: false,\n    })\n\n    const href = this.getHref()\n    if (href) {\n      innerElement = makeElement({ tagName: \"a\", editable: false, attributes: { href, tabindex: -1 } })\n      figure.appendChild(innerElement)\n    }\n\n    if (this.attachment.hasContent()) {\n      HTMLSanitizer.setHTML(innerElement, this.attachment.getContent())\n    } else {\n      this.createContentNodes().forEach((node) => {\n        innerElement.appendChild(node)\n      })\n    }\n\n    innerElement.appendChild(this.createCaptionElement())\n\n    if (this.attachment.isPending()) {\n      this.progressElement = makeElement({\n        tagName: \"progress\",\n        attributes: {\n          class: css.attachmentProgress,\n          value: this.attachment.getUploadProgress(),\n          max: 100,\n        },\n        data: {\n          trixMutable: true,\n          trixStoreKey: [ \"progressElement\", this.attachment.id ].join(\"/\"),\n        },\n      })\n\n      figure.appendChild(this.progressElement)\n    }\n\n    return [ createCursorTarget(\"left\"), figure, createCursorTarget(\"right\") ]\n  }\n\n  createCaptionElement() {\n    const figcaption = makeElement({ tagName: \"figcaption\", className: css.attachmentCaption })\n    const caption = this.attachmentPiece.getCaption()\n    if (caption) {\n      figcaption.classList.add(`${css.attachmentCaption}--edited`)\n      figcaption.textContent = caption\n    } else {\n      let name, size\n      const captionConfig = this.getCaptionConfig()\n      if (captionConfig.name) {\n        name = this.attachment.getFilename()\n      }\n      if (captionConfig.size) {\n        size = this.attachment.getFormattedFilesize()\n      }\n\n      if (name) {\n        const nameElement = makeElement({ tagName: \"span\", className: css.attachmentName, textContent: name })\n        figcaption.appendChild(nameElement)\n      }\n\n      if (size) {\n        if (name) {\n          figcaption.appendChild(document.createTextNode(\" \"))\n        }\n        const sizeElement = makeElement({ tagName: \"span\", className: css.attachmentSize, textContent: size })\n        figcaption.appendChild(sizeElement)\n      }\n    }\n\n    return figcaption\n  }\n\n  getClassName() {\n    const names = [ css.attachment, `${css.attachment}--${this.attachment.getType()}` ]\n    const extension = this.attachment.getExtension()\n    if (extension) {\n      names.push(`${css.attachment}--${extension}`)\n    }\n    return names.join(\" \")\n  }\n\n  getData() {\n    const data = {\n      trixAttachment: JSON.stringify(this.attachment),\n      trixContentType: this.attachment.getContentType(),\n      trixId: this.attachment.id,\n    }\n\n    const { attributes } = this.attachmentPiece\n    if (!attributes.isEmpty()) {\n      data.trixAttributes = JSON.stringify(attributes)\n    }\n\n    if (this.attachment.isPending()) {\n      data.trixSerialize = false\n    }\n\n    return data\n  }\n\n  getHref() {\n    if (!htmlContainsTagName(this.attachment.getContent(), \"a\")) {\n      const href = this.attachment.getHref()\n      if (href && DOMPurify.isValidAttribute(\"a\", \"href\", href)) {\n        return href\n      }\n    }\n  }\n\n  getCaptionConfig() {\n    const type = this.attachment.getType()\n    const captionConfig = copyObject(config.attachments[type]?.caption)\n    if (type === \"file\") {\n      captionConfig.name = true\n    }\n    return captionConfig\n  }\n\n  findProgressElement() {\n    return this.findElement()?.querySelector(\"progress\")\n  }\n\n  // Attachment delegate\n\n  attachmentDidChangeUploadProgress() {\n    const value = this.attachment.getUploadProgress()\n    const progressElement = this.findProgressElement()\n    if (progressElement) {\n      progressElement.value = value\n    }\n  }\n}\n\nconst createCursorTarget = (name) =>\n  makeElement({\n    tagName: \"span\",\n    textContent: ZERO_WIDTH_SPACE,\n    data: {\n      trixCursorTarget: name,\n      trixSerialize: false,\n    },\n  })\n\nconst htmlContainsTagName = function(html, tagName) {\n  const div = makeElement(\"div\")\n  HTMLSanitizer.setHTML(div, html || \"\")\n  return div.querySelector(tagName)\n}\n", "import * as config from \"trix/config\"\nimport { makeElement } from \"trix/core/helpers\"\n\nimport AttachmentView from \"trix/views/attachment_view\"\n\nexport default class PreviewableAttachmentView extends AttachmentView {\n  constructor() {\n    super(...arguments)\n    this.attachment.previewDelegate = this\n  }\n\n  createContentNodes() {\n    this.image = makeElement({\n      tagName: \"img\",\n      attributes: {\n        src: \"\",\n      },\n      data: {\n        trixMutable: true,\n      },\n    })\n\n    this.refresh(this.image)\n    return [ this.image ]\n  }\n\n  createCaptionElement() {\n    const figcaption = super.createCaptionElement(...arguments)\n    if (!figcaption.textContent) {\n      figcaption.setAttribute(\"data-trix-placeholder\", config.lang.captionPlaceholder)\n    }\n    return figcaption\n  }\n\n  refresh(image) {\n    if (!image) { image = this.findElement()?.querySelector(\"img\") }\n    if (image) {\n      return this.updateAttributesForImage(image)\n    }\n  }\n\n  updateAttributesForImage(image) {\n    const url = this.attachment.getURL()\n    const previewURL = this.attachment.getPreviewURL()\n    image.src = previewURL || url\n\n    if (previewURL === url) {\n      image.removeAttribute(\"data-trix-serialized-attributes\")\n    } else {\n      const serializedAttributes = JSON.stringify({ src: url })\n      image.setAttribute(\"data-trix-serialized-attributes\", serializedAttributes)\n    }\n\n    const width = this.attachment.getWidth()\n    const height = this.attachment.getHeight()\n    const alt = this.attachment.getAttribute(\"alt\")\n\n    if (width != null) {\n      image.width = width\n    }\n    if (height != null) {\n      image.height = height\n    }\n    if (alt != null) {\n      image.alt = alt\n    }\n\n    const storeKey = [ \"imageElement\", this.attachment.id, image.src, image.width, image.height ].join(\"/\")\n    image.dataset.trixStoreKey = storeKey\n  }\n\n  // Attachment delegate\n\n  attachmentDidChangeAttributes() {\n    this.refresh(this.image)\n    return this.refresh()\n  }\n}\n", "/* eslint-disable\n    no-useless-escape,\n    no-var,\n*/\nimport { NON_BREAKING_SPACE } from \"trix/constants\"\n\nimport ObjectView from \"trix/views/object_view\"\nimport AttachmentView from \"trix/views/attachment_view\"\nimport PreviewableAttachmentView from \"trix/views/previewable_attachment_view\"\n\nimport { findInnerElement, getTextConfig, makeElement } from \"trix/core/helpers\"\n\nexport default class PieceView extends ObjectView {\n  constructor() {\n    super(...arguments)\n    this.piece = this.object\n    this.attributes = this.piece.getAttributes()\n    this.textConfig = this.options.textConfig\n    this.context = this.options.context\n\n    if (this.piece.attachment) {\n      this.attachment = this.piece.attachment\n    } else {\n      this.string = this.piece.toString()\n    }\n  }\n\n  createNodes() {\n    let nodes = this.attachment ? this.createAttachmentNodes() : this.createStringNodes()\n    const element = this.createElement()\n    if (element) {\n      const innerElement = findInnerElement(element)\n      Array.from(nodes).forEach((node) => {\n        innerElement.appendChild(node)\n      })\n      nodes = [ element ]\n    }\n    return nodes\n  }\n\n  createAttachmentNodes() {\n    const constructor = this.attachment.isPreviewable() ? PreviewableAttachmentView : AttachmentView\n\n    const view = this.createChildView(constructor, this.piece.attachment, { piece: this.piece })\n    return view.getNodes()\n  }\n\n  createStringNodes() {\n    if (this.textConfig?.plaintext) {\n      return [ document.createTextNode(this.string) ]\n    } else {\n      const nodes = []\n      const iterable = this.string.split(\"\\n\")\n      for (let index = 0; index < iterable.length; index++) {\n        const substring = iterable[index]\n        if (index > 0) {\n          const element = makeElement(\"br\")\n          nodes.push(element)\n        }\n\n        if (substring.length) {\n          const node = document.createTextNode(this.preserveSpaces(substring))\n          nodes.push(node)\n        }\n      }\n      return nodes\n    }\n  }\n\n  createElement() {\n    let element, key, value\n    const styles = {}\n\n    for (key in this.attributes) {\n      value = this.attributes[key]\n      const config = getTextConfig(key)\n      if (config) {\n        if (config.tagName) {\n          var innerElement\n          const pendingElement = makeElement(config.tagName)\n\n          if (innerElement) {\n            innerElement.appendChild(pendingElement)\n            innerElement = pendingElement\n          } else {\n            element = innerElement = pendingElement\n          }\n        }\n\n        if (config.styleProperty) {\n          styles[config.styleProperty] = value\n        }\n\n        if (config.style) {\n          for (key in config.style) {\n            value = config.style[key]\n            styles[key] = value\n          }\n        }\n      }\n    }\n\n    if (Object.keys(styles).length) {\n      if (!element) { element = makeElement(\"span\") }\n      for (key in styles) {\n        value = styles[key]\n        element.style[key] = value\n      }\n    }\n    return element\n  }\n\n  createContainerElement() {\n    for (const key in this.attributes) {\n      const value = this.attributes[key]\n      const config = getTextConfig(key)\n      if (config) {\n        if (config.groupTagName) {\n          const attributes = {}\n          attributes[key] = value\n          return makeElement(config.groupTagName, attributes)\n        }\n      }\n    }\n  }\n\n  preserveSpaces(string) {\n    if (this.context.isLast) {\n      string = string.replace(/\\ $/, NON_BREAKING_SPACE)\n    }\n\n    string = string\n      .replace(/(\\S)\\ {3}(\\S)/g, `$1 ${NON_BREAKING_SPACE} $2`)\n      .replace(/\\ {2}/g, `${NON_BREAKING_SPACE} `)\n      .replace(/\\ {2}/g, ` ${NON_BREAKING_SPACE}`)\n\n    if (this.context.isFirst || this.context.followsWhitespace) {\n      string = string.replace(/^\\ /, NON_BREAKING_SPACE)\n    }\n\n    return string\n  }\n}\n", "/* eslint-disable\n    no-var,\n*/\nimport ObjectView from \"trix/views/object_view\"\nimport ObjectGroup from \"trix/core/collections/object_group\"\nimport PieceView from \"trix/views/piece_view\"\n\nexport default class TextView extends ObjectView {\n  constructor() {\n    super(...arguments)\n    this.text = this.object\n    this.textConfig = this.options.textConfig\n  }\n\n  createNodes() {\n    const nodes = []\n    const pieces = ObjectGroup.groupObjects(this.getPieces())\n    const lastIndex = pieces.length - 1\n\n    for (let index = 0; index < pieces.length; index++) {\n      const piece = pieces[index]\n      const context = {}\n      if (index === 0) {\n        context.isFirst = true\n      }\n      if (index === lastIndex) {\n        context.isLast = true\n      }\n      if (endsWithWhitespace(previousPiece)) {\n        context.followsWhitespace = true\n      }\n\n      const view = this.findOrCreateCachedChildView(PieceView, piece, { textConfig: this.textConfig, context })\n      nodes.push(...Array.from(view.getNodes() || []))\n\n      var previousPiece = piece\n    }\n    return nodes\n  }\n\n  getPieces() {\n    return Array.from(this.text.getPieces()).filter((piece) => !piece.hasAttribute(\"blockBreak\"))\n  }\n}\n\nconst endsWithWhitespace = (piece) => /\\s$/.test(piece?.toString())\n", "import * as config from \"trix/config\"\nimport ObjectView from \"trix/views/object_view\"\nimport TextView from \"trix/views/text_view\"\n\nimport { getBlockConfig, makeElement } from \"trix/core/helpers\"\nconst { css } = config\n\nexport default class BlockView extends ObjectView {\n  constructor() {\n    super(...arguments)\n    this.block = this.object\n    this.attributes = this.block.getAttributes()\n  }\n\n  createNodes() {\n    const comment = document.createComment(\"block\")\n    const nodes = [ comment ]\n    if (this.block.isEmpty()) {\n      nodes.push(makeElement(\"br\"))\n    } else {\n      const textConfig = getBlockConfig(this.block.getLastAttribute())?.text\n      const textView = this.findOrCreateCachedChildView(TextView, this.block.text, { textConfig })\n      nodes.push(...Array.from(textView.getNodes() || []))\n      if (this.shouldAddExtraNewlineElement()) {\n        nodes.push(makeElement(\"br\"))\n      }\n    }\n\n    if (this.attributes.length) {\n      return nodes\n    } else {\n      let attributes\n      const { tagName } = config.blockAttributes.default\n      if (this.block.isRTL()) {\n        attributes = { dir: \"rtl\" }\n      }\n\n      const element = makeElement({ tagName, attributes })\n      nodes.forEach((node) => element.appendChild(node))\n      return [ element ]\n    }\n  }\n\n  createContainerElement(depth) {\n    const attributes = {}\n    let className\n    const attributeName = this.attributes[depth]\n\n    const { tagName, htmlAttributes = [] } = getBlockConfig(attributeName)\n\n    if (depth === 0 && this.block.isRTL()) {\n      Object.assign(attributes, { dir: \"rtl\" })\n    }\n\n    if (attributeName === \"attachmentGallery\") {\n      const size = this.block.getBlockBreakPosition()\n      className = `${css.attachmentGallery} ${css.attachmentGallery}--${size}`\n    }\n\n    Object.entries(this.block.htmlAttributes).forEach(([ name, value ]) => {\n      if (htmlAttributes.includes(name)) {\n        attributes[name] = value\n      }\n    })\n\n    return makeElement({ tagName, className, attributes })\n  }\n\n  // A single <br> at the end of a block element has no visual representation\n  // so add an extra one.\n  shouldAddExtraNewlineElement() {\n    return /\\n\\n$/.test(this.block.toString())\n  }\n}\n", "import { createEvent, makeElement } from \"trix/core/helpers\"\n\nimport ElementStore from \"trix/core/collections/element_store\"\nimport ObjectGroup from \"trix/core/collections/object_group\"\nimport ObjectView from \"trix/views/object_view\"\nimport BlockView from \"trix/views/block_view\"\n\nimport { defer } from \"trix/core/helpers\"\n\nexport default class DocumentView extends ObjectView {\n  static render(document) {\n    const element = makeElement(\"div\")\n    const view = new this(document, { element })\n    view.render()\n    view.sync()\n    return element\n  }\n\n  constructor() {\n    super(...arguments)\n    this.element = this.options.element\n    this.elementStore = new ElementStore()\n    this.setDocument(this.object)\n  }\n\n  setDocument(document) {\n    if (!document.isEqualTo(this.document)) {\n      this.document = this.object = document\n    }\n  }\n\n  render() {\n    this.childViews = []\n\n    this.shadowElement = makeElement(\"div\")\n\n    if (!this.document.isEmpty()) {\n      const objects = ObjectGroup.groupObjects(this.document.getBlocks(), { asTree: true })\n\n      Array.from(objects).forEach((object) => {\n        const view = this.findOrCreateCachedChildView(BlockView, object)\n        Array.from(view.getNodes()).map((node) => this.shadowElement.appendChild(node))\n      })\n    }\n  }\n\n  isSynced() {\n    return elementsHaveEqualHTML(this.shadowElement, this.element)\n  }\n\n  sync() {\n    const render = (element, documentFragment) => {\n      while (element.lastChild) {\n        element.removeChild(element.lastChild)\n      }\n      element.appendChild(documentFragment)\n    }\n\n    const event = createEvent(\"trix-before-render\", { cancelable: false, attributes: { render } })\n    this.element.dispatchEvent(event)\n\n    const fragment = this.createDocumentFragmentForSync()\n    event.render(this.element, fragment)\n    return this.didSync()\n  }\n\n  // Private\n\n  didSync() {\n    this.elementStore.reset(findStoredElements(this.element))\n    return defer(() => this.garbageCollectCachedViews())\n  }\n\n  createDocumentFragmentForSync() {\n    const fragment = document.createDocumentFragment()\n\n    Array.from(this.shadowElement.childNodes).forEach((node) => {\n      fragment.appendChild(node.cloneNode(true))\n    })\n\n    Array.from(findStoredElements(fragment)).forEach((element) => {\n      const storedElement = this.elementStore.remove(element)\n      if (storedElement) {\n        element.parentNode.replaceChild(storedElement, element)\n      }\n    })\n\n    return fragment\n  }\n}\n\nconst findStoredElements = (element) => element.querySelectorAll(\"[data-trix-store-key]\")\n\nconst elementsHaveEqualHTML = (element, otherElement) =>\n  ignoreSpaces(element.innerHTML) === ignoreSpaces(otherElement.innerHTML)\n\nconst ignoreSpaces = (html) => html.replace(/&nbsp;/g, \" \")\n", "import TrixObject from \"trix/core/object\" // Don't override window.Object\nimport Hash from \"trix/core/collections/hash\"\n\nexport default class Piece extends TrixObject {\n  static types = {}\n\n  static registerType(type, constructor) {\n    constructor.type = type\n    this.types[type] = constructor\n  }\n\n  static fromJSON(pieceJSON) {\n    const constructor = this.types[pieceJSON.type]\n    if (constructor) {\n      return constructor.fromJSON(pieceJSON)\n    }\n  }\n\n  constructor(value, attributes = {}) {\n    super(...arguments)\n    this.attributes = Hash.box(attributes)\n  }\n\n  copyWithAttributes(attributes) {\n    return new this.constructor(this.getValue(), attributes)\n  }\n\n  copyWithAdditionalAttributes(attributes) {\n    return this.copyWithAttributes(this.attributes.merge(attributes))\n  }\n\n  copyWithoutAttribute(attribute) {\n    return this.copyWithAttributes(this.attributes.remove(attribute))\n  }\n\n  copy() {\n    return this.copyWithAttributes(this.attributes)\n  }\n\n  getAttribute(attribute) {\n    return this.attributes.get(attribute)\n  }\n\n  getAttributesHash() {\n    return this.attributes\n  }\n\n  getAttributes() {\n    return this.attributes.toObject()\n  }\n\n  hasAttribute(attribute) {\n    return this.attributes.has(attribute)\n  }\n\n  hasSameStringValueAsPiece(piece) {\n    return piece && this.toString() === piece.toString()\n  }\n\n  hasSameAttributesAsPiece(piece) {\n    return piece && (this.attributes === piece.attributes || this.attributes.isEqualTo(piece.attributes))\n  }\n\n  isBlockBreak() {\n    return false\n  }\n\n  isEqualTo(piece) {\n    return (\n      super.isEqualTo(...arguments) ||\n      this.hasSameConstructorAs(piece) &&\n        this.hasSameStringValueAsPiece(piece) &&\n        this.hasSameAttributesAsPiece(piece)\n    )\n  }\n\n  isEmpty() {\n    return this.length === 0\n  }\n\n  isSerializable() {\n    return true\n  }\n\n  toJSON() {\n    return {\n      type: this.constructor.type,\n      attributes: this.getAttributes(),\n    }\n  }\n\n  contentsForInspection() {\n    return {\n      type: this.constructor.type,\n      attributes: this.attributes.inspect(),\n    }\n  }\n\n  // Grouping\n\n  canBeGrouped() {\n    return this.hasAttribute(\"href\")\n  }\n\n  canBeGroupedWith(piece) {\n    return this.getAttribute(\"href\") === piece.getAttribute(\"href\")\n  }\n\n  // Splittable\n\n  getLength() {\n    return this.length\n  }\n\n  canBeConsolidatedWith(piece) {\n    return false\n  }\n}\n", "import Operation from \"trix/core/utilities/operation\"\n\nexport default class ImagePreloadOperation extends Operation {\n  constructor(url) {\n    super(...arguments)\n    this.url = url\n  }\n\n  perform(callback) {\n    const image = new Image()\n\n    image.onload = () => {\n      image.width = this.width = image.naturalWidth\n      image.height = this.height = image.naturalHeight\n      return callback(true, image)\n    }\n\n    image.onerror = () => callback(false)\n\n    image.src = this.url\n  }\n}\n", "import * as config from \"trix/config\"\nimport TrixObject from \"trix/core/object\" // Don't override window.Object\nimport Hash from \"trix/core/collections/hash\"\nimport ImagePreloadOperation from \"trix/operations/image_preload_operation\"\n\nexport default class Attachment extends TrixObject {\n  static previewablePattern = /^image(\\/(gif|png|webp|jpe?g)|$)/\n\n  static attachmentForFile(file) {\n    const attributes = this.attributesForFile(file)\n    const attachment = new this(attributes)\n    attachment.setFile(file)\n    return attachment\n  }\n\n  static attributesForFile(file) {\n    return new Hash({\n      filename: file.name,\n      filesize: file.size,\n      contentType: file.type,\n    })\n  }\n\n  static fromJSON(attachmentJSON) {\n    return new this(attachmentJSON)\n  }\n\n  constructor(attributes = {}) {\n    super(attributes)\n    this.releaseFile = this.releaseFile.bind(this)\n    this.attributes = Hash.box(attributes)\n    this.didChangeAttributes()\n  }\n\n  setAttribute(attribute, value) {\n    this.setAttributes({ [attribute]: value })\n  }\n\n  getAttribute(attribute) {\n    return this.attributes.get(attribute)\n  }\n\n  hasAttribute(attribute) {\n    return this.attributes.has(attribute)\n  }\n\n  getAttributes() {\n    return this.attributes.toObject()\n  }\n\n  setAttributes(attributes = {}) {\n    const newAttributes = this.attributes.merge(attributes)\n    if (!this.attributes.isEqualTo(newAttributes)) {\n      this.attributes = newAttributes\n      this.didChangeAttributes()\n      this.previewDelegate?.attachmentDidChangeAttributes?.(this)\n      return this.delegate?.attachmentDidChangeAttributes?.(this)\n    }\n  }\n\n  didChangeAttributes() {\n    if (this.isPreviewable()) {\n      return this.preloadURL()\n    }\n  }\n\n  isPending() {\n    return this.file != null && !(this.getURL() || this.getHref())\n  }\n\n  isPreviewable() {\n    if (this.attributes.has(\"previewable\")) {\n      return this.attributes.get(\"previewable\")\n    } else {\n      return Attachment.previewablePattern.test(this.getContentType())\n    }\n  }\n\n  getType() {\n    if (this.hasContent()) {\n      return \"content\"\n    } else if (this.isPreviewable()) {\n      return \"preview\"\n    } else {\n      return \"file\"\n    }\n  }\n\n  getURL() {\n    return this.attributes.get(\"url\")\n  }\n\n  getHref() {\n    return this.attributes.get(\"href\")\n  }\n\n  getFilename() {\n    return this.attributes.get(\"filename\") || \"\"\n  }\n\n  getFilesize() {\n    return this.attributes.get(\"filesize\")\n  }\n\n  getFormattedFilesize() {\n    const filesize = this.attributes.get(\"filesize\")\n    if (typeof filesize === \"number\") {\n      return config.fileSize.formatter(filesize)\n    } else {\n      return \"\"\n    }\n  }\n\n  getExtension() {\n    return this.getFilename()\n      .match(/\\.(\\w+)$/)?.[1]\n      .toLowerCase()\n  }\n\n  getContentType() {\n    return this.attributes.get(\"contentType\")\n  }\n\n  hasContent() {\n    return this.attributes.has(\"content\")\n  }\n\n  getContent() {\n    return this.attributes.get(\"content\")\n  }\n\n  getWidth() {\n    return this.attributes.get(\"width\")\n  }\n\n  getHeight() {\n    return this.attributes.get(\"height\")\n  }\n\n  getFile() {\n    return this.file\n  }\n\n  setFile(file) {\n    this.file = file\n    if (this.isPreviewable()) {\n      return this.preloadFile()\n    }\n  }\n\n  releaseFile() {\n    this.releasePreloadedFile()\n    this.file = null\n  }\n\n  getUploadProgress() {\n    return this.uploadProgress != null ? this.uploadProgress : 0\n  }\n\n  setUploadProgress(value) {\n    if (this.uploadProgress !== value) {\n      this.uploadProgress = value\n      return this.uploadProgressDelegate?.attachmentDidChangeUploadProgress?.(this)\n    }\n  }\n\n  toJSON() {\n    return this.getAttributes()\n  }\n\n  getCacheKey() {\n    return [ super.getCacheKey(...arguments), this.attributes.getCacheKey(), this.getPreviewURL() ].join(\"/\")\n  }\n\n  // Previewable\n\n  getPreviewURL() {\n    return this.previewURL || this.preloadingURL\n  }\n\n  setPreviewURL(url) {\n    if (url !== this.getPreviewURL()) {\n      this.previewURL = url\n      this.previewDelegate?.attachmentDidChangeAttributes?.(this)\n      return this.delegate?.attachmentDidChangePreviewURL?.(this)\n    }\n  }\n\n  preloadURL() {\n    return this.preload(this.getURL(), this.releaseFile)\n  }\n\n  preloadFile() {\n    if (this.file) {\n      this.fileObjectURL = URL.createObjectURL(this.file)\n      return this.preload(this.fileObjectURL)\n    }\n  }\n\n  releasePreloadedFile() {\n    if (this.fileObjectURL) {\n      URL.revokeObjectURL(this.fileObjectURL)\n      this.fileObjectURL = null\n    }\n  }\n\n  preload(url, callback) {\n    if (url && url !== this.getPreviewURL()) {\n      this.preloadingURL = url\n      const operation = new ImagePreloadOperation(url)\n      return operation\n        .then(({ width, height }) => {\n          if (!this.getWidth() || !this.getHeight()) {\n            this.setAttributes({ width, height })\n          }\n          this.preloadingURL = null\n          this.setPreviewURL(url)\n          return callback?.()\n        })\n        .catch(() => {\n          this.preloadingURL = null\n          return callback?.()\n        })\n    }\n  }\n}\n", "import { OBJECT_REPLACEMENT_CHARACTER } from \"trix/constants\"\n\nimport Attachment from \"trix/models/attachment\"\nimport Piece from \"trix/models/piece\"\n\nexport default class AttachmentPiece extends Piece {\n  static permittedAttributes = [ \"caption\", \"presentation\" ]\n\n  static fromJSON(pieceJSON) {\n    return new this(Attachment.fromJSON(pieceJSON.attachment), pieceJSON.attributes)\n  }\n\n  constructor(attachment) {\n    super(...arguments)\n    this.attachment = attachment\n    this.length = 1\n    this.ensureAttachmentExclusivelyHasAttribute(\"href\")\n    if (!this.attachment.hasContent()) {\n      this.removeProhibitedAttributes()\n    }\n  }\n\n  ensureAttachmentExclusivelyHasAttribute(attribute) {\n    if (this.hasAttribute(attribute)) {\n      if (!this.attachment.hasAttribute(attribute)) {\n        this.attachment.setAttributes(this.attributes.slice([ attribute ]))\n      }\n      this.attributes = this.attributes.remove(attribute)\n    }\n  }\n\n  removeProhibitedAttributes() {\n    const attributes = this.attributes.slice(AttachmentPiece.permittedAttributes)\n    if (!attributes.isEqualTo(this.attributes)) {\n      this.attributes = attributes\n    }\n  }\n\n  getValue() {\n    return this.attachment\n  }\n\n  isSerializable() {\n    return !this.attachment.isPending()\n  }\n\n  getCaption() {\n    return this.attributes.get(\"caption\") || \"\"\n  }\n\n  isEqualTo(piece) {\n    return super.isEqualTo(piece) && this.attachment.id === piece?.attachment?.id\n  }\n\n  toString() {\n    return OBJECT_REPLACEMENT_CHARACTER\n  }\n\n  toJSON() {\n    const json = super.toJSON(...arguments)\n    json.attachment = this.attachment\n    return json\n  }\n\n  getCacheKey() {\n    return [ super.getCacheKey(...arguments), this.attachment.getCacheKey() ].join(\"/\")\n  }\n\n  toConsole() {\n    return JSON.stringify(this.toString())\n  }\n}\n\nPiece.registerType(\"attachment\", AttachmentPiece)\n", "import DOMPurify from \"dompurify\"\n\nimport Piece from \"trix/models/piece\"\n\nimport { normalizeNewlines } from \"trix/core/helpers\"\n\nexport default class StringPiece extends Piece {\n  static fromJSON(pieceJSON) {\n    const attributes = { ...pieceJSON.attributes }\n    if (attributes.href && !DOMPurify.isValidAttribute(\"a\", \"href\", attributes.href)) {\n      delete attributes.href\n    }\n    return new this(pieceJSON.string, attributes)\n  }\n\n  constructor(string) {\n    super(...arguments)\n    this.string = normalizeNewlines(string)\n    this.length = this.string.length\n  }\n\n  getValue() {\n    return this.string\n  }\n\n  toString() {\n    return this.string.toString()\n  }\n\n  isBlockBreak() {\n    return this.toString() === \"\\n\" && this.getAttribute(\"blockBreak\") === true\n  }\n\n  toJSON() {\n    const result = super.toJSON(...arguments)\n    result.string = this.string\n    return result\n  }\n\n  // Splittable\n\n  canBeConsolidatedWith(piece) {\n    return piece && this.hasSameConstructorAs(piece) && this.hasSameAttributesAsPiece(piece)\n  }\n\n  consolidateWith(piece) {\n    return new this.constructor(this.toString() + piece.toString(), this.attributes)\n  }\n\n  splitAtOffset(offset) {\n    let left, right\n    if (offset === 0) {\n      left = null\n      right = this\n    } else if (offset === this.length) {\n      left = this\n      right = null\n    } else {\n      left = new this.constructor(this.string.slice(0, offset), this.attributes)\n      right = new this.constructor(this.string.slice(offset), this.attributes)\n    }\n    return [ left, right ]\n  }\n\n  toConsole() {\n    let { string } = this\n    if (string.length > 15) {\n      string = string.slice(0, 14) + \"…\"\n    }\n    return JSON.stringify(string.toString())\n  }\n}\n\nPiece.registerType(\"string\", StringPiece)\n", "/* eslint-disable\n    prefer-const,\n*/\nimport TrixObject from \"trix/core/object\" // Don't override window.Object\n\nimport { spliceArray } from \"trix/core/helpers\"\n\nexport default class SplittableList extends TrixObject {\n  static box(objects) {\n    if (objects instanceof this) {\n      return objects\n    } else {\n      return new this(objects)\n    }\n  }\n\n  constructor(objects = []) {\n    super(...arguments)\n    this.objects = objects.slice(0)\n    this.length = this.objects.length\n  }\n\n  indexOf(object) {\n    return this.objects.indexOf(object)\n  }\n\n  splice(...args) {\n    return new this.constructor(spliceArray(this.objects, ...args))\n  }\n\n  eachObject(callback) {\n    return this.objects.map((object, index) => callback(object, index))\n  }\n\n  insertObjectAtIndex(object, index) {\n    return this.splice(index, 0, object)\n  }\n\n  insertSplittableListAtIndex(splittableList, index) {\n    return this.splice(index, 0, ...splittableList.objects)\n  }\n\n  insertSplittableListAtPosition(splittableList, position) {\n    const [ objects, index ] = this.splitObjectAtPosition(position)\n    return new this.constructor(objects).insertSplittableListAtIndex(splittableList, index)\n  }\n\n  editObjectAtIndex(index, callback) {\n    return this.replaceObjectAtIndex(callback(this.objects[index]), index)\n  }\n\n  replaceObjectAtIndex(object, index) {\n    return this.splice(index, 1, object)\n  }\n\n  removeObjectAtIndex(index) {\n    return this.splice(index, 1)\n  }\n\n  getObjectAtIndex(index) {\n    return this.objects[index]\n  }\n\n  getSplittableListInRange(range) {\n    const [ objects, leftIndex, rightIndex ] = this.splitObjectsAtRange(range)\n    return new this.constructor(objects.slice(leftIndex, rightIndex + 1))\n  }\n\n  selectSplittableList(test) {\n    const objects = this.objects.filter((object) => test(object))\n    return new this.constructor(objects)\n  }\n\n  removeObjectsInRange(range) {\n    const [ objects, leftIndex, rightIndex ] = this.splitObjectsAtRange(range)\n    return new this.constructor(objects).splice(leftIndex, rightIndex - leftIndex + 1)\n  }\n\n  transformObjectsInRange(range, transform) {\n    const [ objects, leftIndex, rightIndex ] = this.splitObjectsAtRange(range)\n    const transformedObjects = objects.map((object, index) =>\n      leftIndex <= index && index <= rightIndex ? transform(object) : object\n    )\n    return new this.constructor(transformedObjects)\n  }\n\n  splitObjectsAtRange(range) {\n    let rightOuterIndex\n    let [ objects, leftInnerIndex, offset ] = this.splitObjectAtPosition(startOfRange(range))\n    ;[ objects, rightOuterIndex ] = new this.constructor(objects).splitObjectAtPosition(endOfRange(range) + offset)\n\n    return [ objects, leftInnerIndex, rightOuterIndex - 1 ]\n  }\n\n  getObjectAtPosition(position) {\n    const { index } = this.findIndexAndOffsetAtPosition(position)\n    return this.objects[index]\n  }\n\n  splitObjectAtPosition(position) {\n    let splitIndex, splitOffset\n    const { index, offset } = this.findIndexAndOffsetAtPosition(position)\n    const objects = this.objects.slice(0)\n    if (index != null) {\n      if (offset === 0) {\n        splitIndex = index\n        splitOffset = 0\n      } else {\n        const object = this.getObjectAtIndex(index)\n        const [ leftObject, rightObject ] = object.splitAtOffset(offset)\n        objects.splice(index, 1, leftObject, rightObject)\n        splitIndex = index + 1\n        splitOffset = leftObject.getLength() - offset\n      }\n    } else {\n      splitIndex = objects.length\n      splitOffset = 0\n    }\n\n    return [ objects, splitIndex, splitOffset ]\n  }\n\n  consolidate() {\n    const objects = []\n    let pendingObject = this.objects[0]\n\n    this.objects.slice(1).forEach((object) => {\n      if (pendingObject.canBeConsolidatedWith?.(object)) {\n        pendingObject = pendingObject.consolidateWith(object)\n      } else {\n        objects.push(pendingObject)\n        pendingObject = object\n      }\n    })\n\n    if (pendingObject) {\n      objects.push(pendingObject)\n    }\n\n    return new this.constructor(objects)\n  }\n\n  consolidateFromIndexToIndex(startIndex, endIndex) {\n    const objects = this.objects.slice(0)\n    const objectsInRange = objects.slice(startIndex, endIndex + 1)\n    const consolidatedInRange = new this.constructor(objectsInRange).consolidate().toArray()\n    return this.splice(startIndex, objectsInRange.length, ...consolidatedInRange)\n  }\n\n  findIndexAndOffsetAtPosition(position) {\n    let index\n    let currentPosition = 0\n    for (index = 0; index < this.objects.length; index++) {\n      const object = this.objects[index]\n      const nextPosition = currentPosition + object.getLength()\n      if (currentPosition <= position && position < nextPosition) {\n        return { index, offset: position - currentPosition }\n      }\n      currentPosition = nextPosition\n    }\n    return { index: null, offset: null }\n  }\n\n  findPositionAtIndexAndOffset(index, offset) {\n    let position = 0\n    for (let currentIndex = 0; currentIndex < this.objects.length; currentIndex++) {\n      const object = this.objects[currentIndex]\n      if (currentIndex < index) {\n        position += object.getLength()\n      } else if (currentIndex === index) {\n        position += offset\n        break\n      }\n    }\n    return position\n  }\n\n  getEndPosition() {\n    if (this.endPosition == null) {\n      this.endPosition = 0\n      this.objects.forEach((object) => this.endPosition += object.getLength())\n    }\n\n    return this.endPosition\n  }\n\n  toString() {\n    return this.objects.join(\"\")\n  }\n\n  toArray() {\n    return this.objects.slice(0)\n  }\n\n  toJSON() {\n    return this.toArray()\n  }\n\n  isEqualTo(splittableList) {\n    return super.isEqualTo(...arguments) || objectArraysAreEqual(this.objects, splittableList?.objects)\n  }\n\n  contentsForInspection() {\n    return {\n      objects: `[${this.objects.map((object) => object.inspect()).join(\", \")}]`,\n    }\n  }\n}\n\nconst objectArraysAreEqual = function(left, right = []) {\n  if (left.length !== right.length) {\n    return false\n  }\n  let result = true\n  for (let index = 0; index < left.length; index++) {\n    const object = left[index]\n    if (result && !object.isEqualTo(right[index])) {\n      result = false\n    }\n  }\n  return result\n}\n\nconst startOfRange = (range) => range[0]\n\nconst endOfRange = (range) => range[1]\n", "import TrixObject from \"trix/core/object\" // Don't override window.Object\n\nimport { getDirection } from \"trix/core/helpers\"\n\nimport Piece from \"trix/models/piece\"\nimport AttachmentPiece from \"trix/models/attachment_piece\"\nimport StringPiece from \"trix/models/string_piece\"\nimport SplittableList from \"trix/models/splittable_list\"\n\nimport Hash from \"trix/core/collections/hash\"\n\nexport default class Text extends TrixObject {\n  static textForAttachmentWithAttributes(attachment, attributes) {\n    const piece = new AttachmentPiece(attachment, attributes)\n    return new this([ piece ])\n  }\n\n  static textForStringWithAttributes(string, attributes) {\n    const piece = new StringPiece(string, attributes)\n    return new this([ piece ])\n  }\n\n  static fromJSON(textJSON) {\n    const pieces = Array.from(textJSON).map((pieceJSON) => Piece.fromJSON(pieceJSON))\n    return new this(pieces)\n  }\n\n  constructor(pieces = []) {\n    super(...arguments)\n    const notEmpty = pieces.filter((piece) => !piece.isEmpty())\n    this.pieceList = new SplittableList(notEmpty)\n  }\n\n  copy() {\n    return this.copyWithPieceList(this.pieceList)\n  }\n\n  copyWithPieceList(pieceList) {\n    return new this.constructor(pieceList.consolidate().toArray())\n  }\n\n  copyUsingObjectMap(objectMap) {\n    const pieces = this.getPieces().map((piece) => objectMap.find(piece) || piece)\n    return new this.constructor(pieces)\n  }\n\n  appendText(text) {\n    return this.insertTextAtPosition(text, this.getLength())\n  }\n\n  insertTextAtPosition(text, position) {\n    return this.copyWithPieceList(this.pieceList.insertSplittableListAtPosition(text.pieceList, position))\n  }\n\n  removeTextAtRange(range) {\n    return this.copyWithPieceList(this.pieceList.removeObjectsInRange(range))\n  }\n\n  replaceTextAtRange(text, range) {\n    return this.removeTextAtRange(range).insertTextAtPosition(text, range[0])\n  }\n\n  moveTextFromRangeToPosition(range, position) {\n    if (range[0] <= position && position <= range[1]) return\n    const text = this.getTextAtRange(range)\n    const length = text.getLength()\n    if (range[0] < position) {\n      position -= length\n    }\n    return this.removeTextAtRange(range).insertTextAtPosition(text, position)\n  }\n\n  addAttributeAtRange(attribute, value, range) {\n    const attributes = {}\n    attributes[attribute] = value\n    return this.addAttributesAtRange(attributes, range)\n  }\n\n  addAttributesAtRange(attributes, range) {\n    return this.copyWithPieceList(\n      this.pieceList.transformObjectsInRange(range, (piece) => piece.copyWithAdditionalAttributes(attributes))\n    )\n  }\n\n  removeAttributeAtRange(attribute, range) {\n    return this.copyWithPieceList(\n      this.pieceList.transformObjectsInRange(range, (piece) => piece.copyWithoutAttribute(attribute))\n    )\n  }\n\n  setAttributesAtRange(attributes, range) {\n    return this.copyWithPieceList(\n      this.pieceList.transformObjectsInRange(range, (piece) => piece.copyWithAttributes(attributes))\n    )\n  }\n\n  getAttributesAtPosition(position) {\n    return this.pieceList.getObjectAtPosition(position)?.getAttributes() || {}\n  }\n\n  getCommonAttributes() {\n    const objects = Array.from(this.pieceList.toArray()).map((piece) => piece.getAttributes())\n    return Hash.fromCommonAttributesOfObjects(objects).toObject()\n  }\n\n  getCommonAttributesAtRange(range) {\n    return this.getTextAtRange(range).getCommonAttributes() || {}\n  }\n\n  getExpandedRangeForAttributeAtOffset(attributeName, offset) {\n    let right\n    let left = right = offset\n    const length = this.getLength()\n\n    while (left > 0 && this.getCommonAttributesAtRange([ left - 1, right ])[attributeName]) {\n      left--\n    }\n    while (right < length && this.getCommonAttributesAtRange([ offset, right + 1 ])[attributeName]) {\n      right++\n    }\n\n    return [ left, right ]\n  }\n\n  getTextAtRange(range) {\n    return this.copyWithPieceList(this.pieceList.getSplittableListInRange(range))\n  }\n\n  getStringAtRange(range) {\n    return this.pieceList.getSplittableListInRange(range).toString()\n  }\n\n  getStringAtPosition(position) {\n    return this.getStringAtRange([ position, position + 1 ])\n  }\n\n  startsWithString(string) {\n    return this.getStringAtRange([ 0, string.length ]) === string\n  }\n\n  endsWithString(string) {\n    const length = this.getLength()\n    return this.getStringAtRange([ length - string.length, length ]) === string\n  }\n\n  getAttachmentPieces() {\n    return this.pieceList.toArray().filter((piece) => !!piece.attachment)\n  }\n\n  getAttachments() {\n    return this.getAttachmentPieces().map((piece) => piece.attachment)\n  }\n\n  getAttachmentAndPositionById(attachmentId) {\n    let position = 0\n    for (const piece of this.pieceList.toArray()) {\n      if (piece.attachment?.id === attachmentId) {\n        return { attachment: piece.attachment, position }\n      }\n      position += piece.length\n    }\n    return { attachment: null, position: null }\n  }\n\n  getAttachmentById(attachmentId) {\n    const { attachment } = this.getAttachmentAndPositionById(attachmentId)\n    return attachment\n  }\n\n  getRangeOfAttachment(attachment) {\n    const attachmentAndPosition = this.getAttachmentAndPositionById(attachment.id)\n    const position = attachmentAndPosition.position\n    attachment = attachmentAndPosition.attachment\n    if (attachment) {\n      return [ position, position + 1 ]\n    }\n  }\n\n  updateAttributesForAttachment(attributes, attachment) {\n    const range = this.getRangeOfAttachment(attachment)\n    if (range) {\n      return this.addAttributesAtRange(attributes, range)\n    } else {\n      return this\n    }\n  }\n\n  getLength() {\n    return this.pieceList.getEndPosition()\n  }\n\n  isEmpty() {\n    return this.getLength() === 0\n  }\n\n  isEqualTo(text) {\n    return super.isEqualTo(text) || text?.pieceList?.isEqualTo(this.pieceList)\n  }\n\n  isBlockBreak() {\n    return this.getLength() === 1 && this.pieceList.getObjectAtIndex(0).isBlockBreak()\n  }\n\n  eachPiece(callback) {\n    return this.pieceList.eachObject(callback)\n  }\n\n  getPieces() {\n    return this.pieceList.toArray()\n  }\n\n  getPieceAtPosition(position) {\n    return this.pieceList.getObjectAtPosition(position)\n  }\n\n  contentsForInspection() {\n    return { pieceList: this.pieceList.inspect() }\n  }\n\n  toSerializableText() {\n    const pieceList = this.pieceList.selectSplittableList((piece) => piece.isSerializable())\n    return this.copyWithPieceList(pieceList)\n  }\n\n  toString() {\n    return this.pieceList.toString()\n  }\n\n  toJSON() {\n    return this.pieceList.toJSON()\n  }\n\n  toConsole() {\n    return JSON.stringify(this.pieceList.toArray().map((piece) => JSON.parse(piece.toConsole())))\n  }\n\n  // BIDI\n\n  getDirection() {\n    return getDirection(this.toString())\n  }\n\n  isRTL() {\n    return this.getDirection() === \"rtl\"\n  }\n}\n", "import TrixObject from \"trix/core/object\" // Don't override window.Object\nimport Text from \"trix/models/text\"\n\nimport {\n  arraysAreEqual,\n  getBlockConfig,\n  getListAttributeNames,\n  objectsAreEqual,\n  spliceArray,\n} from \"trix/core/helpers\"\n\nexport default class Block extends TrixObject {\n  static fromJSON(blockJSON) {\n    const text = Text.fromJSON(blockJSON.text)\n    return new this(text, blockJSON.attributes, blockJSON.htmlAttributes)\n  }\n\n  constructor(text, attributes, htmlAttributes) {\n    super(...arguments)\n    this.text = applyBlockBreakToText(text || new Text())\n    this.attributes = attributes || []\n    this.htmlAttributes = htmlAttributes || {}\n  }\n\n  isEmpty() {\n    return this.text.isBlockBreak()\n  }\n\n  isEqualTo(block) {\n    if (super.isEqualTo(block)) return true\n\n    return this.text.isEqualTo(block?.text) && arraysAreEqual(this.attributes, block?.attributes) && objectsAreEqual(this.htmlAttributes, block?.htmlAttributes)\n  }\n\n  copyWithText(text) {\n    return new Block(text, this.attributes, this.htmlAttributes)\n  }\n\n  copyWithoutText() {\n    return this.copyWithText(null)\n  }\n\n  copyWithAttributes(attributes) {\n    return new Block(this.text, attributes, this.htmlAttributes)\n  }\n\n  copyWithoutAttributes() {\n    return this.copyWithAttributes(null)\n  }\n\n  copyUsingObjectMap(objectMap) {\n    const mappedText = objectMap.find(this.text)\n    if (mappedText) {\n      return this.copyWithText(mappedText)\n    } else {\n      return this.copyWithText(this.text.copyUsingObjectMap(objectMap))\n    }\n  }\n\n  addAttribute(attribute) {\n    const attributes = this.attributes.concat(expandAttribute(attribute))\n    return this.copyWithAttributes(attributes)\n  }\n\n  addHTMLAttribute(attribute, value) {\n    const htmlAttributes = Object.assign({}, this.htmlAttributes, { [attribute]: value })\n    return new Block(this.text, this.attributes, htmlAttributes)\n  }\n\n  removeAttribute(attribute) {\n    const { listAttribute } = getBlockConfig(attribute)\n    const attributes = removeLastValue(removeLastValue(this.attributes, attribute), listAttribute)\n    return this.copyWithAttributes(attributes)\n  }\n\n  removeLastAttribute() {\n    return this.removeAttribute(this.getLastAttribute())\n  }\n\n  getLastAttribute() {\n    return getLastElement(this.attributes)\n  }\n\n  getAttributes() {\n    return this.attributes.slice(0)\n  }\n\n  getAttributeLevel() {\n    return this.attributes.length\n  }\n\n  getAttributeAtLevel(level) {\n    return this.attributes[level - 1]\n  }\n\n  hasAttribute(attributeName) {\n    return this.attributes.includes(attributeName)\n  }\n\n  hasAttributes() {\n    return this.getAttributeLevel() > 0\n  }\n\n  getLastNestableAttribute() {\n    return getLastElement(this.getNestableAttributes())\n  }\n\n  getNestableAttributes() {\n    return this.attributes.filter((attribute) => getBlockConfig(attribute).nestable)\n  }\n\n  getNestingLevel() {\n    return this.getNestableAttributes().length\n  }\n\n  decreaseNestingLevel() {\n    const attribute = this.getLastNestableAttribute()\n    if (attribute) {\n      return this.removeAttribute(attribute)\n    } else {\n      return this\n    }\n  }\n\n  increaseNestingLevel() {\n    const attribute = this.getLastNestableAttribute()\n    if (attribute) {\n      const index = this.attributes.lastIndexOf(attribute)\n      const attributes = spliceArray(this.attributes, index + 1, 0, ...expandAttribute(attribute))\n      return this.copyWithAttributes(attributes)\n    } else {\n      return this\n    }\n  }\n\n  getListItemAttributes() {\n    return this.attributes.filter((attribute) => getBlockConfig(attribute).listAttribute)\n  }\n\n  isListItem() {\n    return getBlockConfig(this.getLastAttribute())?.listAttribute\n  }\n\n  isTerminalBlock() {\n    return getBlockConfig(this.getLastAttribute())?.terminal\n  }\n\n  breaksOnReturn() {\n    return getBlockConfig(this.getLastAttribute())?.breakOnReturn\n  }\n\n  findLineBreakInDirectionFromPosition(direction, position) {\n    const string = this.toString()\n    let result\n    switch (direction) {\n      case \"forward\":\n        result = string.indexOf(\"\\n\", position)\n        break\n      case \"backward\":\n        result = string.slice(0, position).lastIndexOf(\"\\n\")\n    }\n\n    if (result !== -1) {\n      return result\n    }\n  }\n\n  contentsForInspection() {\n    return {\n      text: this.text.inspect(),\n      attributes: this.attributes,\n    }\n  }\n\n  toString() {\n    return this.text.toString()\n  }\n\n  toJSON() {\n    return {\n      text: this.text,\n      attributes: this.attributes,\n      htmlAttributes: this.htmlAttributes,\n    }\n  }\n\n  // BIDI\n\n  getDirection() {\n    return this.text.getDirection()\n  }\n\n  isRTL() {\n    return this.text.isRTL()\n  }\n\n  // Splittable\n\n  getLength() {\n    return this.text.getLength()\n  }\n\n  canBeConsolidatedWith(block) {\n    return !this.hasAttributes() && !block.hasAttributes() && this.getDirection() === block.getDirection()\n  }\n\n  consolidateWith(block) {\n    const newlineText = Text.textForStringWithAttributes(\"\\n\")\n    const text = this.getTextWithoutBlockBreak().appendText(newlineText)\n    return this.copyWithText(text.appendText(block.text))\n  }\n\n  splitAtOffset(offset) {\n    let left, right\n    if (offset === 0) {\n      left = null\n      right = this\n    } else if (offset === this.getLength()) {\n      left = this\n      right = null\n    } else {\n      left = this.copyWithText(this.text.getTextAtRange([ 0, offset ]))\n      right = this.copyWithText(this.text.getTextAtRange([ offset, this.getLength() ]))\n    }\n    return [ left, right ]\n  }\n\n  getBlockBreakPosition() {\n    return this.text.getLength() - 1\n  }\n\n  getTextWithoutBlockBreak() {\n    if (textEndsInBlockBreak(this.text)) {\n      return this.text.getTextAtRange([ 0, this.getBlockBreakPosition() ])\n    } else {\n      return this.text.copy()\n    }\n  }\n\n  // Grouping\n\n  canBeGrouped(depth) {\n    return this.attributes[depth]\n  }\n\n  canBeGroupedWith(otherBlock, depth) {\n    const otherAttributes = otherBlock.getAttributes()\n    const otherAttribute = otherAttributes[depth]\n    const attribute = this.attributes[depth]\n\n    return (\n      attribute === otherAttribute &&\n      !(getBlockConfig(attribute).group === false && !getListAttributeNames().includes(otherAttributes[depth + 1])) &&\n      (this.getDirection() === otherBlock.getDirection() || otherBlock.isEmpty())\n    )\n  }\n}\n\n// Block breaks\n\nconst applyBlockBreakToText = function(text) {\n  text = unmarkExistingInnerBlockBreaksInText(text)\n  text = addBlockBreakToText(text)\n  return text\n}\n\nconst unmarkExistingInnerBlockBreaksInText = function(text) {\n  let modified = false\n  const pieces = text.getPieces()\n\n  let innerPieces = pieces.slice(0, pieces.length - 1)\n  const lastPiece = pieces[pieces.length - 1]\n\n  if (!lastPiece) return text\n\n  innerPieces = innerPieces.map((piece) => {\n    if (piece.isBlockBreak()) {\n      modified = true\n      return unmarkBlockBreakPiece(piece)\n    } else {\n      return piece\n    }\n  })\n\n  if (modified) {\n    return new Text([ ...innerPieces, lastPiece ])\n  } else {\n    return text\n  }\n}\n\nconst blockBreakText = Text.textForStringWithAttributes(\"\\n\", { blockBreak: true })\n\nconst addBlockBreakToText = function(text) {\n  if (textEndsInBlockBreak(text)) {\n    return text\n  } else {\n    return text.appendText(blockBreakText)\n  }\n}\n\nconst textEndsInBlockBreak = function(text) {\n  const length = text.getLength()\n  if (length === 0) {\n    return false\n  }\n  const endText = text.getTextAtRange([ length - 1, length ])\n  return endText.isBlockBreak()\n}\n\nconst unmarkBlockBreakPiece = (piece) => piece.copyWithoutAttribute(\"blockBreak\")\n\n// Attributes\n\nconst expandAttribute = function(attribute) {\n  const { listAttribute } = getBlockConfig(attribute)\n  if (listAttribute) {\n    return [ listAttribute, attribute ]\n  } else {\n    return [ attribute ]\n  }\n}\n\n// Array helpers\n\nconst getLastElement = (array) => array.slice(-1)[0]\n\nconst removeLastValue = function(array, value) {\n  const index = array.lastIndexOf(value)\n  if (index === -1) {\n    return array\n  } else {\n    return spliceArray(array, index, 1)\n  }\n}\n", "import * as config from \"trix/config\"\nimport TrixObject from \"trix/core/object\" // Don't override window.Object\n\nimport Text from \"trix/models/text\"\nimport Block from \"trix/models/block\"\nimport SplittableList from \"trix/models/splittable_list\"\nimport Hash from \"trix/core/collections/hash\"\nimport ObjectMap from \"trix/core/collections/object_map\"\n\nimport { arraysAreEqual, getBlockConfig, normalizeRange, rangeIsCollapsed } from \"trix/core/helpers\"\n\nexport default class Document extends TrixObject {\n  static fromJSON(documentJSON) {\n    const blocks = Array.from(documentJSON).map((blockJSON) => Block.fromJSON(blockJSON))\n    return new this(blocks)\n  }\n\n  static fromString(string, textAttributes) {\n    const text = Text.textForStringWithAttributes(string, textAttributes)\n    return new this([ new Block(text) ])\n  }\n\n  constructor(blocks = []) {\n    super(...arguments)\n    if (blocks.length === 0) {\n      blocks = [ new Block() ]\n    }\n    this.blockList = SplittableList.box(blocks)\n  }\n\n  isEmpty() {\n    const block = this.getBlockAtIndex(0)\n    return this.blockList.length === 1 && block.isEmpty() && !block.hasAttributes()\n  }\n\n  copy(options = {}) {\n    const blocks = options.consolidateBlocks ? this.blockList.consolidate().toArray() : this.blockList.toArray()\n\n    return new this.constructor(blocks)\n  }\n\n  copyUsingObjectsFromDocument(sourceDocument) {\n    const objectMap = new ObjectMap(sourceDocument.getObjects())\n    return this.copyUsingObjectMap(objectMap)\n  }\n\n  copyUsingObjectMap(objectMap) {\n    const blocks = this.getBlocks().map((block) => {\n      const mappedBlock = objectMap.find(block)\n      return mappedBlock || block.copyUsingObjectMap(objectMap)\n    })\n    return new this.constructor(blocks)\n  }\n\n  copyWithBaseBlockAttributes(blockAttributes = []) {\n    const blocks = this.getBlocks().map((block) => {\n      const attributes = blockAttributes.concat(block.getAttributes())\n      return block.copyWithAttributes(attributes)\n    })\n\n    return new this.constructor(blocks)\n  }\n\n  replaceBlock(oldBlock, newBlock) {\n    const index = this.blockList.indexOf(oldBlock)\n    if (index === -1) {\n      return this\n    }\n    return new this.constructor(this.blockList.replaceObjectAtIndex(newBlock, index))\n  }\n\n  insertDocumentAtRange(document, range) {\n    const { blockList } = document\n    range = normalizeRange(range)\n    let [ position ] = range\n    const { index, offset } = this.locationFromPosition(position)\n\n    let result = this\n    const block = this.getBlockAtPosition(position)\n\n    if (rangeIsCollapsed(range) && block.isEmpty() && !block.hasAttributes()) {\n      result = new this.constructor(result.blockList.removeObjectAtIndex(index))\n    } else if (block.getBlockBreakPosition() === offset) {\n      position++\n    }\n\n    result = result.removeTextAtRange(range)\n    return new this.constructor(result.blockList.insertSplittableListAtPosition(blockList, position))\n  }\n\n  mergeDocumentAtRange(document, range) {\n    let formattedDocument, result\n    range = normalizeRange(range)\n    const [ startPosition ] = range\n    const startLocation = this.locationFromPosition(startPosition)\n    const blockAttributes = this.getBlockAtIndex(startLocation.index).getAttributes()\n    const baseBlockAttributes = document.getBaseBlockAttributes()\n    const trailingBlockAttributes = blockAttributes.slice(-baseBlockAttributes.length)\n\n    if (arraysAreEqual(baseBlockAttributes, trailingBlockAttributes)) {\n      const leadingBlockAttributes = blockAttributes.slice(0, -baseBlockAttributes.length)\n      formattedDocument = document.copyWithBaseBlockAttributes(leadingBlockAttributes)\n    } else {\n      formattedDocument = document.copy({ consolidateBlocks: true }).copyWithBaseBlockAttributes(blockAttributes)\n    }\n\n    const blockCount = formattedDocument.getBlockCount()\n    const firstBlock = formattedDocument.getBlockAtIndex(0)\n\n    if (arraysAreEqual(blockAttributes, firstBlock.getAttributes())) {\n      const firstText = firstBlock.getTextWithoutBlockBreak()\n      result = this.insertTextAtRange(firstText, range)\n\n      if (blockCount > 1) {\n        formattedDocument = new this.constructor(formattedDocument.getBlocks().slice(1))\n        const position = startPosition + firstText.getLength()\n        result = result.insertDocumentAtRange(formattedDocument, position)\n      }\n    } else {\n      result = this.insertDocumentAtRange(formattedDocument, range)\n    }\n\n    return result\n  }\n\n  insertTextAtRange(text, range) {\n    range = normalizeRange(range)\n    const [ startPosition ] = range\n    const { index, offset } = this.locationFromPosition(startPosition)\n\n    const document = this.removeTextAtRange(range)\n    return new this.constructor(\n      document.blockList.editObjectAtIndex(index, (block) =>\n        block.copyWithText(block.text.insertTextAtPosition(text, offset))\n      )\n    )\n  }\n\n  removeTextAtRange(range) {\n    let blocks\n    range = normalizeRange(range)\n    const [ leftPosition, rightPosition ] = range\n    if (rangeIsCollapsed(range)) {\n      return this\n    }\n    const [ leftLocation, rightLocation ] = Array.from(this.locationRangeFromRange(range))\n\n    const leftIndex = leftLocation.index\n    const leftOffset = leftLocation.offset\n    const leftBlock = this.getBlockAtIndex(leftIndex)\n\n    const rightIndex = rightLocation.index\n    const rightOffset = rightLocation.offset\n    const rightBlock = this.getBlockAtIndex(rightIndex)\n\n    const removeRightNewline =\n      rightPosition - leftPosition === 1 &&\n      leftBlock.getBlockBreakPosition() === leftOffset &&\n      rightBlock.getBlockBreakPosition() !== rightOffset &&\n      rightBlock.text.getStringAtPosition(rightOffset) === \"\\n\"\n\n    if (removeRightNewline) {\n      blocks = this.blockList.editObjectAtIndex(rightIndex, (block) =>\n        block.copyWithText(block.text.removeTextAtRange([ rightOffset, rightOffset + 1 ]))\n      )\n    } else {\n      let block\n      const leftText = leftBlock.text.getTextAtRange([ 0, leftOffset ])\n      const rightText = rightBlock.text.getTextAtRange([ rightOffset, rightBlock.getLength() ])\n      const text = leftText.appendText(rightText)\n\n      const removingLeftBlock = leftIndex !== rightIndex && leftOffset === 0\n      const useRightBlock = removingLeftBlock && leftBlock.getAttributeLevel() >= rightBlock.getAttributeLevel()\n\n      if (useRightBlock) {\n        block = rightBlock.copyWithText(text)\n      } else {\n        block = leftBlock.copyWithText(text)\n      }\n\n      const affectedBlockCount = rightIndex + 1 - leftIndex\n      blocks = this.blockList.splice(leftIndex, affectedBlockCount, block)\n    }\n\n    return new this.constructor(blocks)\n  }\n\n  moveTextFromRangeToPosition(range, position) {\n    let text\n    range = normalizeRange(range)\n    const [ startPosition, endPosition ] = range\n    if (startPosition <= position && position <= endPosition) {\n      return this\n    }\n\n    let document = this.getDocumentAtRange(range)\n    let result = this.removeTextAtRange(range)\n\n    const movingRightward = startPosition < position\n    if (movingRightward) {\n      position -= document.getLength()\n    }\n\n    const [ firstBlock, ...blocks ] = document.getBlocks()\n    if (blocks.length === 0) {\n      text = firstBlock.getTextWithoutBlockBreak()\n      if (movingRightward) {\n        position += 1\n      }\n    } else {\n      text = firstBlock.text\n    }\n\n    result = result.insertTextAtRange(text, position)\n    if (blocks.length === 0) {\n      return result\n    }\n\n    document = new this.constructor(blocks)\n    position += text.getLength()\n\n    return result.insertDocumentAtRange(document, position)\n  }\n\n  addAttributeAtRange(attribute, value, range) {\n    let { blockList } = this\n    this.eachBlockAtRange(\n      range,\n      (block, textRange, index) =>\n        blockList = blockList.editObjectAtIndex(index, function() {\n          if (getBlockConfig(attribute)) {\n            return block.addAttribute(attribute, value)\n          } else {\n            if (textRange[0] === textRange[1]) {\n              return block\n            } else {\n              return block.copyWithText(block.text.addAttributeAtRange(attribute, value, textRange))\n            }\n          }\n        })\n    )\n    return new this.constructor(blockList)\n  }\n\n  addAttribute(attribute, value) {\n    let { blockList } = this\n    this.eachBlock(\n      (block, index) => blockList = blockList.editObjectAtIndex(index, () => block.addAttribute(attribute, value))\n    )\n    return new this.constructor(blockList)\n  }\n\n  removeAttributeAtRange(attribute, range) {\n    let { blockList } = this\n    this.eachBlockAtRange(range, function(block, textRange, index) {\n      if (getBlockConfig(attribute)) {\n        blockList = blockList.editObjectAtIndex(index, () => block.removeAttribute(attribute))\n      } else if (textRange[0] !== textRange[1]) {\n        blockList = blockList.editObjectAtIndex(index, () =>\n          block.copyWithText(block.text.removeAttributeAtRange(attribute, textRange))\n        )\n      }\n    })\n    return new this.constructor(blockList)\n  }\n\n  updateAttributesForAttachment(attributes, attachment) {\n    const range = this.getRangeOfAttachment(attachment)\n    const [ startPosition ] = Array.from(range)\n    const { index } = this.locationFromPosition(startPosition)\n    const text = this.getTextAtIndex(index)\n\n    return new this.constructor(\n      this.blockList.editObjectAtIndex(index, (block) =>\n        block.copyWithText(text.updateAttributesForAttachment(attributes, attachment))\n      )\n    )\n  }\n\n  removeAttributeForAttachment(attribute, attachment) {\n    const range = this.getRangeOfAttachment(attachment)\n    return this.removeAttributeAtRange(attribute, range)\n  }\n\n  setHTMLAttributeAtPosition(position, name, value) {\n    const block = this.getBlockAtPosition(position)\n    const updatedBlock = block.addHTMLAttribute(name, value)\n    return this.replaceBlock(block, updatedBlock)\n  }\n\n  insertBlockBreakAtRange(range) {\n    let blocks\n    range = normalizeRange(range)\n    const [ startPosition ] = range\n    const { offset } = this.locationFromPosition(startPosition)\n\n    const document = this.removeTextAtRange(range)\n    if (offset === 0) {\n      blocks = [ new Block() ]\n    }\n    return new this.constructor(\n      document.blockList.insertSplittableListAtPosition(new SplittableList(blocks), startPosition)\n    )\n  }\n\n  applyBlockAttributeAtRange(attributeName, value, range) {\n    const expanded = this.expandRangeToLineBreaksAndSplitBlocks(range)\n    let document = expanded.document\n    range = expanded.range\n    const blockConfig = getBlockConfig(attributeName)\n\n    if (blockConfig.listAttribute) {\n      document = document.removeLastListAttributeAtRange(range, { exceptAttributeName: attributeName })\n      const converted = document.convertLineBreaksToBlockBreaksInRange(range)\n      document = converted.document\n      range = converted.range\n    } else if (blockConfig.exclusive) {\n      document = document.removeBlockAttributesAtRange(range)\n    } else if (blockConfig.terminal) {\n      document = document.removeLastTerminalAttributeAtRange(range)\n    } else {\n      document = document.consolidateBlocksAtRange(range)\n    }\n\n    return document.addAttributeAtRange(attributeName, value, range)\n  }\n\n  removeLastListAttributeAtRange(range, options = {}) {\n    let { blockList } = this\n    this.eachBlockAtRange(range, function(block, textRange, index) {\n      const lastAttributeName = block.getLastAttribute()\n      if (!lastAttributeName) {\n        return\n      }\n      if (!getBlockConfig(lastAttributeName).listAttribute) {\n        return\n      }\n      if (lastAttributeName === options.exceptAttributeName) {\n        return\n      }\n      blockList = blockList.editObjectAtIndex(index, () => block.removeAttribute(lastAttributeName))\n    })\n    return new this.constructor(blockList)\n  }\n\n  removeLastTerminalAttributeAtRange(range) {\n    let { blockList } = this\n    this.eachBlockAtRange(range, function(block, textRange, index) {\n      const lastAttributeName = block.getLastAttribute()\n      if (!lastAttributeName) {\n        return\n      }\n      if (!getBlockConfig(lastAttributeName).terminal) {\n        return\n      }\n      blockList = blockList.editObjectAtIndex(index, () => block.removeAttribute(lastAttributeName))\n    })\n    return new this.constructor(blockList)\n  }\n\n  removeBlockAttributesAtRange(range) {\n    let { blockList } = this\n    this.eachBlockAtRange(range, function(block, textRange, index) {\n      if (block.hasAttributes()) {\n        blockList = blockList.editObjectAtIndex(index, () => block.copyWithoutAttributes())\n      }\n    })\n    return new this.constructor(blockList)\n  }\n\n  expandRangeToLineBreaksAndSplitBlocks(range) {\n    let position\n    range = normalizeRange(range)\n    let [ startPosition, endPosition ] = range\n    const startLocation = this.locationFromPosition(startPosition)\n    const endLocation = this.locationFromPosition(endPosition)\n    let document = this\n\n    const startBlock = document.getBlockAtIndex(startLocation.index)\n    startLocation.offset = startBlock.findLineBreakInDirectionFromPosition(\"backward\", startLocation.offset)\n    if (startLocation.offset != null) {\n      position = document.positionFromLocation(startLocation)\n      document = document.insertBlockBreakAtRange([ position, position + 1 ])\n      endLocation.index += 1\n      endLocation.offset -= document.getBlockAtIndex(startLocation.index).getLength()\n      startLocation.index += 1\n    }\n    startLocation.offset = 0\n\n    if (endLocation.offset === 0 && endLocation.index > startLocation.index) {\n      endLocation.index -= 1\n      endLocation.offset = document.getBlockAtIndex(endLocation.index).getBlockBreakPosition()\n    } else {\n      const endBlock = document.getBlockAtIndex(endLocation.index)\n      if (endBlock.text.getStringAtRange([ endLocation.offset - 1, endLocation.offset ]) === \"\\n\") {\n        endLocation.offset -= 1\n      } else {\n        endLocation.offset = endBlock.findLineBreakInDirectionFromPosition(\"forward\", endLocation.offset)\n      }\n      if (endLocation.offset !== endBlock.getBlockBreakPosition()) {\n        position = document.positionFromLocation(endLocation)\n        document = document.insertBlockBreakAtRange([ position, position + 1 ])\n      }\n    }\n\n    startPosition = document.positionFromLocation(startLocation)\n    endPosition = document.positionFromLocation(endLocation)\n    range = normalizeRange([ startPosition, endPosition ])\n\n    return { document, range }\n  }\n\n  convertLineBreaksToBlockBreaksInRange(range) {\n    range = normalizeRange(range)\n    let [ position ] = range\n    const string = this.getStringAtRange(range).slice(0, -1)\n    let document = this\n\n    string.replace(/.*?\\n/g, function(match) {\n      position += match.length\n      document = document.insertBlockBreakAtRange([ position - 1, position ])\n    })\n\n    return { document, range }\n  }\n\n  consolidateBlocksAtRange(range) {\n    range = normalizeRange(range)\n    const [ startPosition, endPosition ] = range\n    const startIndex = this.locationFromPosition(startPosition).index\n    const endIndex = this.locationFromPosition(endPosition).index\n    return new this.constructor(this.blockList.consolidateFromIndexToIndex(startIndex, endIndex))\n  }\n\n  getDocumentAtRange(range) {\n    range = normalizeRange(range)\n    const blocks = this.blockList.getSplittableListInRange(range).toArray()\n    return new this.constructor(blocks)\n  }\n\n  getStringAtRange(range) {\n    let endIndex\n    const array = range = normalizeRange(range),\n      endPosition = array[array.length - 1]\n    if (endPosition !== this.getLength()) {\n      endIndex = -1\n    }\n    return this.getDocumentAtRange(range).toString().slice(0, endIndex)\n  }\n\n  getBlockAtIndex(index) {\n    return this.blockList.getObjectAtIndex(index)\n  }\n\n  getBlockAtPosition(position) {\n    const { index } = this.locationFromPosition(position)\n    return this.getBlockAtIndex(index)\n  }\n\n  getTextAtIndex(index) {\n    return this.getBlockAtIndex(index)?.text\n  }\n\n  getTextAtPosition(position) {\n    const { index } = this.locationFromPosition(position)\n    return this.getTextAtIndex(index)\n  }\n\n  getPieceAtPosition(position) {\n    const { index, offset } = this.locationFromPosition(position)\n    return this.getTextAtIndex(index).getPieceAtPosition(offset)\n  }\n\n  getCharacterAtPosition(position) {\n    const { index, offset } = this.locationFromPosition(position)\n    return this.getTextAtIndex(index).getStringAtRange([ offset, offset + 1 ])\n  }\n\n  getLength() {\n    return this.blockList.getEndPosition()\n  }\n\n  getBlocks() {\n    return this.blockList.toArray()\n  }\n\n  getBlockCount() {\n    return this.blockList.length\n  }\n\n  getEditCount() {\n    return this.editCount\n  }\n\n  eachBlock(callback) {\n    return this.blockList.eachObject(callback)\n  }\n\n  eachBlockAtRange(range, callback) {\n    let block, textRange\n    range = normalizeRange(range)\n    const [ startPosition, endPosition ] = range\n    const startLocation = this.locationFromPosition(startPosition)\n    const endLocation = this.locationFromPosition(endPosition)\n\n    if (startLocation.index === endLocation.index) {\n      block = this.getBlockAtIndex(startLocation.index)\n      textRange = [ startLocation.offset, endLocation.offset ]\n      return callback(block, textRange, startLocation.index)\n    } else {\n      for (let index = startLocation.index; index <= endLocation.index; index++) {\n        block = this.getBlockAtIndex(index)\n        if (block) {\n          switch (index) {\n            case startLocation.index:\n              textRange = [ startLocation.offset, block.text.getLength() ]\n              break\n            case endLocation.index:\n              textRange = [ 0, endLocation.offset ]\n              break\n            default:\n              textRange = [ 0, block.text.getLength() ]\n          }\n          callback(block, textRange, index)\n        }\n      }\n    }\n  }\n\n  getCommonAttributesAtRange(range) {\n    range = normalizeRange(range)\n    const [ startPosition ] = range\n    if (rangeIsCollapsed(range)) {\n      return this.getCommonAttributesAtPosition(startPosition)\n    } else {\n      const textAttributes = []\n      const blockAttributes = []\n\n      this.eachBlockAtRange(range, function(block, textRange) {\n        if (textRange[0] !== textRange[1]) {\n          textAttributes.push(block.text.getCommonAttributesAtRange(textRange))\n          return blockAttributes.push(attributesForBlock(block))\n        }\n      })\n\n      return Hash.fromCommonAttributesOfObjects(textAttributes)\n        .merge(Hash.fromCommonAttributesOfObjects(blockAttributes))\n        .toObject()\n    }\n  }\n\n  getCommonAttributesAtPosition(position) {\n    let key, value\n    const { index, offset } = this.locationFromPosition(position)\n    const block = this.getBlockAtIndex(index)\n    if (!block) {\n      return {}\n    }\n\n    const commonAttributes = attributesForBlock(block)\n    const attributes = block.text.getAttributesAtPosition(offset)\n    const attributesLeft = block.text.getAttributesAtPosition(offset - 1)\n    const inheritableAttributes = Object.keys(config.textAttributes).filter((key) => {\n      return config.textAttributes[key].inheritable\n    })\n\n    for (key in attributesLeft) {\n      value = attributesLeft[key]\n      if (value === attributes[key] || inheritableAttributes.includes(key)) {\n        commonAttributes[key] = value\n      }\n    }\n\n    return commonAttributes\n  }\n\n  getRangeOfCommonAttributeAtPosition(attributeName, position) {\n    const { index, offset } = this.locationFromPosition(position)\n    const text = this.getTextAtIndex(index)\n    const [ startOffset, endOffset ] = Array.from(text.getExpandedRangeForAttributeAtOffset(attributeName, offset))\n\n    const start = this.positionFromLocation({ index, offset: startOffset })\n    const end = this.positionFromLocation({ index, offset: endOffset })\n    return normalizeRange([ start, end ])\n  }\n\n  getBaseBlockAttributes() {\n    let baseBlockAttributes = this.getBlockAtIndex(0).getAttributes()\n\n    for (let blockIndex = 1; blockIndex < this.getBlockCount(); blockIndex++) {\n      const blockAttributes = this.getBlockAtIndex(blockIndex).getAttributes()\n      const lastAttributeIndex = Math.min(baseBlockAttributes.length, blockAttributes.length)\n\n      baseBlockAttributes = (() => {\n        const result = []\n        for (let index = 0; index < lastAttributeIndex; index++) {\n          if (blockAttributes[index] !== baseBlockAttributes[index]) {\n            break\n          }\n          result.push(blockAttributes[index])\n        }\n        return result\n      })()\n    }\n\n    return baseBlockAttributes\n  }\n\n  getAttachmentById(attachmentId) {\n    for (const attachment of this.getAttachments()) {\n      if (attachment.id === attachmentId) {\n        return attachment\n      }\n    }\n  }\n\n  getAttachmentPieces() {\n    let attachmentPieces = []\n    this.blockList.eachObject(({ text }) => attachmentPieces = attachmentPieces.concat(text.getAttachmentPieces()))\n    return attachmentPieces\n  }\n\n  getAttachments() {\n    return this.getAttachmentPieces().map((piece) => piece.attachment)\n  }\n\n  getRangeOfAttachment(attachment) {\n    let position = 0\n    const iterable = this.blockList.toArray()\n    for (let index = 0; index < iterable.length; index++) {\n      const { text } = iterable[index]\n      const textRange = text.getRangeOfAttachment(attachment)\n      if (textRange) {\n        return normalizeRange([ position + textRange[0], position + textRange[1] ])\n      }\n      position += text.getLength()\n    }\n  }\n\n  getLocationRangeOfAttachment(attachment) {\n    const range = this.getRangeOfAttachment(attachment)\n    return this.locationRangeFromRange(range)\n  }\n\n  getAttachmentPieceForAttachment(attachment) {\n    for (const piece of this.getAttachmentPieces()) {\n      if (piece.attachment === attachment) {\n        return piece\n      }\n    }\n  }\n\n  findRangesForBlockAttribute(attributeName) {\n    let position = 0\n    const ranges = []\n\n    this.getBlocks().forEach((block) => {\n      const length = block.getLength()\n      if (block.hasAttribute(attributeName)) {\n        ranges.push([ position, position + length ])\n      }\n      position += length\n    })\n\n    return ranges\n  }\n\n  findRangesForTextAttribute(attributeName, { withValue } = {}) {\n    let position = 0\n    let range = []\n    const ranges = []\n\n    const match = function(piece) {\n      if (withValue) {\n        return piece.getAttribute(attributeName) === withValue\n      } else {\n        return piece.hasAttribute(attributeName)\n      }\n    }\n\n    this.getPieces().forEach((piece) => {\n      const length = piece.getLength()\n      if (match(piece)) {\n        if (range[1] === position) {\n          range[1] = position + length\n        } else {\n          ranges.push(range = [ position, position + length ])\n        }\n      }\n      position += length\n    })\n\n    return ranges\n  }\n\n  locationFromPosition(position) {\n    const location = this.blockList.findIndexAndOffsetAtPosition(Math.max(0, position))\n    if (location.index != null) {\n      return location\n    } else {\n      const blocks = this.getBlocks()\n      return { index: blocks.length - 1, offset: blocks[blocks.length - 1].getLength() }\n    }\n  }\n\n  positionFromLocation(location) {\n    return this.blockList.findPositionAtIndexAndOffset(location.index, location.offset)\n  }\n\n  locationRangeFromPosition(position) {\n    return normalizeRange(this.locationFromPosition(position))\n  }\n\n  locationRangeFromRange(range) {\n    range = normalizeRange(range)\n    if (!range) return\n\n    const [ startPosition, endPosition ] = Array.from(range)\n    const startLocation = this.locationFromPosition(startPosition)\n    const endLocation = this.locationFromPosition(endPosition)\n    return normalizeRange([ startLocation, endLocation ])\n  }\n\n  rangeFromLocationRange(locationRange) {\n    let rightPosition\n    locationRange = normalizeRange(locationRange)\n    const leftPosition = this.positionFromLocation(locationRange[0])\n    if (!rangeIsCollapsed(locationRange)) {\n      rightPosition = this.positionFromLocation(locationRange[1])\n    }\n    return normalizeRange([ leftPosition, rightPosition ])\n  }\n\n  isEqualTo(document) {\n    return this.blockList.isEqualTo(document?.blockList)\n  }\n\n  getTexts() {\n    return this.getBlocks().map((block) => block.text)\n  }\n\n  getPieces() {\n    const pieces = []\n\n    Array.from(this.getTexts()).forEach((text) => {\n      pieces.push(...Array.from(text.getPieces() || []))\n    })\n\n    return pieces\n  }\n\n  getObjects() {\n    return this.getBlocks().concat(this.getTexts()).concat(this.getPieces())\n  }\n\n  toSerializableDocument() {\n    const blocks = []\n    this.blockList.eachObject((block) => blocks.push(block.copyWithText(block.text.toSerializableText())))\n    return new this.constructor(blocks)\n  }\n\n  toString() {\n    return this.blockList.toString()\n  }\n\n  toJSON() {\n    return this.blockList.toJSON()\n  }\n\n  toConsole() {\n    return JSON.stringify(this.blockList.toArray().map((block) => JSON.parse(block.text.toConsole())))\n  }\n}\n\nconst attributesForBlock = function(block) {\n  const attributes = {}\n  const attributeName = block.getLastAttribute()\n  if (attributeName) {\n    attributes[attributeName] = true\n  }\n  return attributes\n}\n", "/* eslint-disable\n    no-case-declarations,\n    no-irregular-whitespace,\n*/\nimport * as config from \"trix/config\"\nimport BasicObject from \"trix/core/basic_object\"\nimport Document from \"trix/models/document\"\nimport HTMLSanitizer from \"trix/models/html_sanitizer\"\n\nimport {\n  arraysAreEqual,\n  breakableWhitespacePattern,\n  elementContainsNode,\n  findClosestElementFromNode,\n  getBlockTagNames,\n  makeElement,\n  nodeIsAttachmentElement,\n  normalizeSpaces,\n  removeNode,\n  squishBreakableWhitespace,\n  tagName,\n  walkTree,\n} from \"trix/core/helpers\"\n\nconst pieceForString = (string, attributes = {}) => {\n  const type = \"string\"\n  string = normalizeSpaces(string)\n  return { string, attributes, type }\n}\n\nconst pieceForAttachment = (attachment, attributes = {}) => {\n  const type = \"attachment\"\n  return { attachment, attributes, type }\n}\n\nconst blockForAttributes = (attributes = {}, htmlAttributes = {}) => {\n  const text = []\n  return { text, attributes, htmlAttributes }\n}\n\nconst parseTrixDataAttribute = (element, name) => {\n  try {\n    return JSON.parse(element.getAttribute(`data-trix-${name}`))\n  } catch (error) {\n    return {}\n  }\n}\n\nconst getImageDimensions = (element) => {\n  const width = element.getAttribute(\"width\")\n  const height = element.getAttribute(\"height\")\n  const dimensions = {}\n  if (width) {\n    dimensions.width = parseInt(width, 10)\n  }\n  if (height) {\n    dimensions.height = parseInt(height, 10)\n  }\n  return dimensions\n}\n\nexport default class HTMLParser extends BasicObject {\n  static parse(html, options) {\n    const parser = new this(html, options)\n    parser.parse()\n    return parser\n  }\n\n  constructor(html, { referenceElement, purifyOptions } = {}) {\n    super(...arguments)\n    this.html = html\n    this.referenceElement = referenceElement\n    this.purifyOptions = purifyOptions\n    this.blocks = []\n    this.blockElements = []\n    this.processedElements = []\n  }\n\n  getDocument() {\n    return Document.fromJSON(this.blocks)\n  }\n\n  // HTML parsing\n\n  parse() {\n    try {\n      this.createHiddenContainer()\n      HTMLSanitizer.setHTML(this.containerElement, this.html, { purifyOptions: this.purifyOptions })\n      const walker = walkTree(this.containerElement, { usingFilter: nodeFilter })\n      while (walker.nextNode()) {\n        this.processNode(walker.currentNode)\n      }\n      return this.translateBlockElementMarginsToNewlines()\n    } finally {\n      this.removeHiddenContainer()\n    }\n  }\n\n  createHiddenContainer() {\n    if (this.referenceElement) {\n      this.containerElement = this.referenceElement.cloneNode(false)\n      this.containerElement.removeAttribute(\"id\")\n      this.containerElement.setAttribute(\"data-trix-internal\", \"\")\n      this.containerElement.style.display = \"none\"\n      return this.referenceElement.parentNode.insertBefore(this.containerElement, this.referenceElement.nextSibling)\n    } else {\n      this.containerElement = makeElement({ tagName: \"div\", style: { display: \"none\" } })\n      return document.body.appendChild(this.containerElement)\n    }\n  }\n\n  removeHiddenContainer() {\n    return removeNode(this.containerElement)\n  }\n\n  processNode(node) {\n    switch (node.nodeType) {\n      case Node.TEXT_NODE:\n        if (!this.isInsignificantTextNode(node)) {\n          this.appendBlockForTextNode(node)\n          return this.processTextNode(node)\n        }\n        break\n      case Node.ELEMENT_NODE:\n        this.appendBlockForElement(node)\n        return this.processElement(node)\n    }\n  }\n\n  appendBlockForTextNode(node) {\n    const element = node.parentNode\n    if (element === this.currentBlockElement && this.isBlockElement(node.previousSibling)) {\n      return this.appendStringWithAttributes(\"\\n\")\n    } else if (element === this.containerElement || this.isBlockElement(element)) {\n      const attributes = this.getBlockAttributes(element)\n      const htmlAttributes = this.getBlockHTMLAttributes(element)\n      if (!arraysAreEqual(attributes, this.currentBlock?.attributes)) {\n        this.currentBlock = this.appendBlockForAttributesWithElement(attributes, element, htmlAttributes)\n        this.currentBlockElement = element\n      }\n    }\n  }\n\n  appendBlockForElement(element) {\n    const elementIsBlockElement = this.isBlockElement(element)\n    const currentBlockContainsElement = elementContainsNode(this.currentBlockElement, element)\n\n    if (elementIsBlockElement && !this.isBlockElement(element.firstChild)) {\n      if (!this.isInsignificantTextNode(element.firstChild) || !this.isBlockElement(element.firstElementChild)) {\n        const attributes = this.getBlockAttributes(element)\n        const htmlAttributes = this.getBlockHTMLAttributes(element)\n        if (element.firstChild) {\n          if (!(currentBlockContainsElement && arraysAreEqual(attributes, this.currentBlock.attributes))) {\n            this.currentBlock = this.appendBlockForAttributesWithElement(attributes, element, htmlAttributes)\n            this.currentBlockElement = element\n          } else {\n            return this.appendStringWithAttributes(\"\\n\")\n          }\n        }\n      }\n    } else if (this.currentBlockElement && !currentBlockContainsElement && !elementIsBlockElement) {\n      const parentBlockElement = this.findParentBlockElement(element)\n      if (parentBlockElement) {\n        return this.appendBlockForElement(parentBlockElement)\n      } else {\n        this.currentBlock = this.appendEmptyBlock()\n        this.currentBlockElement = null\n      }\n    }\n  }\n\n  findParentBlockElement(element) {\n    let { parentElement } = element\n    while (parentElement && parentElement !== this.containerElement) {\n      if (this.isBlockElement(parentElement) && this.blockElements.includes(parentElement)) {\n        return parentElement\n      } else {\n        parentElement = parentElement.parentElement\n      }\n    }\n    return null\n  }\n\n  processTextNode(node) {\n    let string = node.data\n    if (!elementCanDisplayPreformattedText(node.parentNode)) {\n      string = squishBreakableWhitespace(string)\n      if (stringEndsWithWhitespace(node.previousSibling?.textContent)) {\n        string = leftTrimBreakableWhitespace(string)\n      }\n    }\n    return this.appendStringWithAttributes(string, this.getTextAttributes(node.parentNode))\n  }\n\n  processElement(element) {\n    let attributes\n    if (nodeIsAttachmentElement(element)) {\n      attributes = parseTrixDataAttribute(element, \"attachment\")\n      if (Object.keys(attributes).length) {\n        const textAttributes = this.getTextAttributes(element)\n        this.appendAttachmentWithAttributes(attributes, textAttributes)\n        // We have everything we need so avoid processing inner nodes\n        element.innerHTML = \"\"\n      }\n      return this.processedElements.push(element)\n    } else {\n      switch (tagName(element)) {\n        case \"br\":\n          if (!this.isExtraBR(element) && !this.isBlockElement(element.nextSibling)) {\n            this.appendStringWithAttributes(\"\\n\", this.getTextAttributes(element))\n          }\n          return this.processedElements.push(element)\n        case \"img\":\n          attributes = { url: element.getAttribute(\"src\"), contentType: \"image\" }\n          const object = getImageDimensions(element)\n          for (const key in object) {\n            const value = object[key]\n            attributes[key] = value\n          }\n          this.appendAttachmentWithAttributes(attributes, this.getTextAttributes(element))\n          return this.processedElements.push(element)\n        case \"tr\":\n          if (this.needsTableSeparator(element)) {\n            return this.appendStringWithAttributes(config.parser.tableRowSeparator)\n          }\n          break\n        case \"td\":\n          if (this.needsTableSeparator(element)) {\n            return this.appendStringWithAttributes(config.parser.tableCellSeparator)\n          }\n          break\n      }\n    }\n  }\n\n  // Document construction\n\n  appendBlockForAttributesWithElement(attributes, element, htmlAttributes = {}) {\n    this.blockElements.push(element)\n    const block = blockForAttributes(attributes, htmlAttributes)\n    this.blocks.push(block)\n    return block\n  }\n\n  appendEmptyBlock() {\n    return this.appendBlockForAttributesWithElement([], null)\n  }\n\n  appendStringWithAttributes(string, attributes) {\n    return this.appendPiece(pieceForString(string, attributes))\n  }\n\n  appendAttachmentWithAttributes(attachment, attributes) {\n    return this.appendPiece(pieceForAttachment(attachment, attributes))\n  }\n\n  appendPiece(piece) {\n    if (this.blocks.length === 0) {\n      this.appendEmptyBlock()\n    }\n    return this.blocks[this.blocks.length - 1].text.push(piece)\n  }\n\n  appendStringToTextAtIndex(string, index) {\n    const { text } = this.blocks[index]\n    const piece = text[text.length - 1]\n\n    if (piece?.type === \"string\") {\n      piece.string += string\n    } else {\n      return text.push(pieceForString(string))\n    }\n  }\n\n  prependStringToTextAtIndex(string, index) {\n    const { text } = this.blocks[index]\n    const piece = text[0]\n\n    if (piece?.type === \"string\") {\n      piece.string = string + piece.string\n    } else {\n      return text.unshift(pieceForString(string))\n    }\n  }\n\n  // Attribute parsing\n\n  getTextAttributes(element) {\n    let value\n    const attributes = {}\n    for (const attribute in config.textAttributes) {\n      const configAttr = config.textAttributes[attribute]\n      if (\n        configAttr.tagName &&\n        findClosestElementFromNode(element, {\n          matchingSelector: configAttr.tagName,\n          untilNode: this.containerElement,\n        })\n      ) {\n        attributes[attribute] = true\n      } else if (configAttr.parser) {\n        value = configAttr.parser(element)\n        if (value) {\n          let attributeInheritedFromBlock = false\n          for (const blockElement of this.findBlockElementAncestors(element)) {\n            if (configAttr.parser(blockElement) === value) {\n              attributeInheritedFromBlock = true\n              break\n            }\n          }\n          if (!attributeInheritedFromBlock) {\n            attributes[attribute] = value\n          }\n        }\n      } else if (configAttr.styleProperty) {\n        value = element.style[configAttr.styleProperty]\n        if (value) {\n          attributes[attribute] = value\n        }\n      }\n    }\n\n    if (nodeIsAttachmentElement(element)) {\n      const object = parseTrixDataAttribute(element, \"attributes\")\n      for (const key in object) {\n        value = object[key]\n        attributes[key] = value\n      }\n    }\n\n    return attributes\n  }\n\n  getBlockAttributes(element) {\n    const attributes = []\n    while (element && element !== this.containerElement) {\n      for (const attribute in config.blockAttributes) {\n        const attrConfig = config.blockAttributes[attribute]\n        if (attrConfig.parse !== false) {\n          if (tagName(element) === attrConfig.tagName) {\n            if (attrConfig.test?.(element) || !attrConfig.test) {\n              attributes.push(attribute)\n              if (attrConfig.listAttribute) {\n                attributes.push(attrConfig.listAttribute)\n              }\n            }\n          }\n        }\n      }\n      element = element.parentNode\n    }\n    return attributes.reverse()\n  }\n\n  getBlockHTMLAttributes(element) {\n    const attributes = {}\n    const blockConfig = Object.values(config.blockAttributes).find(settings => settings.tagName === tagName(element))\n    const allowedAttributes = blockConfig?.htmlAttributes || []\n\n    allowedAttributes.forEach((attribute) => {\n      if (element.hasAttribute(attribute)) {\n        attributes[attribute] = element.getAttribute(attribute)\n      }\n    })\n\n    return attributes\n  }\n\n  findBlockElementAncestors(element) {\n    const ancestors = []\n    while (element && element !== this.containerElement) {\n      const tag = tagName(element)\n      if (getBlockTagNames().includes(tag)) {\n        ancestors.push(element)\n      }\n      element = element.parentNode\n    }\n    return ancestors\n  }\n\n  // Element inspection\n\n  isBlockElement(element) {\n    if (element?.nodeType !== Node.ELEMENT_NODE) return\n    if (nodeIsAttachmentElement(element)) return\n    if (findClosestElementFromNode(element, { matchingSelector: \"td\", untilNode: this.containerElement })) return\n\n    return getBlockTagNames().includes(tagName(element)) ||\n      window.getComputedStyle(element).display === \"block\"\n  }\n\n  isInsignificantTextNode(node) {\n    if (node?.nodeType !== Node.TEXT_NODE) return\n    if (!stringIsAllBreakableWhitespace(node.data)) return\n    const { parentNode, previousSibling, nextSibling } = node\n    if (nodeEndsWithNonWhitespace(parentNode.previousSibling) && !this.isBlockElement(parentNode.previousSibling)) return\n    if (elementCanDisplayPreformattedText(parentNode)) return\n    return !previousSibling || this.isBlockElement(previousSibling) || !nextSibling || this.isBlockElement(nextSibling)\n  }\n\n  isExtraBR(element) {\n    return tagName(element) === \"br\" && this.isBlockElement(element.parentNode) && element.parentNode.lastChild === element\n  }\n\n  needsTableSeparator(element) {\n    if (config.parser.removeBlankTableCells) {\n      const content = element.previousSibling?.textContent\n      return content && /\\S/.test(content)\n    } else {\n      return element.previousSibling\n    }\n  }\n\n  // Margin translation\n\n  translateBlockElementMarginsToNewlines() {\n    const defaultMargin = this.getMarginOfDefaultBlockElement()\n\n    for (let index = 0; index < this.blocks.length; index++) {\n      const margin = this.getMarginOfBlockElementAtIndex(index)\n      if (margin) {\n        if (margin.top > defaultMargin.top * 2) {\n          this.prependStringToTextAtIndex(\"\\n\", index)\n        }\n\n        if (margin.bottom > defaultMargin.bottom * 2) {\n          this.appendStringToTextAtIndex(\"\\n\", index)\n        }\n      }\n    }\n  }\n\n  getMarginOfBlockElementAtIndex(index) {\n    const element = this.blockElements[index]\n    if (element) {\n      if (element.textContent) {\n        if (!getBlockTagNames().includes(tagName(element)) && !this.processedElements.includes(element)) {\n          return getBlockElementMargin(element)\n        }\n      }\n    }\n  }\n\n  getMarginOfDefaultBlockElement() {\n    const element = makeElement(config.blockAttributes.default.tagName)\n    this.containerElement.appendChild(element)\n    return getBlockElementMargin(element)\n  }\n}\n\n// Helpers\n\nconst elementCanDisplayPreformattedText = function(element) {\n  const { whiteSpace } = window.getComputedStyle(element)\n  return [ \"pre\", \"pre-wrap\", \"pre-line\" ].includes(whiteSpace)\n}\n\nconst nodeEndsWithNonWhitespace = (node) => node && !stringEndsWithWhitespace(node.textContent)\n\nconst getBlockElementMargin = function(element) {\n  const style = window.getComputedStyle(element)\n  if (style.display === \"block\") {\n    return { top: parseInt(style.marginTop), bottom: parseInt(style.marginBottom) }\n  }\n}\n\nconst nodeFilter = function(node) {\n  if (tagName(node) === \"style\") {\n    return NodeFilter.FILTER_REJECT\n  } else {\n    return NodeFilter.FILTER_ACCEPT\n  }\n}\n\n// Whitespace\n\nconst leftTrimBreakableWhitespace = (string) => string.replace(new RegExp(`^${breakableWhitespacePattern.source}+`), \"\")\n\nconst stringIsAllBreakableWhitespace = (string) => new RegExp(`^${breakableWhitespacePattern.source}*$`).test(string)\n\nconst stringEndsWithWhitespace = (string) => /\\s$/.test(string)\n", "/* eslint-disable\n    no-empty,\n*/\nimport { removeNode } from \"trix/core/helpers\"\n\nimport DocumentView from \"trix/views/document_view\"\nimport Document from \"trix/models/document\"\nimport HTMLParser from \"trix/models/html_parser\"\n\nconst unserializableElementSelector = \"[data-trix-serialize=false]\"\nconst unserializableAttributeNames = [\n  \"contenteditable\",\n  \"data-trix-id\",\n  \"data-trix-store-key\",\n  \"data-trix-mutable\",\n  \"data-trix-placeholder\",\n  \"tabindex\",\n]\nconst serializedAttributesAttribute = \"data-trix-serialized-attributes\"\nconst serializedAttributesSelector = `[${serializedAttributesAttribute}]`\n\nconst blockCommentPattern = new RegExp(\"<!--block-->\", \"g\")\n\nconst serializers = {\n  \"application/json\": function(serializable) {\n    let document\n    if (serializable instanceof Document) {\n      document = serializable\n    } else if (serializable instanceof HTMLElement) {\n      document = HTMLParser.parse(serializable.innerHTML).getDocument()\n    } else {\n      throw new Error(\"unserializable object\")\n    }\n\n    return document.toSerializableDocument().toJSONString()\n  },\n\n  \"text/html\": function(serializable) {\n    let element\n    if (serializable instanceof Document) {\n      element = DocumentView.render(serializable)\n    } else if (serializable instanceof HTMLElement) {\n      element = serializable.cloneNode(true)\n    } else {\n      throw new Error(\"unserializable object\")\n    }\n\n    // Remove unserializable elements\n    Array.from(element.querySelectorAll(unserializableElementSelector)).forEach((el) => {\n      removeNode(el)\n    })\n\n    // Remove unserializable attributes\n    unserializableAttributeNames.forEach((attribute) => {\n      Array.from(element.querySelectorAll(`[${attribute}]`)).forEach((el) => {\n        el.removeAttribute(attribute)\n      })\n    })\n\n    // Rewrite elements with serialized attribute overrides\n    Array.from(element.querySelectorAll(serializedAttributesSelector)).forEach((el) => {\n      try {\n        const attributes = JSON.parse(el.getAttribute(serializedAttributesAttribute))\n        el.removeAttribute(serializedAttributesAttribute)\n        for (const name in attributes) {\n          const value = attributes[name]\n          el.setAttribute(name, value)\n        }\n      } catch (error) {}\n    })\n\n    return element.innerHTML.replace(blockCommentPattern, \"\")\n  },\n}\n\nconst deserializers = {\n  \"application/json\": function(string) {\n    return Document.fromJSONString(string)\n  },\n\n  \"text/html\": function(string) {\n    return HTMLParser.parse(string).getDocument()\n  },\n}\n\nexport const serializeToContentType = function(serializable, contentType) {\n  const serializer = serializers[contentType]\n  if (serializer) {\n    return serializer(serializable)\n  } else {\n    throw new Error(`unknown content type: ${contentType}`)\n  }\n}\n\nexport const deserializeFromContentType = function(string, contentType) {\n  const deserializer = deserializers[contentType]\n  if (deserializer) {\n    return deserializer(string)\n  } else {\n    throw new Error(`unknown content type: ${contentType}`)\n  }\n}\n", "import \"trix/models/attachment\"\nimport BasicObject from \"trix/core/basic_object\"\n\nexport default class ManagedAttachment extends BasicObject {\n  constructor(attachmentManager, attachment) {\n    super(...arguments)\n    this.attachmentManager = attachmentManager\n    this.attachment = attachment\n    this.id = this.attachment.id\n    this.file = this.attachment.file\n  }\n\n  remove() {\n    return this.attachmentManager.requestRemovalOfAttachment(this.attachment)\n  }\n}\n\nManagedAttachment.proxyMethod(\"attachment.getAttribute\")\nManagedAttachment.proxyMethod(\"attachment.hasAttribute\")\nManagedAttachment.proxyMethod(\"attachment.setAttribute\")\nManagedAttachment.proxyMethod(\"attachment.getAttributes\")\nManagedAttachment.proxyMethod(\"attachment.setAttributes\")\nManagedAttachment.proxyMethod(\"attachment.isPending\")\nManagedAttachment.proxyMethod(\"attachment.isPreviewable\")\nManagedAttachment.proxyMethod(\"attachment.getURL\")\nManagedAttachment.proxyMethod(\"attachment.getPreviewURL\")\nManagedAttachment.proxyMethod(\"attachment.setPreviewURL\")\nManagedAttachment.proxyMethod(\"attachment.getHref\")\nManagedAttachment.proxyMethod(\"attachment.getFilename\")\nManagedAttachment.proxyMethod(\"attachment.getFilesize\")\nManagedAttachment.proxyMethod(\"attachment.getFormattedFilesize\")\nManagedAttachment.proxyMethod(\"attachment.getExtension\")\nManagedAttachment.proxyMethod(\"attachment.getContentType\")\nManagedAttachment.proxyMethod(\"attachment.getFile\")\nManagedAttachment.proxyMethod(\"attachment.setFile\")\nManagedAttachment.proxyMethod(\"attachment.releaseFile\")\nManagedAttachment.proxyMethod(\"attachment.getUploadProgress\")\nManagedAttachment.proxyMethod(\"attachment.setUploadProgress\")\n\n", "import ManagedAttachment from \"trix/models/managed_attachment\"\nimport BasicObject from \"trix/core/basic_object\"\n\nexport default class AttachmentManager extends BasicObject {\n  constructor(attachments = []) {\n    super(...arguments)\n    this.managedAttachments = {}\n    Array.from(attachments).forEach((attachment) => {\n      this.manageAttachment(attachment)\n    })\n  }\n\n  getAttachments() {\n    const result = []\n    for (const id in this.managedAttachments) {\n      const attachment = this.managedAttachments[id]\n      result.push(attachment)\n    }\n    return result\n  }\n\n  manageAttachment(attachment) {\n    if (!this.managedAttachments[attachment.id]) {\n      this.managedAttachments[attachment.id] = new ManagedAttachment(this, attachment)\n    }\n    return this.managedAttachments[attachment.id]\n  }\n\n  attachmentIsManaged(attachment) {\n    return attachment.id in this.managedAttachments\n  }\n\n  requestRemovalOfAttachment(attachment) {\n    if (this.attachmentIsManaged(attachment)) {\n      return this.delegate?.attachmentManagerDidRequestRemovalOfAttachment?.(attachment)\n    }\n  }\n\n  unmanageAttachment(attachment) {\n    const managedAttachment = this.managedAttachments[attachment.id]\n    delete this.managedAttachments[attachment.id]\n    return managedAttachment\n  }\n}\n", "export default class LineBreakInsertion {\n  constructor(composition) {\n    this.composition = composition\n    this.document = this.composition.document\n    const selectedRange = this.composition.getSelectedRange()\n    this.startPosition = selectedRange[0]\n    this.endPosition = selectedRange[1]\n\n    this.startLocation = this.document.locationFromPosition(this.startPosition)\n    this.endLocation = this.document.locationFromPosition(this.endPosition)\n\n    this.block = this.document.getBlockAtIndex(this.endLocation.index)\n    this.breaksOnReturn = this.block.breaksOnReturn()\n    this.previousCharacter = this.block.text.getStringAtPosition(this.endLocation.offset - 1)\n    this.nextCharacter = this.block.text.getStringAtPosition(this.endLocation.offset)\n  }\n\n  shouldInsertBlockBreak() {\n    if (this.block.hasAttributes() && this.block.isListItem() && !this.block.isEmpty()) {\n      return this.startLocation.offset !== 0\n    } else {\n      return this.breaksOnReturn && this.nextCharacter !== \"\\n\"\n    }\n  }\n\n  shouldBreakFormattedBlock() {\n    return (\n      this.block.hasAttributes() &&\n      !this.block.isListItem() &&\n      (this.breaksOnReturn && this.nextCharacter === \"\\n\" || this.previousCharacter === \"\\n\")\n    )\n  }\n\n  shouldDecreaseListLevel() {\n    return this.block.hasAttributes() && this.block.isListItem() && this.block.isEmpty()\n  }\n\n  shouldPrependListItem() {\n    return this.block.isListItem() && this.startLocation.offset === 0 && !this.block.isEmpty()\n  }\n\n  shouldRemoveLastBlockAttribute() {\n    return this.block.hasAttributes() && !this.block.isListItem() && this.block.isEmpty()\n  }\n}\n", "import * as config from \"trix/config\"\nimport { OBJECT_REPLACEMENT_CHARACTER } from \"trix/constants\"\n\nimport BasicObject from \"trix/core/basic_object\"\nimport Text from \"trix/models/text\"\nimport Block from \"trix/models/block\"\nimport Attachment from \"trix/models/attachment\"\nimport Document from \"trix/models/document\"\nimport HTMLParser from \"trix/models/html_parser\"\nimport LineBreakInsertion from \"trix/models/line_break_insertion\"\n\nimport {\n  arrayStartsWith,\n  extend,\n  getAllAttributeNames,\n  getBlockConfig,\n  getTextConfig,\n  normalizeRange,\n  objectsAreEqual,\n  rangeIsCollapsed,\n  rangesAreEqual,\n  summarizeArrayChange,\n} from \"trix/core/helpers\"\n\nconst PLACEHOLDER = \" \"\n\nexport default class Composition extends BasicObject {\n  constructor() {\n    super(...arguments)\n    this.document = new Document()\n    this.attachments = []\n    this.currentAttributes = {}\n    this.revision = 0\n  }\n\n  setDocument(document) {\n    if (!document.isEqualTo(this.document)) {\n      this.document = document\n      this.refreshAttachments()\n      this.revision++\n      return this.delegate?.compositionDidChangeDocument?.(document)\n    }\n  }\n\n  // Snapshots\n\n  getSnapshot() {\n    return {\n      document: this.document,\n      selectedRange: this.getSelectedRange(),\n    }\n  }\n\n  loadSnapshot({ document, selectedRange }) {\n    this.delegate?.compositionWillLoadSnapshot?.()\n    this.setDocument(document != null ? document : new Document())\n    this.setSelection(selectedRange != null ? selectedRange : [ 0, 0 ])\n    return this.delegate?.compositionDidLoadSnapshot?.()\n  }\n\n  // Responder protocol\n\n  insertText(text, { updatePosition } = { updatePosition: true }) {\n    const selectedRange = this.getSelectedRange()\n    this.setDocument(this.document.insertTextAtRange(text, selectedRange))\n\n    const startPosition = selectedRange[0]\n    const endPosition = startPosition + text.getLength()\n\n    if (updatePosition) {\n      this.setSelection(endPosition)\n    }\n    return this.notifyDelegateOfInsertionAtRange([ startPosition, endPosition ])\n  }\n\n  insertBlock(block = new Block()) {\n    const document = new Document([ block ])\n    return this.insertDocument(document)\n  }\n\n  insertDocument(document = new Document()) {\n    const selectedRange = this.getSelectedRange()\n    this.setDocument(this.document.insertDocumentAtRange(document, selectedRange))\n\n    const startPosition = selectedRange[0]\n    const endPosition = startPosition + document.getLength()\n\n    this.setSelection(endPosition)\n    return this.notifyDelegateOfInsertionAtRange([ startPosition, endPosition ])\n  }\n\n  insertString(string, options) {\n    const attributes = this.getCurrentTextAttributes()\n    const text = Text.textForStringWithAttributes(string, attributes)\n    return this.insertText(text, options)\n  }\n\n  insertBlockBreak() {\n    const selectedRange = this.getSelectedRange()\n    this.setDocument(this.document.insertBlockBreakAtRange(selectedRange))\n\n    const startPosition = selectedRange[0]\n    const endPosition = startPosition + 1\n\n    this.setSelection(endPosition)\n    return this.notifyDelegateOfInsertionAtRange([ startPosition, endPosition ])\n  }\n\n  insertLineBreak() {\n    const insertion = new LineBreakInsertion(this)\n\n    if (insertion.shouldDecreaseListLevel()) {\n      this.decreaseListLevel()\n      return this.setSelection(insertion.startPosition)\n    } else if (insertion.shouldPrependListItem()) {\n      const document = new Document([ insertion.block.copyWithoutText() ])\n      return this.insertDocument(document)\n    } else if (insertion.shouldInsertBlockBreak()) {\n      return this.insertBlockBreak()\n    } else if (insertion.shouldRemoveLastBlockAttribute()) {\n      return this.removeLastBlockAttribute()\n    } else if (insertion.shouldBreakFormattedBlock()) {\n      return this.breakFormattedBlock(insertion)\n    } else {\n      return this.insertString(\"\\n\")\n    }\n  }\n\n  insertHTML(html) {\n    const document = HTMLParser.parse(html, { purifyOptions: { SAFE_FOR_XML: true } }).getDocument()\n    const selectedRange = this.getSelectedRange()\n\n    this.setDocument(this.document.mergeDocumentAtRange(document, selectedRange))\n\n    const startPosition = selectedRange[0]\n    const endPosition = startPosition + document.getLength() - 1\n\n    this.setSelection(endPosition)\n    return this.notifyDelegateOfInsertionAtRange([ startPosition, endPosition ])\n  }\n\n  replaceHTML(html) {\n    const document = HTMLParser.parse(html).getDocument().copyUsingObjectsFromDocument(this.document)\n    const locationRange = this.getLocationRange({ strict: false })\n    const selectedRange = this.document.rangeFromLocationRange(locationRange)\n    this.setDocument(document)\n    return this.setSelection(selectedRange)\n  }\n\n  insertFile(file) {\n    return this.insertFiles([ file ])\n  }\n\n  insertFiles(files) {\n    const attachments = []\n\n    Array.from(files).forEach((file) => {\n      if (this.delegate?.compositionShouldAcceptFile(file)) {\n        const attachment = Attachment.attachmentForFile(file)\n        attachments.push(attachment)\n      }\n    })\n\n    return this.insertAttachments(attachments)\n  }\n\n  insertAttachment(attachment) {\n    return this.insertAttachments([ attachment ])\n  }\n\n  insertAttachments(attachments) {\n    let text = new Text()\n\n    Array.from(attachments).forEach((attachment) => {\n      const type = attachment.getType()\n      const presentation = config.attachments[type]?.presentation\n\n      const attributes = this.getCurrentTextAttributes()\n      if (presentation) {\n        attributes.presentation = presentation\n      }\n\n      const attachmentText = Text.textForAttachmentWithAttributes(attachment, attributes)\n      text = text.appendText(attachmentText)\n    })\n\n    return this.insertText(text)\n  }\n\n  shouldManageDeletingInDirection(direction) {\n    const locationRange = this.getLocationRange()\n    if (rangeIsCollapsed(locationRange)) {\n      if (direction === \"backward\" && locationRange[0].offset === 0) {\n        return true\n      }\n      if (this.shouldManageMovingCursorInDirection(direction)) {\n        return true\n      }\n    } else {\n      if (locationRange[0].index !== locationRange[1].index) {\n        return true\n      }\n    }\n    return false\n  }\n\n  deleteInDirection(direction, { length } = {}) {\n    let attachment, deletingIntoPreviousBlock, selectionSpansBlocks\n    const locationRange = this.getLocationRange()\n    let range = this.getSelectedRange()\n    const selectionIsCollapsed = rangeIsCollapsed(range)\n\n    if (selectionIsCollapsed) {\n      deletingIntoPreviousBlock = direction === \"backward\" && locationRange[0].offset === 0\n    } else {\n      selectionSpansBlocks = locationRange[0].index !== locationRange[1].index\n    }\n\n    if (deletingIntoPreviousBlock) {\n      if (this.canDecreaseBlockAttributeLevel()) {\n        const block = this.getBlock()\n\n        if (block.isListItem()) {\n          this.decreaseListLevel()\n        } else {\n          this.decreaseBlockAttributeLevel()\n        }\n\n        this.setSelection(range[0])\n        if (block.isEmpty()) {\n          return false\n        }\n      }\n    }\n\n    if (selectionIsCollapsed) {\n      range = this.getExpandedRangeInDirection(direction, { length })\n      if (direction === \"backward\") {\n        attachment = this.getAttachmentAtRange(range)\n      }\n    }\n\n    if (attachment) {\n      this.editAttachment(attachment)\n      return false\n    } else {\n      this.setDocument(this.document.removeTextAtRange(range))\n      this.setSelection(range[0])\n      if (deletingIntoPreviousBlock || selectionSpansBlocks) {\n        return false\n      }\n    }\n  }\n\n  moveTextFromRange(range) {\n    const [ position ] = Array.from(this.getSelectedRange())\n    this.setDocument(this.document.moveTextFromRangeToPosition(range, position))\n    return this.setSelection(position)\n  }\n\n  removeAttachment(attachment) {\n    const range = this.document.getRangeOfAttachment(attachment)\n    if (range) {\n      this.stopEditingAttachment()\n      this.setDocument(this.document.removeTextAtRange(range))\n      return this.setSelection(range[0])\n    }\n  }\n\n  removeLastBlockAttribute() {\n    const [ startPosition, endPosition ] = Array.from(this.getSelectedRange())\n    const block = this.document.getBlockAtPosition(endPosition)\n    this.removeCurrentAttribute(block.getLastAttribute())\n    return this.setSelection(startPosition)\n  }\n\n  insertPlaceholder() {\n    this.placeholderPosition = this.getPosition()\n    return this.insertString(PLACEHOLDER)\n  }\n\n  selectPlaceholder() {\n    if (this.placeholderPosition != null) {\n      this.setSelectedRange([ this.placeholderPosition, this.placeholderPosition + PLACEHOLDER.length ])\n      return this.getSelectedRange()\n    }\n  }\n\n  forgetPlaceholder() {\n    this.placeholderPosition = null\n  }\n\n  // Current attributes\n\n  hasCurrentAttribute(attributeName) {\n    const value = this.currentAttributes[attributeName]\n    return value != null && value !== false\n  }\n\n  toggleCurrentAttribute(attributeName) {\n    const value = !this.currentAttributes[attributeName]\n    if (value) {\n      return this.setCurrentAttribute(attributeName, value)\n    } else {\n      return this.removeCurrentAttribute(attributeName)\n    }\n  }\n\n  canSetCurrentAttribute(attributeName) {\n    if (getBlockConfig(attributeName)) {\n      return this.canSetCurrentBlockAttribute(attributeName)\n    } else {\n      return this.canSetCurrentTextAttribute(attributeName)\n    }\n  }\n\n  canSetCurrentTextAttribute(attributeName) {\n    const document = this.getSelectedDocument()\n    if (!document) return\n    for (const attachment of Array.from(document.getAttachments())) {\n      if (!attachment.hasContent()) {\n        return false\n      }\n    }\n    return true\n  }\n\n  canSetCurrentBlockAttribute(attributeName) {\n    const block = this.getBlock()\n    if (!block) return\n    return !block.isTerminalBlock()\n  }\n\n  setCurrentAttribute(attributeName, value) {\n    if (getBlockConfig(attributeName)) {\n      return this.setBlockAttribute(attributeName, value)\n    } else {\n      this.setTextAttribute(attributeName, value)\n      this.currentAttributes[attributeName] = value\n      return this.notifyDelegateOfCurrentAttributesChange()\n    }\n  }\n\n  setHTMLAtributeAtPosition(position, attributeName, value) {\n    const block = this.document.getBlockAtPosition(position)\n    const allowedHTMLAttributes = getBlockConfig(block.getLastAttribute())?.htmlAttributes\n\n    if (block && allowedHTMLAttributes?.includes(attributeName)) {\n      const newDocument = this.document.setHTMLAttributeAtPosition(position, attributeName, value)\n      this.setDocument(newDocument)\n    }\n  }\n\n  setTextAttribute(attributeName, value) {\n    const selectedRange = this.getSelectedRange()\n    if (!selectedRange) return\n\n    const [ startPosition, endPosition ] = Array.from(selectedRange)\n    if (startPosition === endPosition) {\n      if (attributeName === \"href\") {\n        const text = Text.textForStringWithAttributes(value, { href: value })\n        return this.insertText(text)\n      }\n    } else {\n      return this.setDocument(this.document.addAttributeAtRange(attributeName, value, selectedRange))\n    }\n  }\n\n  setBlockAttribute(attributeName, value) {\n    const selectedRange = this.getSelectedRange()\n    if (this.canSetCurrentAttribute(attributeName)) {\n      this.setDocument(this.document.applyBlockAttributeAtRange(attributeName, value, selectedRange))\n      return this.setSelection(selectedRange)\n    }\n  }\n\n  removeCurrentAttribute(attributeName) {\n    if (getBlockConfig(attributeName)) {\n      this.removeBlockAttribute(attributeName)\n      return this.updateCurrentAttributes()\n    } else {\n      this.removeTextAttribute(attributeName)\n      delete this.currentAttributes[attributeName]\n      return this.notifyDelegateOfCurrentAttributesChange()\n    }\n  }\n\n  removeTextAttribute(attributeName) {\n    const selectedRange = this.getSelectedRange()\n    if (!selectedRange) return\n    return this.setDocument(this.document.removeAttributeAtRange(attributeName, selectedRange))\n  }\n\n  removeBlockAttribute(attributeName) {\n    const selectedRange = this.getSelectedRange()\n    if (!selectedRange) return\n    return this.setDocument(this.document.removeAttributeAtRange(attributeName, selectedRange))\n  }\n\n  canDecreaseNestingLevel() {\n    return this.getBlock()?.getNestingLevel() > 0\n  }\n\n  canIncreaseNestingLevel() {\n    const block = this.getBlock()\n    if (!block) return\n    if (getBlockConfig(block.getLastNestableAttribute())?.listAttribute) {\n      const previousBlock = this.getPreviousBlock()\n      if (previousBlock) {\n        return arrayStartsWith(previousBlock.getListItemAttributes(), block.getListItemAttributes())\n      }\n    } else {\n      return block.getNestingLevel() > 0\n    }\n  }\n\n  decreaseNestingLevel() {\n    const block = this.getBlock()\n    if (!block) return\n    return this.setDocument(this.document.replaceBlock(block, block.decreaseNestingLevel()))\n  }\n\n  increaseNestingLevel() {\n    const block = this.getBlock()\n    if (!block) return\n    return this.setDocument(this.document.replaceBlock(block, block.increaseNestingLevel()))\n  }\n\n  canDecreaseBlockAttributeLevel() {\n    return this.getBlock()?.getAttributeLevel() > 0\n  }\n\n  decreaseBlockAttributeLevel() {\n    const attribute = this.getBlock()?.getLastAttribute()\n    if (attribute) {\n      return this.removeCurrentAttribute(attribute)\n    }\n  }\n\n  decreaseListLevel() {\n    let [ startPosition ] = Array.from(this.getSelectedRange())\n    const { index } = this.document.locationFromPosition(startPosition)\n    let endIndex = index\n    const attributeLevel = this.getBlock().getAttributeLevel()\n\n    let block = this.document.getBlockAtIndex(endIndex + 1)\n    while (block) {\n      if (!block.isListItem() || block.getAttributeLevel() <= attributeLevel) {\n        break\n      }\n      endIndex++\n      block = this.document.getBlockAtIndex(endIndex + 1)\n    }\n\n    startPosition = this.document.positionFromLocation({ index, offset: 0 })\n    const endPosition = this.document.positionFromLocation({ index: endIndex, offset: 0 })\n    return this.setDocument(this.document.removeLastListAttributeAtRange([ startPosition, endPosition ]))\n  }\n\n  updateCurrentAttributes() {\n    const selectedRange = this.getSelectedRange({ ignoreLock: true })\n    if (selectedRange) {\n      const currentAttributes = this.document.getCommonAttributesAtRange(selectedRange)\n\n      Array.from(getAllAttributeNames()).forEach((attributeName) => {\n        if (!currentAttributes[attributeName]) {\n          if (!this.canSetCurrentAttribute(attributeName)) {\n            currentAttributes[attributeName] = false\n          }\n        }\n      })\n\n      if (!objectsAreEqual(currentAttributes, this.currentAttributes)) {\n        this.currentAttributes = currentAttributes\n        return this.notifyDelegateOfCurrentAttributesChange()\n      }\n    }\n  }\n\n  getCurrentAttributes() {\n    return extend.call({}, this.currentAttributes)\n  }\n\n  getCurrentTextAttributes() {\n    const attributes = {}\n    for (const key in this.currentAttributes) {\n      const value = this.currentAttributes[key]\n      if (value !== false) {\n        if (getTextConfig(key)) {\n          attributes[key] = value\n        }\n      }\n    }\n    return attributes\n  }\n\n  // Selection freezing\n\n  freezeSelection() {\n    return this.setCurrentAttribute(\"frozen\", true)\n  }\n\n  thawSelection() {\n    return this.removeCurrentAttribute(\"frozen\")\n  }\n\n  hasFrozenSelection() {\n    return this.hasCurrentAttribute(\"frozen\")\n  }\n\n  setSelection(selectedRange) {\n    const locationRange = this.document.locationRangeFromRange(selectedRange)\n    return this.delegate?.compositionDidRequestChangingSelectionToLocationRange(locationRange)\n  }\n\n  getSelectedRange() {\n    const locationRange = this.getLocationRange()\n    if (locationRange) {\n      return this.document.rangeFromLocationRange(locationRange)\n    }\n  }\n\n  setSelectedRange(selectedRange) {\n    const locationRange = this.document.locationRangeFromRange(selectedRange)\n    return this.getSelectionManager().setLocationRange(locationRange)\n  }\n\n  getPosition() {\n    const locationRange = this.getLocationRange()\n    if (locationRange) {\n      return this.document.positionFromLocation(locationRange[0])\n    }\n  }\n\n  getLocationRange(options) {\n    if (this.targetLocationRange) {\n      return this.targetLocationRange\n    } else {\n      return this.getSelectionManager().getLocationRange(options) || normalizeRange({ index: 0, offset: 0 })\n    }\n  }\n\n  withTargetLocationRange(locationRange, fn) {\n    let result\n    this.targetLocationRange = locationRange\n    try {\n      result = fn()\n    } finally {\n      this.targetLocationRange = null\n    }\n    return result\n  }\n\n  withTargetRange(range, fn) {\n    const locationRange = this.document.locationRangeFromRange(range)\n    return this.withTargetLocationRange(locationRange, fn)\n  }\n\n  withTargetDOMRange(domRange, fn) {\n    const locationRange = this.createLocationRangeFromDOMRange(domRange, { strict: false })\n    return this.withTargetLocationRange(locationRange, fn)\n  }\n\n  getExpandedRangeInDirection(direction, { length } = {}) {\n    let [ startPosition, endPosition ] = Array.from(this.getSelectedRange())\n    if (direction === \"backward\") {\n      if (length) {\n        startPosition -= length\n      } else {\n        startPosition = this.translateUTF16PositionFromOffset(startPosition, -1)\n      }\n    } else {\n      if (length) {\n        endPosition += length\n      } else {\n        endPosition = this.translateUTF16PositionFromOffset(endPosition, 1)\n      }\n    }\n    return normalizeRange([ startPosition, endPosition ])\n  }\n\n  shouldManageMovingCursorInDirection(direction) {\n    if (this.editingAttachment) {\n      return true\n    }\n    const range = this.getExpandedRangeInDirection(direction)\n    return this.getAttachmentAtRange(range) != null\n  }\n\n  moveCursorInDirection(direction) {\n    let canEditAttachment, range\n    if (this.editingAttachment) {\n      range = this.document.getRangeOfAttachment(this.editingAttachment)\n    } else {\n      const selectedRange = this.getSelectedRange()\n      range = this.getExpandedRangeInDirection(direction)\n      canEditAttachment = !rangesAreEqual(selectedRange, range)\n    }\n\n    if (direction === \"backward\") {\n      this.setSelectedRange(range[0])\n    } else {\n      this.setSelectedRange(range[1])\n    }\n\n    if (canEditAttachment) {\n      const attachment = this.getAttachmentAtRange(range)\n      if (attachment) {\n        return this.editAttachment(attachment)\n      }\n    }\n  }\n\n  expandSelectionInDirection(direction, { length } = {}) {\n    const range = this.getExpandedRangeInDirection(direction, { length })\n    return this.setSelectedRange(range)\n  }\n\n  expandSelectionForEditing() {\n    if (this.hasCurrentAttribute(\"href\")) {\n      return this.expandSelectionAroundCommonAttribute(\"href\")\n    }\n  }\n\n  expandSelectionAroundCommonAttribute(attributeName) {\n    const position = this.getPosition()\n    const range = this.document.getRangeOfCommonAttributeAtPosition(attributeName, position)\n    return this.setSelectedRange(range)\n  }\n\n  selectionContainsAttachments() {\n    return this.getSelectedAttachments()?.length > 0\n  }\n\n  selectionIsInCursorTarget() {\n    return this.editingAttachment || this.positionIsCursorTarget(this.getPosition())\n  }\n\n  positionIsCursorTarget(position) {\n    const location = this.document.locationFromPosition(position)\n    if (location) {\n      return this.locationIsCursorTarget(location)\n    }\n  }\n\n  positionIsBlockBreak(position) {\n    return this.document.getPieceAtPosition(position)?.isBlockBreak()\n  }\n\n  getSelectedDocument() {\n    const selectedRange = this.getSelectedRange()\n    if (selectedRange) {\n      return this.document.getDocumentAtRange(selectedRange)\n    }\n  }\n\n  getSelectedAttachments() {\n    return this.getSelectedDocument()?.getAttachments()\n  }\n\n  // Attachments\n\n  getAttachments() {\n    return this.attachments.slice(0)\n  }\n\n  refreshAttachments() {\n    const attachments = this.document.getAttachments()\n    const { added, removed } = summarizeArrayChange(this.attachments, attachments)\n    this.attachments = attachments\n\n    Array.from(removed).forEach((attachment) => {\n      attachment.delegate = null\n      this.delegate?.compositionDidRemoveAttachment?.(attachment)\n    })\n\n    return (() => {\n      const result = []\n\n      Array.from(added).forEach((attachment) => {\n        attachment.delegate = this\n        result.push(this.delegate?.compositionDidAddAttachment?.(attachment))\n      })\n\n      return result\n    })()\n  }\n\n  // Attachment delegate\n\n  attachmentDidChangeAttributes(attachment) {\n    this.revision++\n    return this.delegate?.compositionDidEditAttachment?.(attachment)\n  }\n\n  attachmentDidChangePreviewURL(attachment) {\n    this.revision++\n    return this.delegate?.compositionDidChangeAttachmentPreviewURL?.(attachment)\n  }\n\n  // Attachment editing\n\n  editAttachment(attachment, options) {\n    if (attachment === this.editingAttachment) return\n    this.stopEditingAttachment()\n    this.editingAttachment = attachment\n    return this.delegate?.compositionDidStartEditingAttachment?.(this.editingAttachment, options)\n  }\n\n  stopEditingAttachment() {\n    if (!this.editingAttachment) return\n    this.delegate?.compositionDidStopEditingAttachment?.(this.editingAttachment)\n    this.editingAttachment = null\n  }\n\n  updateAttributesForAttachment(attributes, attachment) {\n    return this.setDocument(this.document.updateAttributesForAttachment(attributes, attachment))\n  }\n\n  removeAttributeForAttachment(attribute, attachment) {\n    return this.setDocument(this.document.removeAttributeForAttachment(attribute, attachment))\n  }\n\n  // Private\n\n  breakFormattedBlock(insertion) {\n    let { document } = insertion\n    const { block } = insertion\n    let position = insertion.startPosition\n    let range = [ position - 1, position ]\n\n    if (block.getBlockBreakPosition() === insertion.startLocation.offset) {\n      if (block.breaksOnReturn() && insertion.nextCharacter === \"\\n\") {\n        position += 1\n      } else {\n        document = document.removeTextAtRange(range)\n      }\n      range = [ position, position ]\n    } else if (insertion.nextCharacter === \"\\n\") {\n      if (insertion.previousCharacter === \"\\n\") {\n        range = [ position - 1, position + 1 ]\n      } else {\n        range = [ position, position + 1 ]\n        position += 1\n      }\n    } else if (insertion.startLocation.offset - 1 !== 0) {\n      position += 1\n    }\n\n    const newDocument = new Document([ block.removeLastAttribute().copyWithoutText() ])\n    this.setDocument(document.insertDocumentAtRange(newDocument, range))\n    return this.setSelection(position)\n  }\n\n  getPreviousBlock() {\n    const locationRange = this.getLocationRange()\n    if (locationRange) {\n      const { index } = locationRange[0]\n      if (index > 0) {\n        return this.document.getBlockAtIndex(index - 1)\n      }\n    }\n  }\n\n  getBlock() {\n    const locationRange = this.getLocationRange()\n    if (locationRange) {\n      return this.document.getBlockAtIndex(locationRange[0].index)\n    }\n  }\n\n  getAttachmentAtRange(range) {\n    const document = this.document.getDocumentAtRange(range)\n    if (document.toString() === `${OBJECT_REPLACEMENT_CHARACTER}\\n`) {\n      return document.getAttachments()[0]\n    }\n  }\n\n  notifyDelegateOfCurrentAttributesChange() {\n    return this.delegate?.compositionDidChangeCurrentAttributes?.(this.currentAttributes)\n  }\n\n  notifyDelegateOfInsertionAtRange(range) {\n    return this.delegate?.compositionDidPerformInsertionAtRange?.(range)\n  }\n\n  translateUTF16PositionFromOffset(position, offset) {\n    const utf16string = this.document.toUTF16String()\n    const utf16position = utf16string.offsetFromUCS2Offset(position)\n    return utf16string.offsetToUCS2Offset(utf16position + offset)\n  }\n}\n\nComposition.proxyMethod(\"getSelectionManager().getPointRange\")\nComposition.proxyMethod(\"getSelectionManager().setLocationRangeFromPointRange\")\nComposition.proxyMethod(\"getSelectionManager().createLocationRangeFromDOMRange\")\nComposition.proxyMethod(\"getSelectionManager().locationIsCursorTarget\")\nComposition.proxyMethod(\"getSelectionManager().selectionIsExpanded\")\nComposition.proxyMethod(\"delegate?.getSelectionManager\")\n", "import BasicObject from \"trix/core/basic_object\"\n\nexport default class UndoManager extends BasicObject {\n  constructor(composition) {\n    super(...arguments)\n    this.composition = composition\n    this.undoEntries = []\n    this.redoEntries = []\n  }\n\n  recordUndoEntry(description, { context, consolidatable } = {}) {\n    const previousEntry = this.undoEntries.slice(-1)[0]\n\n    if (!consolidatable || !entryHasDescriptionAndContext(previousEntry, description, context)) {\n      const undoEntry = this.createEntry({ description, context })\n      this.undoEntries.push(undoEntry)\n      this.redoEntries = []\n    }\n  }\n\n  undo() {\n    const undoEntry = this.undoEntries.pop()\n    if (undoEntry) {\n      const redoEntry = this.createEntry(undoEntry)\n      this.redoEntries.push(redoEntry)\n      return this.composition.loadSnapshot(undoEntry.snapshot)\n    }\n  }\n\n  redo() {\n    const redoEntry = this.redoEntries.pop()\n    if (redoEntry) {\n      const undoEntry = this.createEntry(redoEntry)\n      this.undoEntries.push(undoEntry)\n      return this.composition.loadSnapshot(redoEntry.snapshot)\n    }\n  }\n\n  canUndo() {\n    return this.undoEntries.length > 0\n  }\n\n  canRedo() {\n    return this.redoEntries.length > 0\n  }\n\n  // Private\n\n  createEntry({ description, context } = {}) {\n    return {\n      description: description?.toString(),\n      context: JSON.stringify(context),\n      snapshot: this.composition.getSnapshot(),\n    }\n  }\n}\n\nconst entryHasDescriptionAndContext = (entry, description, context) =>\n  entry?.description === description?.toString() && entry?.context === JSON.stringify(context)\n", "const BLOCK_ATTRIBUTE_NAME = \"attachmentGallery\"\nconst TEXT_ATTRIBUTE_NAME = \"presentation\"\nconst TEXT_ATTRIBUTE_VALUE = \"gallery\"\n\nexport default class Filter {\n  constructor(snapshot) {\n    this.document = snapshot.document\n    this.selectedRange = snapshot.selectedRange\n  }\n\n  perform() {\n    this.removeBlockAttribute()\n    return this.applyBlockAttribute()\n  }\n\n  getSnapshot() {\n    return { document: this.document, selectedRange: this.selectedRange }\n  }\n\n  // Private\n\n  removeBlockAttribute() {\n    return this.findRangesOfBlocks().map((range) => this.document = this.document.removeAttributeAtRange(BLOCK_ATTRIBUTE_NAME, range))\n  }\n\n  applyBlockAttribute() {\n    let offset = 0\n\n    this.findRangesOfPieces().forEach((range) => {\n      if (range[1] - range[0] > 1) {\n        range[0] += offset\n        range[1] += offset\n\n        if (this.document.getCharacterAtPosition(range[1]) !== \"\\n\") {\n          this.document = this.document.insertBlockBreakAtRange(range[1])\n          if (range[1] < this.selectedRange[1]) {\n            this.moveSelectedRangeForward()\n          }\n          range[1]++\n          offset++\n        }\n\n        if (range[0] !== 0) {\n          if (this.document.getCharacterAtPosition(range[0] - 1) !== \"\\n\") {\n            this.document = this.document.insertBlockBreakAtRange(range[0])\n            if (range[0] < this.selectedRange[0]) {\n              this.moveSelectedRangeForward()\n            }\n            range[0]++\n            offset++\n          }\n        }\n\n        this.document = this.document.applyBlockAttributeAtRange(BLOCK_ATTRIBUTE_NAME, true, range)\n      }\n    })\n  }\n\n  findRangesOfBlocks() {\n    return this.document.findRangesForBlockAttribute(BLOCK_ATTRIBUTE_NAME)\n  }\n\n  findRangesOfPieces() {\n    return this.document.findRangesForTextAttribute(TEXT_ATTRIBUTE_NAME, { withValue: TEXT_ATTRIBUTE_VALUE })\n  }\n\n  moveSelectedRangeForward() {\n    this.selectedRange[0] += 1\n    this.selectedRange[1] += 1\n  }\n}\n", "import Filter from \"./filter\"\n\nexport const attachmentGalleryFilter = function(snapshot) {\n  const filter = new Filter(snapshot)\n  filter.perform()\n  return filter.getSnapshot()\n}\n\n", "import Document from \"trix/models/document\"\nimport HTMLParser from \"trix/models/html_parser\"\n\nimport UndoManager from \"trix/models/undo_manager\"\nimport { attachmentGalleryFilter } from \"trix/filters/attachment_gallery_filter\"\nconst DEFAULT_FILTERS = [ attachmentGalleryFilter ]\n\nexport default class Editor {\n  constructor(composition, selectionManager, element) {\n    this.insertFiles = this.insertFiles.bind(this)\n    this.composition = composition\n    this.selectionManager = selectionManager\n    this.element = element\n    this.undoManager = new UndoManager(this.composition)\n    this.filters = DEFAULT_FILTERS.slice(0)\n  }\n\n  loadDocument(document) {\n    return this.loadSnapshot({ document, selectedRange: [ 0, 0 ] })\n  }\n\n  loadHTML(html = \"\") {\n    const document = HTMLParser.parse(html, { referenceElement: this.element }).getDocument()\n    return this.loadDocument(document)\n  }\n\n  loadJSON({ document, selectedRange }) {\n    document = Document.fromJSON(document)\n    return this.loadSnapshot({ document, selectedRange })\n  }\n\n  loadSnapshot(snapshot) {\n    this.undoManager = new UndoManager(this.composition)\n    return this.composition.loadSnapshot(snapshot)\n  }\n\n  getDocument() {\n    return this.composition.document\n  }\n\n  getSelectedDocument() {\n    return this.composition.getSelectedDocument()\n  }\n\n  getSnapshot() {\n    return this.composition.getSnapshot()\n  }\n\n  toJSON() {\n    return this.getSnapshot()\n  }\n\n  // Document manipulation\n\n  deleteInDirection(direction) {\n    return this.composition.deleteInDirection(direction)\n  }\n\n  insertAttachment(attachment) {\n    return this.composition.insertAttachment(attachment)\n  }\n\n  insertAttachments(attachments) {\n    return this.composition.insertAttachments(attachments)\n  }\n\n  insertDocument(document) {\n    return this.composition.insertDocument(document)\n  }\n\n  insertFile(file) {\n    return this.composition.insertFile(file)\n  }\n\n  insertFiles(files) {\n    return this.composition.insertFiles(files)\n  }\n\n  insertHTML(html) {\n    return this.composition.insertHTML(html)\n  }\n\n  insertString(string) {\n    return this.composition.insertString(string)\n  }\n\n  insertText(text) {\n    return this.composition.insertText(text)\n  }\n\n  insertLineBreak() {\n    return this.composition.insertLineBreak()\n  }\n\n  // Selection\n\n  getSelectedRange() {\n    return this.composition.getSelectedRange()\n  }\n\n  getPosition() {\n    return this.composition.getPosition()\n  }\n\n  getClientRectAtPosition(position) {\n    const locationRange = this.getDocument().locationRangeFromRange([ position, position + 1 ])\n    return this.selectionManager.getClientRectAtLocationRange(locationRange)\n  }\n\n  expandSelectionInDirection(direction) {\n    return this.composition.expandSelectionInDirection(direction)\n  }\n\n  moveCursorInDirection(direction) {\n    return this.composition.moveCursorInDirection(direction)\n  }\n\n  setSelectedRange(selectedRange) {\n    return this.composition.setSelectedRange(selectedRange)\n  }\n\n  // Attributes\n\n  activateAttribute(name, value = true) {\n    return this.composition.setCurrentAttribute(name, value)\n  }\n\n  attributeIsActive(name) {\n    return this.composition.hasCurrentAttribute(name)\n  }\n\n  canActivateAttribute(name) {\n    return this.composition.canSetCurrentAttribute(name)\n  }\n\n  deactivateAttribute(name) {\n    return this.composition.removeCurrentAttribute(name)\n  }\n\n  // HTML attributes\n  setHTMLAtributeAtPosition(position, name, value) {\n    this.composition.setHTMLAtributeAtPosition(position, name, value)\n  }\n\n  // Nesting level\n\n  canDecreaseNestingLevel() {\n    return this.composition.canDecreaseNestingLevel()\n  }\n\n  canIncreaseNestingLevel() {\n    return this.composition.canIncreaseNestingLevel()\n  }\n\n  decreaseNestingLevel() {\n    if (this.canDecreaseNestingLevel()) {\n      return this.composition.decreaseNestingLevel()\n    }\n  }\n\n  increaseNestingLevel() {\n    if (this.canIncreaseNestingLevel()) {\n      return this.composition.increaseNestingLevel()\n    }\n  }\n\n  // Undo/redo\n\n  canRedo() {\n    return this.undoManager.canRedo()\n  }\n\n  canUndo() {\n    return this.undoManager.canUndo()\n  }\n\n  recordUndoEntry(description, { context, consolidatable } = {}) {\n    return this.undoManager.recordUndoEntry(description, { context, consolidatable })\n  }\n\n  redo() {\n    if (this.canRedo()) {\n      return this.undoManager.redo()\n    }\n  }\n\n  undo() {\n    if (this.canUndo()) {\n      return this.undoManager.undo()\n    }\n  }\n}\n", "/* eslint-disable\n    no-var,\n    prefer-const,\n*/\nimport {\n  elementContainsNode,\n  findChildIndexOfNode,\n  nodeIsAttachmentElement,\n  nodeIsBlockContainer,\n  nodeIsBlockStart,\n  nodeIsBlockStartComment,\n  nodeIsCursorTarget,\n  nodeIsEmptyTextNode,\n  nodeIsTextNode,\n  tagName,\n  walkTree,\n} from \"trix/core/helpers\"\n\nexport default class LocationMapper {\n  constructor(element) {\n    this.element = element\n  }\n\n  findLocationFromContainerAndOffset(container, offset, { strict } = { strict: true }) {\n    let childIndex = 0\n    let foundBlock = false\n    const location = { index: 0, offset: 0 }\n    const attachmentElement = this.findAttachmentElementParentForNode(container)\n\n    if (attachmentElement) {\n      container = attachmentElement.parentNode\n      offset = findChildIndexOfNode(attachmentElement)\n    }\n\n    const walker = walkTree(this.element, { usingFilter: rejectAttachmentContents })\n\n    while (walker.nextNode()) {\n      const node = walker.currentNode\n\n      if (node === container && nodeIsTextNode(container)) {\n        if (!nodeIsCursorTarget(node)) {\n          location.offset += offset\n        }\n        break\n      } else {\n        if (node.parentNode === container) {\n          if (childIndex++ === offset) {\n            if (!strict && nodeIsBlockStart(node, { strict })) {\n              if (foundBlock) {\n                location.index++\n              }\n              location.offset = 0\n              foundBlock = true\n            }\n            break\n          }\n        } else if (!elementContainsNode(container, node)) {\n          if (childIndex > 0) {\n            break\n          }\n        }\n\n        if (nodeIsBlockStart(node, { strict })) {\n          if (foundBlock) {\n            location.index++\n          }\n          location.offset = 0\n          foundBlock = true\n        } else {\n          location.offset += nodeLength(node)\n        }\n      }\n    }\n\n    return location\n  }\n\n  findContainerAndOffsetFromLocation(location) {\n    let container, offset\n    if (location.index === 0 && location.offset === 0) {\n      container = this.element\n      offset = 0\n\n      while (container.firstChild) {\n        container = container.firstChild\n        if (nodeIsBlockContainer(container)) {\n          offset = 1\n          break\n        }\n      }\n\n      return [ container, offset ]\n    }\n\n    let [ node, nodeOffset ] = this.findNodeAndOffsetFromLocation(location)\n    if (!node) return\n\n    if (nodeIsTextNode(node)) {\n      if (nodeLength(node) === 0) {\n        container = node.parentNode.parentNode\n        offset = findChildIndexOfNode(node.parentNode)\n        if (nodeIsCursorTarget(node, { name: \"right\" })) {\n          offset++\n        }\n      } else {\n        container = node\n        offset = location.offset - nodeOffset\n      }\n    } else {\n      container = node.parentNode\n\n      if (!nodeIsBlockStart(node.previousSibling)) {\n        if (!nodeIsBlockContainer(container)) {\n          while (node === container.lastChild) {\n            node = container\n            container = container.parentNode\n            if (nodeIsBlockContainer(container)) {\n              break\n            }\n          }\n        }\n      }\n\n      offset = findChildIndexOfNode(node)\n      if (location.offset !== 0) {\n        offset++\n      }\n    }\n\n    return [ container, offset ]\n  }\n\n  findNodeAndOffsetFromLocation(location) {\n    let node, nodeOffset\n    let offset = 0\n\n    for (const currentNode of this.getSignificantNodesForIndex(location.index)) {\n      const length = nodeLength(currentNode)\n\n      if (location.offset <= offset + length) {\n        if (nodeIsTextNode(currentNode)) {\n          node = currentNode\n          nodeOffset = offset\n          if (location.offset === nodeOffset && nodeIsCursorTarget(node)) {\n            break\n          }\n        } else if (!node) {\n          node = currentNode\n          nodeOffset = offset\n        }\n      }\n\n      offset += length\n      if (offset > location.offset) {\n        break\n      }\n    }\n\n    return [ node, nodeOffset ]\n  }\n\n  // Private\n\n  findAttachmentElementParentForNode(node) {\n    while (node && node !== this.element) {\n      if (nodeIsAttachmentElement(node)) {\n        return node\n      }\n      node = node.parentNode\n    }\n  }\n\n  getSignificantNodesForIndex(index) {\n    const nodes = []\n    const walker = walkTree(this.element, { usingFilter: acceptSignificantNodes })\n    let recordingNodes = false\n\n    while (walker.nextNode()) {\n      const node = walker.currentNode\n      if (nodeIsBlockStartComment(node)) {\n        var blockIndex\n        if (blockIndex != null) {\n          blockIndex++\n        } else {\n          blockIndex = 0\n        }\n\n        if (blockIndex === index) {\n          recordingNodes = true\n        } else if (recordingNodes) {\n          break\n        }\n      } else if (recordingNodes) {\n        nodes.push(node)\n      }\n    }\n\n    return nodes\n  }\n}\n\nconst nodeLength = function(node) {\n  if (node.nodeType === Node.TEXT_NODE) {\n    if (nodeIsCursorTarget(node)) {\n      return 0\n    } else {\n      const string = node.textContent\n      return string.length\n    }\n  } else if (tagName(node) === \"br\" || nodeIsAttachmentElement(node)) {\n    return 1\n  } else {\n    return 0\n  }\n}\n\nconst acceptSignificantNodes = function(node) {\n  if (rejectEmptyTextNodes(node) === NodeFilter.FILTER_ACCEPT) {\n    return rejectAttachmentContents(node)\n  } else {\n    return NodeFilter.FILTER_REJECT\n  }\n}\n\nconst rejectEmptyTextNodes = function(node) {\n  if (nodeIsEmptyTextNode(node)) {\n    return NodeFilter.FILTER_REJECT\n  } else {\n    return NodeFilter.FILTER_ACCEPT\n  }\n}\n\nconst rejectAttachmentContents = function(node) {\n  if (nodeIsAttachmentElement(node.parentNode)) {\n    return NodeFilter.FILTER_REJECT\n  } else {\n    return NodeFilter.FILTER_ACCEPT\n  }\n}\n", "/* eslint-disable\n    id-length,\n    no-empty,\n*/\nimport { getDOMRange, setDOMRange } from \"trix/core/helpers\"\n\nexport default class PointMapper {\n  createDOMRangeFromPoint({ x, y }) {\n    let domRange\n    if (document.caretPositionFromPoint) {\n      const { offsetNode, offset } = document.caretPositionFromPoint(x, y)\n      domRange = document.createRange()\n      domRange.setStart(offsetNode, offset)\n      return domRange\n    } else if (document.caretRangeFromPoint) {\n      return document.caretRangeFromPoint(x, y)\n    } else if (document.body.createTextRange) {\n      const originalDOMRange = getDOMRange()\n      try {\n        // IE 11 throws \"Unspecified error\" when using moveToPoint\n        // during a drag-and-drop operation.\n        const textRange = document.body.createTextRange()\n        textRange.moveToPoint(x, y)\n        textRange.select()\n      } catch (error) {}\n      domRange = getDOMRange()\n      setDOMRange(originalDOMRange)\n      return domRange\n    }\n  }\n\n  getClientRectsForDOMRange(domRange) {\n    const array = Array.from(domRange.getClientRects())\n    const start = array[0]\n    const end = array[array.length - 1]\n\n    return [ start, end ]\n  }\n}\n", "/* eslint-disable\n*/\nimport BasicObject from \"trix/core/basic_object\"\n\nimport LocationMapper from \"trix/models/location_mapper\"\nimport PointMapper from \"trix/models/point_mapper\"\n\nimport {\n  elementContainsNode,\n  getDOMRange,\n  getDOMSelection,\n  handleEvent,\n  innerElementIsActive,\n  nodeIsCursorTarget,\n  normalizeRange,\n  rangeIsCollapsed,\n  rangesAreEqual,\n  setDOMRange,\n} from \"trix/core/helpers\"\n\nexport default class SelectionManager extends BasicObject {\n  constructor(element) {\n    super(...arguments)\n    this.didMouseDown = this.didMouseDown.bind(this)\n    this.selectionDidChange = this.selectionDidChange.bind(this)\n    this.element = element\n    this.locationMapper = new LocationMapper(this.element)\n    this.pointMapper = new PointMapper()\n    this.lockCount = 0\n    handleEvent(\"mousedown\", { onElement: this.element, withCallback: this.didMouseDown })\n  }\n\n  getLocationRange(options = {}) {\n    if (options.strict === false) {\n      return this.createLocationRangeFromDOMRange(getDOMRange())\n    } else if (options.ignoreLock) {\n      return this.currentLocationRange\n    } else if (this.lockedLocationRange) {\n      return this.lockedLocationRange\n    } else {\n      return this.currentLocationRange\n    }\n  }\n\n  setLocationRange(locationRange) {\n    if (this.lockedLocationRange) return\n    locationRange = normalizeRange(locationRange)\n\n    const domRange = this.createDOMRangeFromLocationRange(locationRange)\n    if (domRange) {\n      setDOMRange(domRange)\n      this.updateCurrentLocationRange(locationRange)\n    }\n  }\n\n  setLocationRangeFromPointRange(pointRange) {\n    pointRange = normalizeRange(pointRange)\n    const startLocation = this.getLocationAtPoint(pointRange[0])\n    const endLocation = this.getLocationAtPoint(pointRange[1])\n    this.setLocationRange([ startLocation, endLocation ])\n  }\n\n  getClientRectAtLocationRange(locationRange) {\n    const domRange = this.createDOMRangeFromLocationRange(locationRange)\n    if (domRange) {\n      return this.getClientRectsForDOMRange(domRange)[1]\n    }\n  }\n\n  locationIsCursorTarget(location) {\n    const node = Array.from(this.findNodeAndOffsetFromLocation(location))[0]\n    return nodeIsCursorTarget(node)\n  }\n\n  lock() {\n    if (this.lockCount++ === 0) {\n      this.updateCurrentLocationRange()\n      this.lockedLocationRange = this.getLocationRange()\n    }\n  }\n\n  unlock() {\n    if (--this.lockCount === 0) {\n      const { lockedLocationRange } = this\n      this.lockedLocationRange = null\n      if (lockedLocationRange != null) {\n        return this.setLocationRange(lockedLocationRange)\n      }\n    }\n  }\n\n  clearSelection() {\n    return getDOMSelection()?.removeAllRanges()\n  }\n\n  selectionIsCollapsed() {\n    return getDOMRange()?.collapsed === true\n  }\n\n  selectionIsExpanded() {\n    return !this.selectionIsCollapsed()\n  }\n\n  createLocationRangeFromDOMRange(domRange, options) {\n    if (domRange == null || !this.domRangeWithinElement(domRange)) return\n\n    const start = this.findLocationFromContainerAndOffset(domRange.startContainer, domRange.startOffset, options)\n    if (!start) return\n\n    const end = domRange.collapsed\n      ? undefined\n      : this.findLocationFromContainerAndOffset(domRange.endContainer, domRange.endOffset, options)\n\n    return normalizeRange([ start, end ])\n  }\n\n  didMouseDown() {\n    return this.pauseTemporarily()\n  }\n\n  pauseTemporarily() {\n    let resumeHandlers\n    this.paused = true\n\n    const resume = () => {\n      this.paused = false\n      clearTimeout(resumeTimeout)\n\n      Array.from(resumeHandlers).forEach((handler) => {\n        handler.destroy()\n      })\n\n      if (elementContainsNode(document, this.element)) {\n        return this.selectionDidChange()\n      }\n    }\n\n    const resumeTimeout = setTimeout(resume, 200)\n\n    resumeHandlers = [ \"mousemove\", \"keydown\" ].map((eventName) =>\n      handleEvent(eventName, { onElement: document, withCallback: resume })\n    )\n  }\n\n  selectionDidChange() {\n    if (!this.paused && !innerElementIsActive(this.element)) {\n      return this.updateCurrentLocationRange()\n    }\n  }\n\n  updateCurrentLocationRange(locationRange) {\n    if (locationRange != null ? locationRange : locationRange = this.createLocationRangeFromDOMRange(getDOMRange())) {\n      if (!rangesAreEqual(locationRange, this.currentLocationRange)) {\n        this.currentLocationRange = locationRange\n        return this.delegate?.locationRangeDidChange?.(this.currentLocationRange.slice(0))\n      }\n    }\n  }\n\n  createDOMRangeFromLocationRange(locationRange) {\n    const rangeStart = this.findContainerAndOffsetFromLocation(locationRange[0])\n    const rangeEnd = rangeIsCollapsed(locationRange)\n      ? rangeStart\n      : this.findContainerAndOffsetFromLocation(locationRange[1]) || rangeStart\n\n    if (rangeStart != null && rangeEnd != null) {\n      const domRange = document.createRange()\n      domRange.setStart(...Array.from(rangeStart || []))\n      domRange.setEnd(...Array.from(rangeEnd || []))\n      return domRange\n    }\n  }\n\n  getLocationAtPoint(point) {\n    const domRange = this.createDOMRangeFromPoint(point)\n    if (domRange) {\n      return this.createLocationRangeFromDOMRange(domRange)?.[0]\n    }\n  }\n\n  domRangeWithinElement(domRange) {\n    if (domRange.collapsed) {\n      return elementContainsNode(this.element, domRange.startContainer)\n    } else {\n      return (\n        elementContainsNode(this.element, domRange.startContainer) &&\n        elementContainsNode(this.element, domRange.endContainer)\n      )\n    }\n  }\n}\n\nSelectionManager.proxyMethod(\"locationMapper.findLocationFromContainerAndOffset\")\nSelectionManager.proxyMethod(\"locationMapper.findContainerAndOffsetFromLocation\")\nSelectionManager.proxyMethod(\"locationMapper.findNodeAndOffsetFromLocation\")\nSelectionManager.proxyMethod(\"pointMapper.createDOMRangeFromPoint\")\nSelectionManager.proxyMethod(\"pointMapper.getClientRectsForDOMRange\")\n\n", "import { removeNode } from \"trix/core/helpers\"\n\nimport * as config from \"trix/config\"\nimport BasicObject from \"trix/core/basic_object\"\n\nimport { defer, handleEvent, makeElement, tagName, triggerEvent } from \"trix/core/helpers\"\nconst { lang, css, keyNames } = config\n\nconst undoable = function(fn) {\n  return function() {\n    const commands = fn.apply(this, arguments)\n    commands.do()\n    if (!this.undos) {\n      this.undos = []\n    }\n    this.undos.push(commands.undo)\n  }\n}\n\nexport default class AttachmentEditorController extends BasicObject {\n  constructor(attachmentPiece, element, container, options = {}) {\n    super(...arguments)\n    this.didClickToolbar = this.didClickToolbar.bind(this)\n    this.didClickActionButton = this.didClickActionButton.bind(this)\n    this.didKeyDownCaption = this.didKeyDownCaption.bind(this)\n    this.didInputCaption = this.didInputCaption.bind(this)\n    this.didChangeCaption = this.didChangeCaption.bind(this)\n    this.didBlurCaption = this.didBlurCaption.bind(this)\n    this.attachmentPiece = attachmentPiece\n    this.element = element\n    this.container = container\n    this.options = options\n    this.attachment = this.attachmentPiece.attachment\n    if (tagName(this.element) === \"a\") {\n      this.element = this.element.firstChild\n    }\n    this.install()\n  }\n\n  install() {\n    this.makeElementMutable()\n    this.addToolbar()\n    if (this.attachment.isPreviewable()) {\n      this.installCaptionEditor()\n    }\n  }\n\n  uninstall() {\n    let undo = this.undos.pop()\n    this.savePendingCaption()\n    while (undo) {\n      undo()\n      undo = this.undos.pop()\n    }\n    this.delegate?.didUninstallAttachmentEditor(this)\n  }\n\n  // Private\n\n  savePendingCaption() {\n    if (this.pendingCaption != null) {\n      const caption = this.pendingCaption\n      this.pendingCaption = null\n      if (caption) {\n        this.delegate?.attachmentEditorDidRequestUpdatingAttributesForAttachment?.({ caption }, this.attachment)\n      } else {\n        this.delegate?.attachmentEditorDidRequestRemovingAttributeForAttachment?.(\"caption\", this.attachment)\n      }\n    }\n  }\n\n  // Installing and uninstalling\n\n  makeElementMutable = undoable(() => {\n    return {\n      do: () => {\n        this.element.dataset.trixMutable = true\n      },\n      undo: () => delete this.element.dataset.trixMutable,\n    }\n  })\n\n  addToolbar = undoable(() => {\n    // <div class=\"#{css.attachmentMetadataContainer}\" data-trix-mutable=\"true\">\n    //   <div class=\"trix-button-row\">\n    //     <span class=\"trix-button-group trix-button-group--actions\">\n    //       <button type=\"button\" class=\"trix-button trix-button--remove\" title=\"#{lang.remove}\" data-trix-action=\"remove\">#{lang.remove}</button>\n    //     </span>\n    //   </div>\n    // </div>\n    const element = makeElement({\n      tagName: \"div\",\n      className: css.attachmentToolbar,\n      data: { trixMutable: true },\n      childNodes: makeElement({\n        tagName: \"div\",\n        className: \"trix-button-row\",\n        childNodes: makeElement({\n          tagName: \"span\",\n          className: \"trix-button-group trix-button-group--actions\",\n          childNodes: makeElement({\n            tagName: \"button\",\n            className: \"trix-button trix-button--remove\",\n            textContent: lang.remove,\n            attributes: { title: lang.remove },\n            data: { trixAction: \"remove\" },\n          }),\n        }),\n      }),\n    })\n\n    if (this.attachment.isPreviewable()) {\n      // <div class=\"#{css.attachmentMetadataContainer}\">\n      //   <span class=\"#{css.attachmentMetadata}\">\n      //     <span class=\"#{css.attachmentName}\" title=\"#{name}\">#{name}</span>\n      //     <span class=\"#{css.attachmentSize}\">#{size}</span>\n      //   </span>\n      // </div>\n      element.appendChild(\n        makeElement({\n          tagName: \"div\",\n          className: css.attachmentMetadataContainer,\n          childNodes: makeElement({\n            tagName: \"span\",\n            className: css.attachmentMetadata,\n            childNodes: [\n              makeElement({\n                tagName: \"span\",\n                className: css.attachmentName,\n                textContent: this.attachment.getFilename(),\n                attributes: { title: this.attachment.getFilename() },\n              }),\n              makeElement({\n                tagName: \"span\",\n                className: css.attachmentSize,\n                textContent: this.attachment.getFormattedFilesize(),\n              }),\n            ],\n          }),\n        })\n      )\n    }\n\n    handleEvent(\"click\", { onElement: element, withCallback: this.didClickToolbar })\n    handleEvent(\"click\", {\n      onElement: element,\n      matchingSelector: \"[data-trix-action]\",\n      withCallback: this.didClickActionButton,\n    })\n\n    triggerEvent(\"trix-attachment-before-toolbar\", { onElement: this.element, attributes: { toolbar: element, attachment: this.attachment } })\n\n    return {\n      do: () => this.element.appendChild(element),\n      undo: () => removeNode(element),\n    }\n  })\n\n  installCaptionEditor = undoable(() => {\n    const textarea = makeElement({\n      tagName: \"textarea\",\n      className: css.attachmentCaptionEditor,\n      attributes: { placeholder: lang.captionPlaceholder },\n      data: { trixMutable: true },\n    })\n    textarea.value = this.attachmentPiece.getCaption()\n\n    const textareaClone = textarea.cloneNode()\n    textareaClone.classList.add(\"trix-autoresize-clone\")\n    textareaClone.tabIndex = -1\n\n    const autoresize = function() {\n      textareaClone.value = textarea.value\n      textarea.style.height = textareaClone.scrollHeight + \"px\"\n    }\n\n    handleEvent(\"input\", { onElement: textarea, withCallback: autoresize })\n    handleEvent(\"input\", { onElement: textarea, withCallback: this.didInputCaption })\n    handleEvent(\"keydown\", { onElement: textarea, withCallback: this.didKeyDownCaption })\n    handleEvent(\"change\", { onElement: textarea, withCallback: this.didChangeCaption })\n    handleEvent(\"blur\", { onElement: textarea, withCallback: this.didBlurCaption })\n\n    const figcaption = this.element.querySelector(\"figcaption\")\n    const editingFigcaption = figcaption.cloneNode()\n\n    return {\n      do: () => {\n        figcaption.style.display = \"none\"\n        editingFigcaption.appendChild(textarea)\n        editingFigcaption.appendChild(textareaClone)\n        editingFigcaption.classList.add(`${css.attachmentCaption}--editing`)\n        figcaption.parentElement.insertBefore(editingFigcaption, figcaption)\n        autoresize()\n        if (this.options.editCaption) {\n          return defer(() => textarea.focus())\n        }\n      },\n      undo() {\n        removeNode(editingFigcaption)\n        figcaption.style.display = null\n      },\n    }\n  })\n\n  // Event handlers\n\n  didClickToolbar(event) {\n    event.preventDefault()\n    return event.stopPropagation()\n  }\n\n  didClickActionButton(event) {\n    const action = event.target.getAttribute(\"data-trix-action\")\n    switch (action) {\n      case \"remove\":\n        return this.delegate?.attachmentEditorDidRequestRemovalOfAttachment(this.attachment)\n    }\n  }\n\n  didKeyDownCaption(event) {\n    if (keyNames[event.keyCode] === \"return\") {\n      event.preventDefault()\n      this.savePendingCaption()\n      return this.delegate?.attachmentEditorDidRequestDeselectingAttachment?.(this.attachment)\n    }\n  }\n\n  didInputCaption(event) {\n    this.pendingCaption = event.target.value.replace(/\\s/g, \" \").trim()\n  }\n\n  didChangeCaption(event) {\n    return this.savePendingCaption()\n  }\n\n  didBlurCaption(event) {\n    return this.savePendingCaption()\n  }\n}\n", "import BasicObject from \"trix/core/basic_object\"\nimport DocumentView from \"trix/views/document_view\"\nimport AttachmentEditorController from \"trix/controllers/attachment_editor_controller\"\n\nimport { defer, findClosestElementFromNode, handleEvent, innerElementIsActive } from \"trix/core/helpers\"\nimport { attachmentSelector } from \"trix/config/attachments\"\n\nexport default class CompositionController extends BasicObject {\n  constructor(element, composition) {\n    super(...arguments)\n    this.didFocus = this.didFocus.bind(this)\n    this.didBlur = this.didBlur.bind(this)\n    this.didClickAttachment = this.didClickAttachment.bind(this)\n\n    this.element = element\n    this.composition = composition\n    this.documentView = new DocumentView(this.composition.document, { element: this.element })\n\n    handleEvent(\"focus\", { onElement: this.element, withCallback: this.didFocus })\n    handleEvent(\"blur\", { onElement: this.element, withCallback: this.didBlur })\n    handleEvent(\"click\", {\n      onElement: this.element,\n      matchingSelector: \"a[contenteditable=false]\",\n      preventDefault: true,\n    })\n    handleEvent(\"mousedown\", {\n      onElement: this.element,\n      matchingSelector: attachmentSelector,\n      withCallback: this.didClickAttachment,\n    })\n    handleEvent(\"click\", { onElement: this.element, matchingSelector: `a${attachmentSelector}`, preventDefault: true })\n  }\n\n  didFocus(event) {\n    const perform = () => {\n      if (!this.focused) {\n        this.focused = true\n        return this.delegate?.compositionControllerDidFocus?.()\n      }\n    }\n\n    return this.blurPromise?.then(perform) || perform()\n  }\n\n  didBlur(event) {\n    this.blurPromise = new Promise((resolve) => {\n      return defer(() => {\n        if (!innerElementIsActive(this.element)) {\n          this.focused = null\n          this.delegate?.compositionControllerDidBlur?.()\n        }\n        this.blurPromise = null\n        return resolve()\n      })\n    })\n  }\n\n  didClickAttachment(event, target) {\n    const attachment = this.findAttachmentForElement(target)\n    const editCaption = !!findClosestElementFromNode(event.target, { matchingSelector: \"figcaption\" })\n    return this.delegate?.compositionControllerDidSelectAttachment?.(attachment, { editCaption })\n  }\n\n  getSerializableElement() {\n    if (this.isEditingAttachment()) {\n      return this.documentView.shadowElement\n    } else {\n      return this.element\n    }\n  }\n\n  render() {\n    if (this.revision !== this.composition.revision) {\n      this.documentView.setDocument(this.composition.document)\n      this.documentView.render()\n      this.revision = this.composition.revision\n    }\n\n    if (this.canSyncDocumentView() && !this.documentView.isSynced()) {\n      this.delegate?.compositionControllerWillSyncDocumentView?.()\n      this.documentView.sync()\n      this.delegate?.compositionControllerDidSyncDocumentView?.()\n    }\n\n    return this.delegate?.compositionControllerDidRender?.()\n  }\n\n  rerenderViewForObject(object) {\n    this.invalidateViewForObject(object)\n    return this.render()\n  }\n\n  invalidateViewForObject(object) {\n    return this.documentView.invalidateViewForObject(object)\n  }\n\n  isViewCachingEnabled() {\n    return this.documentView.isViewCachingEnabled()\n  }\n\n  enableViewCaching() {\n    return this.documentView.enableViewCaching()\n  }\n\n  disableViewCaching() {\n    return this.documentView.disableViewCaching()\n  }\n\n  refreshViewCache() {\n    return this.documentView.garbageCollectCachedViews()\n  }\n\n  // Attachment editor management\n\n  isEditingAttachment() {\n    return !!this.attachmentEditor\n  }\n\n  installAttachmentEditorForAttachment(attachment, options) {\n    if (this.attachmentEditor?.attachment === attachment) return\n    const element = this.documentView.findElementForObject(attachment)\n    if (!element) return\n\n    this.uninstallAttachmentEditor()\n    const attachmentPiece = this.composition.document.getAttachmentPieceForAttachment(attachment)\n    this.attachmentEditor = new AttachmentEditorController(attachmentPiece, element, this.element, options)\n    this.attachmentEditor.delegate = this\n  }\n\n  uninstallAttachmentEditor() {\n    return this.attachmentEditor?.uninstall()\n  }\n\n  // Attachment controller delegate\n\n  didUninstallAttachmentEditor() {\n    this.attachmentEditor = null\n    return this.render()\n  }\n\n  attachmentEditorDidRequestUpdatingAttributesForAttachment(attributes, attachment) {\n    this.delegate?.compositionControllerWillUpdateAttachment?.(attachment)\n    return this.composition.updateAttributesForAttachment(attributes, attachment)\n  }\n\n  attachmentEditorDidRequestRemovingAttributeForAttachment(attribute, attachment) {\n    this.delegate?.compositionControllerWillUpdateAttachment?.(attachment)\n    return this.composition.removeAttributeForAttachment(attribute, attachment)\n  }\n\n  attachmentEditorDidRequestRemovalOfAttachment(attachment) {\n    return this.delegate?.compositionControllerDidRequestRemovalOfAttachment?.(attachment)\n  }\n\n  attachmentEditorDidRequestDeselectingAttachment(attachment) {\n    return this.delegate?.compositionControllerDidRequestDeselectingAttachment?.(attachment)\n  }\n\n  // Private\n\n  canSyncDocumentView() {\n    return !this.isEditingAttachment()\n  }\n\n  findAttachmentForElement(element) {\n    return this.composition.document.getAttachmentById(parseInt(element.dataset.trixId, 10))\n  }\n}\n", "import \"trix/views/object_view\"\nimport BasicObject from \"trix/core/basic_object\"\n\nexport default class Controller extends BasicObject {}\n", "import BasicObject from \"trix/core/basic_object\"\n\nimport {\n  findClosestElementFromNode,\n  nodeIsBlockStartComment,\n  nodeIsEmptyTextNode,\n  normalizeSpaces,\n  summarizeStringChange,\n  tagName,\n} from \"trix/core/helpers\"\n\nconst mutableAttributeName = \"data-trix-mutable\"\nconst mutableSelector = `[${mutableAttributeName}]`\n\nconst options = {\n  attributes: true,\n  childList: true,\n  characterData: true,\n  characterDataOldValue: true,\n  subtree: true,\n}\n\nexport default class MutationObserver extends BasicObject {\n  constructor(element) {\n    super(element)\n    this.didMutate = this.didMutate.bind(this)\n    this.element = element\n    this.observer = new window.MutationObserver(this.didMutate)\n    this.start()\n  }\n\n  start() {\n    this.reset()\n    return this.observer.observe(this.element, options)\n  }\n\n  stop() {\n    return this.observer.disconnect()\n  }\n\n  didMutate(mutations) {\n    this.mutations.push(...Array.from(this.findSignificantMutations(mutations) || []))\n\n    if (this.mutations.length) {\n      this.delegate?.elementDidMutate?.(this.getMutationSummary())\n      return this.reset()\n    }\n  }\n\n  // Private\n\n  reset() {\n    this.mutations = []\n  }\n\n  findSignificantMutations(mutations) {\n    return mutations.filter((mutation) => {\n      return this.mutationIsSignificant(mutation)\n    })\n  }\n\n  mutationIsSignificant(mutation) {\n    if (this.nodeIsMutable(mutation.target)) {\n      return false\n    }\n    for (const node of Array.from(this.nodesModifiedByMutation(mutation))) {\n      if (this.nodeIsSignificant(node)) return true\n    }\n    return false\n  }\n\n  nodeIsSignificant(node) {\n    return node !== this.element && !this.nodeIsMutable(node) && !nodeIsEmptyTextNode(node)\n  }\n\n  nodeIsMutable(node) {\n    return findClosestElementFromNode(node, { matchingSelector: mutableSelector })\n  }\n\n  nodesModifiedByMutation(mutation) {\n    const nodes = []\n    switch (mutation.type) {\n      case \"attributes\":\n        if (mutation.attributeName !== mutableAttributeName) {\n          nodes.push(mutation.target)\n        }\n        break\n      case \"characterData\":\n        // Changes to text nodes should consider the parent element\n        nodes.push(mutation.target.parentNode)\n        nodes.push(mutation.target)\n        break\n      case \"childList\":\n        // Consider each added or removed node\n        nodes.push(...Array.from(mutation.addedNodes || []))\n        nodes.push(...Array.from(mutation.removedNodes || []))\n        break\n    }\n    return nodes\n  }\n\n  getMutationSummary() {\n    return this.getTextMutationSummary()\n  }\n\n  getTextMutationSummary() {\n    const { additions, deletions } = this.getTextChangesFromCharacterData()\n    const textChanges = this.getTextChangesFromChildList()\n\n    Array.from(textChanges.additions).forEach((addition) => {\n      if (!Array.from(additions).includes(addition)) {\n        additions.push(addition)\n      }\n    })\n\n    deletions.push(...Array.from(textChanges.deletions || []))\n\n    const summary = {}\n\n    const added = additions.join(\"\")\n    if (added) {\n      summary.textAdded = added\n    }\n\n    const deleted = deletions.join(\"\")\n    if (deleted) {\n      summary.textDeleted = deleted\n    }\n\n    return summary\n  }\n\n  getMutationsByType(type) {\n    return Array.from(this.mutations).filter((mutation) => mutation.type === type)\n  }\n\n  getTextChangesFromChildList() {\n    let textAdded, textRemoved\n    const addedNodes = []\n    const removedNodes = []\n\n    Array.from(this.getMutationsByType(\"childList\")).forEach((mutation) => {\n      addedNodes.push(...Array.from(mutation.addedNodes || []))\n      removedNodes.push(...Array.from(mutation.removedNodes || []))\n    })\n\n    const singleBlockCommentRemoved =\n      addedNodes.length === 0 && removedNodes.length === 1 && nodeIsBlockStartComment(removedNodes[0])\n\n    if (singleBlockCommentRemoved) {\n      textAdded = []\n      textRemoved = [ \"\\n\" ]\n    } else {\n      textAdded = getTextForNodes(addedNodes)\n      textRemoved = getTextForNodes(removedNodes)\n    }\n\n    const additions = textAdded.filter((text, index) => text !== textRemoved[index]).map(normalizeSpaces)\n    const deletions = textRemoved.filter((text, index) => text !== textAdded[index]).map(normalizeSpaces)\n\n    return { additions, deletions }\n  }\n\n  getTextChangesFromCharacterData() {\n    let added, removed\n    const characterMutations = this.getMutationsByType(\"characterData\")\n\n    if (characterMutations.length) {\n      const startMutation = characterMutations[0],\n        endMutation = characterMutations[characterMutations.length - 1]\n\n      const oldString = normalizeSpaces(startMutation.oldValue)\n      const newString = normalizeSpaces(endMutation.target.data)\n      const summarized = summarizeStringChange(oldString, newString)\n      added = summarized.added\n      removed = summarized.removed\n    }\n\n    return {\n      additions: added ? [ added ] : [],\n      deletions: removed ? [ removed ] : [],\n    }\n  }\n}\n\nconst getTextForNodes = function(nodes = []) {\n  const text = []\n  for (const node of Array.from(nodes)) {\n    switch (node.nodeType) {\n      case Node.TEXT_NODE:\n        text.push(node.data)\n        break\n      case Node.ELEMENT_NODE:\n        if (tagName(node) === \"br\") {\n          text.push(\"\\n\")\n        } else {\n          text.push(...Array.from(getTextForNodes(node.childNodes) || []))\n        }\n        break\n    }\n  }\n  return text\n}\n", "/* eslint-disable\n    no-empty,\n*/\nimport Operation from \"trix/core/utilities/operation\"\n\nexport default class FileVerificationOperation extends Operation {\n  constructor(file) {\n    super(...arguments)\n    this.file = file\n  }\n\n  perform(callback) {\n    const reader = new FileReader()\n\n    reader.onerror = () => callback(false)\n\n    reader.onload = () => {\n      reader.onerror = null\n      try {\n        reader.abort()\n      } catch (error) {}\n      return callback(true, this.file)\n    }\n\n    return reader.readAsArrayBuffer(this.file)\n  }\n}\n", "import * as config from \"trix/config\"\nimport { NON_BREAKING_SPACE, OBJECT_REPLACEMENT_CHARACTER, ZERO_WIDTH_SPACE } from \"trix/constants\"\n\n// Each software keyboard on Android emits its own set of events and some of them can be buggy.\n// This class detects when some buggy events are being emitted and lets know the input controller\n// that they should be ignored.\nexport default class FlakyAndroidKeyboardDetector {\n  constructor(element) {\n    this.element = element\n  }\n\n  shouldIgnore(event) {\n    if (!config.browser.samsungAndroid) return false\n\n    this.previousEvent = this.event\n    this.event = event\n\n    this.checkSamsungKeyboardBuggyModeStart()\n    this.checkSamsungKeyboardBuggyModeEnd()\n\n    return this.buggyMode\n  }\n\n  // private\n\n  // The Samsung keyboard on Android can enter a buggy state in which it emits a flurry of confused events that,\n  // if processed, corrupts the editor. The buggy mode always starts with an insertText event, right after a\n  // keydown event with for an \"Unidentified\" key, with the same text as the editor element, except for a few\n  // extra whitespace, or exotic utf8, characters.\n  checkSamsungKeyboardBuggyModeStart() {\n    if (this.insertingLongTextAfterUnidentifiedChar() && differsInWhitespace(this.element.innerText, this.event.data)) {\n      this.buggyMode = true\n      this.event.preventDefault()\n    }\n  }\n\n  // The flurry of buggy events are always insertText. If we see any other type, it means it's over.\n  checkSamsungKeyboardBuggyModeEnd() {\n    if (this.buggyMode && this.event.inputType !== \"insertText\") {\n      this.buggyMode = false\n    }\n  }\n\n  insertingLongTextAfterUnidentifiedChar() {\n    return this.isBeforeInputInsertText() && this.previousEventWasUnidentifiedKeydown() && this.event.data?.length > 50\n  }\n\n  isBeforeInputInsertText() {\n    return this.event.type === \"beforeinput\" && this.event.inputType === \"insertText\"\n  }\n\n  previousEventWasUnidentifiedKeydown() {\n    return this.previousEvent?.type === \"keydown\" && this.previousEvent?.key === \"Unidentified\"\n  }\n}\n\nconst differsInWhitespace = (text1, text2) => {\n  return normalize(text1) === normalize(text2)\n}\n\nconst whiteSpaceNormalizerRegexp = new RegExp(`(${OBJECT_REPLACEMENT_CHARACTER}|${ZERO_WIDTH_SPACE}|${NON_BREAKING_SPACE}|\\\\s)+`, \"g\")\nconst normalize = (text) => text.replace(whiteSpaceNormalizerRegexp, \" \").trim()\n", "import BasicObject from \"trix/core/basic_object\"\nimport MutationObserver from \"trix/observers/mutation_observer\"\nimport FileVerificationOperation from \"trix/operations/file_verification_operation\"\nimport FlakyAndroidKeyboardDetector from \"../models/flaky_android_keyboard_detector\"\n\nimport { handleEvent, innerElementIsActive } from \"trix/core/helpers\"\n\nexport default class InputController extends BasicObject {\n\n  static events = {}\n\n  constructor(element) {\n    super(...arguments)\n    this.element = element\n    this.mutationObserver = new MutationObserver(this.element)\n    this.mutationObserver.delegate = this\n    this.flakyKeyboardDetector = new FlakyAndroidKeyboardDetector(this.element)\n    for (const eventName in this.constructor.events) {\n      handleEvent(eventName, { onElement: this.element, withCallback: this.handlerFor(eventName) })\n    }\n  }\n\n  elementDidMutate(mutationSummary) {}\n\n  editorWillSyncDocumentView() {\n    return this.mutationObserver.stop()\n  }\n\n  editorDidSyncDocumentView() {\n    return this.mutationObserver.start()\n  }\n\n  requestRender() {\n    return this.delegate?.inputControllerDidRequestRender?.()\n  }\n\n  requestReparse() {\n    this.delegate?.inputControllerDidRequestReparse?.()\n    return this.requestRender()\n  }\n\n  attachFiles(files) {\n    const operations = Array.from(files).map((file) => new FileVerificationOperation(file))\n    return Promise.all(operations).then((files) => {\n      this.handleInput(function() {\n        this.delegate?.inputControllerWillAttachFiles()\n        this.responder?.insertFiles(files)\n        return this.requestRender()\n      })\n    })\n  }\n\n  // Private\n\n  handlerFor(eventName) {\n    return (event) => {\n      if (!event.defaultPrevented) {\n        this.handleInput(() => {\n          if (!innerElementIsActive(this.element)) {\n            if (this.flakyKeyboardDetector.shouldIgnore(event)) return\n\n            this.eventName = eventName\n            this.constructor.events[eventName].call(this, event)\n          }\n        })\n      }\n    }\n  }\n\n  handleInput(callback) {\n    try {\n      this.delegate?.inputControllerWillHandleInput()\n      callback.call(this)\n    } finally {\n      this.delegate?.inputControllerDidHandleInput()\n    }\n  }\n\n  createLinkHTML(href, text) {\n    const link = document.createElement(\"a\")\n    link.href = href\n    link.textContent = text ? text : href\n    return link.outerHTML\n  }\n}\n\n", "import * as config from \"trix/config\"\nimport UTF16String from \"trix/core/utilities/utf16_string\"\nimport BasicObject from \"trix/core/basic_object\"\nimport InputController from \"trix/controllers/input_controller\"\nimport DocumentView from \"trix/views/document_view\"\nimport Document from \"trix/models/document\"\n\nimport {\n  dataTransferIsPlainText,\n  dataTransferIsWritable,\n  keyEventIsKeyboardCommand,\n  makeElement,\n  objectsAreEqual,\n  removeNode,\n  squishBreakableWhitespace,\n} from \"trix/core/helpers\"\n\nimport { selectionChangeObserver } from \"trix/observers/selection_change_observer\"\n\nconst { browser, keyNames } = config\nlet pastedFileCount = 0\n\nexport default class Level0InputController extends InputController {\n\n  static events = {\n    keydown(event) {\n      if (!this.isComposing()) {\n        this.resetInputSummary()\n      }\n      this.inputSummary.didInput = true\n\n      const keyName = keyNames[event.keyCode]\n      if (keyName) {\n        let context = this.keys\n\n        ;[ \"ctrl\", \"alt\", \"shift\", \"meta\" ].forEach((modifier) => {\n          if (event[`${modifier}Key`]) {\n            if (modifier === \"ctrl\") {\n              modifier = \"control\"\n            }\n            context = context?.[modifier]\n          }\n        })\n\n        if (context?.[keyName] != null) {\n          this.setInputSummary({ keyName })\n          selectionChangeObserver.reset()\n          context[keyName].call(this, event)\n        }\n      }\n\n      if (keyEventIsKeyboardCommand(event)) {\n        const character = String.fromCharCode(event.keyCode).toLowerCase()\n        if (character) {\n          const keys = [ \"alt\", \"shift\" ].map((modifier) => {\n            if (event[`${modifier}Key`]) {\n              return modifier\n            }\n          }).filter(key => key)\n          keys.push(character)\n          if (this.delegate?.inputControllerDidReceiveKeyboardCommand(keys)) {\n            event.preventDefault()\n          }\n        }\n      }\n    },\n\n    keypress(event) {\n      if (this.inputSummary.eventName != null) return\n      if (event.metaKey) return\n      if (event.ctrlKey && !event.altKey) return\n\n      const string = stringFromKeyEvent(event)\n      if (string) {\n        this.delegate?.inputControllerWillPerformTyping()\n        this.responder?.insertString(string)\n        return this.setInputSummary({ textAdded: string, didDelete: this.selectionIsExpanded() })\n      }\n    },\n\n    textInput(event) {\n      // Handle autocapitalization\n      const { data } = event\n      const { textAdded } = this.inputSummary\n      if (textAdded && textAdded !== data && textAdded.toUpperCase() === data) {\n        const range = this.getSelectedRange()\n        this.setSelectedRange([ range[0], range[1] + textAdded.length ])\n        this.responder?.insertString(data)\n        this.setInputSummary({ textAdded: data })\n        return this.setSelectedRange(range)\n      }\n    },\n\n    dragenter(event) {\n      event.preventDefault()\n    },\n\n    dragstart(event) {\n      this.serializeSelectionToDataTransfer(event.dataTransfer)\n      this.draggedRange = this.getSelectedRange()\n      return this.delegate?.inputControllerDidStartDrag?.()\n    },\n\n    dragover(event) {\n      if (this.draggedRange || this.canAcceptDataTransfer(event.dataTransfer)) {\n        event.preventDefault()\n        const draggingPoint = { x: event.clientX, y: event.clientY }\n        if (!objectsAreEqual(draggingPoint, this.draggingPoint)) {\n          this.draggingPoint = draggingPoint\n          return this.delegate?.inputControllerDidReceiveDragOverPoint?.(this.draggingPoint)\n        }\n      }\n    },\n\n    dragend(event) {\n      this.delegate?.inputControllerDidCancelDrag?.()\n      this.draggedRange = null\n      this.draggingPoint = null\n    },\n\n    drop(event) {\n      event.preventDefault()\n      const files = event.dataTransfer?.files\n      const documentJSON = event.dataTransfer.getData(\"application/x-trix-document\")\n\n      const point = { x: event.clientX, y: event.clientY }\n      this.responder?.setLocationRangeFromPointRange(point)\n\n      if (files?.length) {\n        this.attachFiles(files)\n      } else if (this.draggedRange) {\n        this.delegate?.inputControllerWillMoveText()\n        this.responder?.moveTextFromRange(this.draggedRange)\n        this.draggedRange = null\n        this.requestRender()\n      } else if (documentJSON) {\n        const document = Document.fromJSONString(documentJSON)\n        this.responder?.insertDocument(document)\n        this.requestRender()\n      }\n\n      this.draggedRange = null\n      this.draggingPoint = null\n    },\n\n    cut(event) {\n      if (this.responder?.selectionIsExpanded()) {\n        if (this.serializeSelectionToDataTransfer(event.clipboardData)) {\n          event.preventDefault()\n        }\n\n        this.delegate?.inputControllerWillCutText()\n        this.deleteInDirection(\"backward\")\n        if (event.defaultPrevented) {\n          return this.requestRender()\n        }\n      }\n    },\n\n    copy(event) {\n      if (this.responder?.selectionIsExpanded()) {\n        if (this.serializeSelectionToDataTransfer(event.clipboardData)) {\n          event.preventDefault()\n        }\n      }\n    },\n\n    paste(event) {\n      const clipboard = event.clipboardData || event.testClipboardData\n      const paste = { clipboard }\n\n      if (!clipboard || pasteEventIsCrippledSafariHTMLPaste(event)) {\n        this.getPastedHTMLUsingHiddenElement((html) => {\n          paste.type = \"text/html\"\n          paste.html = html\n          this.delegate?.inputControllerWillPaste(paste)\n          this.responder?.insertHTML(paste.html)\n          this.requestRender()\n          return this.delegate?.inputControllerDidPaste(paste)\n        })\n        return\n      }\n\n      const href = clipboard.getData(\"URL\")\n      const html = clipboard.getData(\"text/html\")\n      const name = clipboard.getData(\"public.url-name\")\n\n      if (href) {\n        let string\n        paste.type = \"text/html\"\n        if (name) {\n          string = squishBreakableWhitespace(name).trim()\n        } else {\n          string = href\n        }\n        paste.html = this.createLinkHTML(href, string)\n        this.delegate?.inputControllerWillPaste(paste)\n        this.setInputSummary({ textAdded: string, didDelete: this.selectionIsExpanded() })\n        this.responder?.insertHTML(paste.html)\n        this.requestRender()\n        this.delegate?.inputControllerDidPaste(paste)\n      } else if (dataTransferIsPlainText(clipboard)) {\n        paste.type = \"text/plain\"\n        paste.string = clipboard.getData(\"text/plain\")\n        this.delegate?.inputControllerWillPaste(paste)\n        this.setInputSummary({ textAdded: paste.string, didDelete: this.selectionIsExpanded() })\n        this.responder?.insertString(paste.string)\n        this.requestRender()\n        this.delegate?.inputControllerDidPaste(paste)\n      } else if (html) {\n        paste.type = \"text/html\"\n        paste.html = html\n        this.delegate?.inputControllerWillPaste(paste)\n        this.responder?.insertHTML(paste.html)\n        this.requestRender()\n        this.delegate?.inputControllerDidPaste(paste)\n      } else if (Array.from(clipboard.types).includes(\"Files\")) {\n        const file = clipboard.items?.[0]?.getAsFile?.()\n        if (file) {\n          const extension = extensionForFile(file)\n          if (!file.name && extension) {\n            file.name = `pasted-file-${++pastedFileCount}.${extension}`\n          }\n          paste.type = \"File\"\n          paste.file = file\n          this.delegate?.inputControllerWillAttachFiles()\n          this.responder?.insertFile(paste.file)\n          this.requestRender()\n          this.delegate?.inputControllerDidPaste(paste)\n        }\n      }\n\n      event.preventDefault()\n    },\n\n    compositionstart(event) {\n      return this.getCompositionInput().start(event.data)\n    },\n\n    compositionupdate(event) {\n      return this.getCompositionInput().update(event.data)\n    },\n\n    compositionend(event) {\n      return this.getCompositionInput().end(event.data)\n    },\n\n    beforeinput(event) {\n      this.inputSummary.didInput = true\n    },\n\n    input(event) {\n      this.inputSummary.didInput = true\n      return event.stopPropagation()\n    },\n  }\n\n  static keys = {\n    backspace(event) {\n      this.delegate?.inputControllerWillPerformTyping()\n      return this.deleteInDirection(\"backward\", event)\n    },\n\n    delete(event) {\n      this.delegate?.inputControllerWillPerformTyping()\n      return this.deleteInDirection(\"forward\", event)\n    },\n\n    return(event) {\n      this.setInputSummary({ preferDocument: true })\n      this.delegate?.inputControllerWillPerformTyping()\n      return this.responder?.insertLineBreak()\n    },\n\n    tab(event) {\n      if (this.responder?.canIncreaseNestingLevel()) {\n        this.responder?.increaseNestingLevel()\n        this.requestRender()\n        event.preventDefault()\n      }\n    },\n\n    left(event) {\n      if (this.selectionIsInCursorTarget()) {\n        event.preventDefault()\n        return this.responder?.moveCursorInDirection(\"backward\")\n      }\n    },\n\n    right(event) {\n      if (this.selectionIsInCursorTarget()) {\n        event.preventDefault()\n        return this.responder?.moveCursorInDirection(\"forward\")\n      }\n    },\n\n    control: {\n      d(event) {\n        this.delegate?.inputControllerWillPerformTyping()\n        return this.deleteInDirection(\"forward\", event)\n      },\n\n      h(event) {\n        this.delegate?.inputControllerWillPerformTyping()\n        return this.deleteInDirection(\"backward\", event)\n      },\n\n      o(event) {\n        event.preventDefault()\n        this.delegate?.inputControllerWillPerformTyping()\n        this.responder?.insertString(\"\\n\", { updatePosition: false })\n        return this.requestRender()\n      },\n    },\n\n    shift: {\n      return(event) {\n        this.delegate?.inputControllerWillPerformTyping()\n        this.responder?.insertString(\"\\n\")\n        this.requestRender()\n        event.preventDefault()\n      },\n\n      tab(event) {\n        if (this.responder?.canDecreaseNestingLevel()) {\n          this.responder?.decreaseNestingLevel()\n          this.requestRender()\n          event.preventDefault()\n        }\n      },\n\n      left(event) {\n        if (this.selectionIsInCursorTarget()) {\n          event.preventDefault()\n          return this.expandSelectionInDirection(\"backward\")\n        }\n      },\n\n      right(event) {\n        if (this.selectionIsInCursorTarget()) {\n          event.preventDefault()\n          return this.expandSelectionInDirection(\"forward\")\n        }\n      },\n    },\n\n    alt: {\n      backspace(event) {\n        this.setInputSummary({ preferDocument: false })\n        return this.delegate?.inputControllerWillPerformTyping()\n      },\n    },\n\n    meta: {\n      backspace(event) {\n        this.setInputSummary({ preferDocument: false })\n        return this.delegate?.inputControllerWillPerformTyping()\n      },\n    },\n  }\n\n  constructor() {\n    super(...arguments)\n    this.resetInputSummary()\n  }\n\n  setInputSummary(summary = {}) {\n    this.inputSummary.eventName = this.eventName\n    for (const key in summary) {\n      const value = summary[key]\n      this.inputSummary[key] = value\n    }\n    return this.inputSummary\n  }\n\n  resetInputSummary() {\n    this.inputSummary = {}\n  }\n\n  reset() {\n    this.resetInputSummary()\n    return selectionChangeObserver.reset()\n  }\n\n  // Mutation observer delegate\n\n  elementDidMutate(mutationSummary) {\n    if (this.isComposing()) {\n      return this.delegate?.inputControllerDidAllowUnhandledInput?.()\n    } else {\n      return this.handleInput(function() {\n        if (this.mutationIsSignificant(mutationSummary)) {\n          if (this.mutationIsExpected(mutationSummary)) {\n            this.requestRender()\n          } else {\n            this.requestReparse()\n          }\n        }\n        return this.reset()\n      })\n    }\n  }\n\n  mutationIsExpected({ textAdded, textDeleted }) {\n    if (this.inputSummary.preferDocument) {\n      return true\n    }\n\n    const mutationAdditionMatchesSummary =\n      textAdded != null ? textAdded === this.inputSummary.textAdded : !this.inputSummary.textAdded\n    const mutationDeletionMatchesSummary =\n      textDeleted != null ? this.inputSummary.didDelete : !this.inputSummary.didDelete\n\n    const unexpectedNewlineAddition = [ \"\\n\", \" \\n\" ].includes(textAdded) && !mutationAdditionMatchesSummary\n    const unexpectedNewlineDeletion = textDeleted === \"\\n\" && !mutationDeletionMatchesSummary\n    const singleUnexpectedNewline =\n      unexpectedNewlineAddition && !unexpectedNewlineDeletion ||\n      unexpectedNewlineDeletion && !unexpectedNewlineAddition\n\n    if (singleUnexpectedNewline) {\n      const range = this.getSelectedRange()\n      if (range) {\n        const offset = unexpectedNewlineAddition ? textAdded.replace(/\\n$/, \"\").length || -1 : textAdded?.length || 1\n        if (this.responder?.positionIsBlockBreak(range[1] + offset)) {\n          return true\n        }\n      }\n    }\n\n    return mutationAdditionMatchesSummary && mutationDeletionMatchesSummary\n  }\n\n  mutationIsSignificant(mutationSummary) {\n    const textChanged = Object.keys(mutationSummary).length > 0\n    const composedEmptyString = this.compositionInput?.getEndData() === \"\"\n    return textChanged || !composedEmptyString\n  }\n\n  // Private\n\n  getCompositionInput() {\n    if (this.isComposing()) {\n      return this.compositionInput\n    } else {\n      this.compositionInput = new CompositionInput(this)\n    }\n  }\n\n  isComposing() {\n    return this.compositionInput && !this.compositionInput.isEnded()\n  }\n\n  deleteInDirection(direction, event) {\n    if (this.responder?.deleteInDirection(direction) === false) {\n      if (event) {\n        event.preventDefault()\n        return this.requestRender()\n      }\n    } else {\n      return this.setInputSummary({ didDelete: true })\n    }\n  }\n\n  serializeSelectionToDataTransfer(dataTransfer) {\n    if (!dataTransferIsWritable(dataTransfer)) return\n    const document = this.responder?.getSelectedDocument().toSerializableDocument()\n\n    dataTransfer.setData(\"application/x-trix-document\", JSON.stringify(document))\n    dataTransfer.setData(\"text/html\", DocumentView.render(document).innerHTML)\n    dataTransfer.setData(\"text/plain\", document.toString().replace(/\\n$/, \"\"))\n    return true\n  }\n\n  canAcceptDataTransfer(dataTransfer) {\n    const types = {}\n    Array.from(dataTransfer?.types || []).forEach((type) => {\n      types[type] = true\n    })\n    return types.Files || types[\"application/x-trix-document\"] || types[\"text/html\"] || types[\"text/plain\"]\n  }\n\n  getPastedHTMLUsingHiddenElement(callback) {\n    const selectedRange = this.getSelectedRange()\n\n    const style = {\n      position: \"absolute\",\n      left: `${window.pageXOffset}px`,\n      top: `${window.pageYOffset}px`,\n      opacity: 0,\n    }\n\n    const element = makeElement({ style, tagName: \"div\", editable: true })\n    document.body.appendChild(element)\n    element.focus()\n\n    return requestAnimationFrame(() => {\n      const html = element.innerHTML\n      removeNode(element)\n      this.setSelectedRange(selectedRange)\n      return callback(html)\n    })\n  }\n}\n\nLevel0InputController.proxyMethod(\"responder?.getSelectedRange\")\nLevel0InputController.proxyMethod(\"responder?.setSelectedRange\")\nLevel0InputController.proxyMethod(\"responder?.expandSelectionInDirection\")\nLevel0InputController.proxyMethod(\"responder?.selectionIsInCursorTarget\")\nLevel0InputController.proxyMethod(\"responder?.selectionIsExpanded\")\n\nconst extensionForFile = (file) => file.type?.match(/\\/(\\w+)$/)?.[1]\n\nconst hasStringCodePointAt = !!\" \".codePointAt?.(0)\n\nconst stringFromKeyEvent = function(event) {\n  if (event.key && hasStringCodePointAt && event.key.codePointAt(0) === event.keyCode) {\n    return event.key\n  } else {\n    let code\n    if (event.which === null) {\n      code = event.keyCode\n    } else if (event.which !== 0 && event.charCode !== 0) {\n      code = event.charCode\n    }\n\n    if (code != null && keyNames[code] !== \"escape\") {\n      return UTF16String.fromCodepoints([ code ]).toString()\n    }\n  }\n}\n\nconst pasteEventIsCrippledSafariHTMLPaste = function(event) {\n  const paste = event.clipboardData\n  if (paste) {\n    if (paste.types.includes(\"text/html\")) {\n      // Answer is yes if there's any possibility of Paste and Match Style in Safari,\n      // which is nearly impossible to detect confidently: https://bugs.webkit.org/show_bug.cgi?id=174165\n      for (const type of paste.types) {\n        const hasPasteboardFlavor = /^CorePasteboardFlavorType/.test(type)\n        const hasReadableDynamicData = /^dyn\\./.test(type) && paste.getData(type)\n        const mightBePasteAndMatchStyle = hasPasteboardFlavor || hasReadableDynamicData\n        if (mightBePasteAndMatchStyle) {\n          return true\n        }\n      }\n      return false\n    } else {\n      const isExternalHTMLPaste = paste.types.includes(\"com.apple.webarchive\")\n      const isExternalRichTextPaste = paste.types.includes(\"com.apple.flat-rtfd\")\n      return isExternalHTMLPaste || isExternalRichTextPaste\n    }\n  }\n}\n\nclass CompositionInput extends BasicObject {\n  constructor(inputController) {\n    super(...arguments)\n    this.inputController = inputController\n    this.responder = this.inputController.responder\n    this.delegate = this.inputController.delegate\n    this.inputSummary = this.inputController.inputSummary\n    this.data = {}\n  }\n\n  start(data) {\n    this.data.start = data\n\n    if (this.isSignificant()) {\n      if (this.inputSummary.eventName === \"keypress\" && this.inputSummary.textAdded) {\n        this.responder?.deleteInDirection(\"left\")\n      }\n\n      if (!this.selectionIsExpanded()) {\n        this.insertPlaceholder()\n        this.requestRender()\n      }\n\n      this.range = this.responder?.getSelectedRange()\n    }\n  }\n\n  update(data) {\n    this.data.update = data\n\n    if (this.isSignificant()) {\n      const range = this.selectPlaceholder()\n      if (range) {\n        this.forgetPlaceholder()\n        this.range = range\n      }\n    }\n  }\n\n  end(data) {\n    this.data.end = data\n\n    if (this.isSignificant()) {\n      this.forgetPlaceholder()\n\n      if (this.canApplyToDocument()) {\n        this.setInputSummary({ preferDocument: true, didInput: false })\n        this.delegate?.inputControllerWillPerformTyping()\n        this.responder?.setSelectedRange(this.range)\n        this.responder?.insertString(this.data.end)\n        return this.responder?.setSelectedRange(this.range[0] + this.data.end.length)\n      } else if (this.data.start != null || this.data.update != null) {\n        this.requestReparse()\n        return this.inputController.reset()\n      }\n    } else {\n      return this.inputController.reset()\n    }\n  }\n\n  getEndData() {\n    return this.data.end\n  }\n\n  isEnded() {\n    return this.getEndData() != null\n  }\n\n  isSignificant() {\n    if (browser.composesExistingText) {\n      return this.inputSummary.didInput\n    } else {\n      return true\n    }\n  }\n\n  // Private\n\n  canApplyToDocument() {\n    return this.data.start?.length === 0 && this.data.end?.length > 0 && this.range\n  }\n}\n\nCompositionInput.proxyMethod(\"inputController.setInputSummary\")\nCompositionInput.proxyMethod(\"inputController.requestRender\")\nCompositionInput.proxyMethod(\"inputController.requestReparse\")\nCompositionInput.proxyMethod(\"responder?.selectionIsExpanded\")\nCompositionInput.proxyMethod(\"responder?.insertPlaceholder\")\nCompositionInput.proxyMethod(\"responder?.selectPlaceholder\")\nCompositionInput.proxyMethod(\"responder?.forgetPlaceholder\")\n", "import { getAllAttributeNames, shouldRenderInmmediatelyToDealWithIOSDictation, squishBreakableWhitespace } from \"trix/core/helpers\"\nimport InputController from \"trix/controllers/input_controller\"\nimport * as config from \"trix/config\"\n\nimport { dataTransferIsMsOfficePaste, dataTransferIsPlainText, keyEventIsKeyboardCommand, objectsAreEqual } from \"trix/core/helpers\"\n\nimport { selectionChangeObserver } from \"trix/observers/selection_change_observer\"\n\nexport default class Level2InputController extends InputController {\n  constructor(...args) {\n    super(...args)\n    this.render = this.render.bind(this)\n  }\n\n  static events = {\n    keydown(event) {\n      if (keyEventIsKeyboardCommand(event)) {\n        const command = keyboardCommandFromKeyEvent(event)\n        if (this.delegate?.inputControllerDidReceiveKeyboardCommand(command)) {\n          event.preventDefault()\n        }\n      } else {\n        let name = event.key\n        if (event.altKey) {\n          name += \"+Alt\"\n        }\n        if (event.shiftKey) {\n          name += \"+Shift\"\n        }\n        const handler = this.constructor.keys[name]\n        if (handler) {\n          return this.withEvent(event, handler)\n        }\n      }\n    },\n\n    // Handle paste event to work around beforeinput.insertFromPaste browser bugs.\n    // Safe to remove each condition once fixed upstream.\n    paste(event) {\n      // https://bugs.webkit.org/show_bug.cgi?id=194921\n      let paste\n      const href = event.clipboardData?.getData(\"URL\")\n      if (pasteEventHasFilesOnly(event)) {\n        event.preventDefault()\n        return this.attachFiles(event.clipboardData.files)\n\n        // https://bugs.chromium.org/p/chromium/issues/detail?id=934448\n      } else if (pasteEventHasPlainTextOnly(event)) {\n        event.preventDefault()\n        paste = {\n          type: \"text/plain\",\n          string: event.clipboardData.getData(\"text/plain\"),\n        }\n        this.delegate?.inputControllerWillPaste(paste)\n        this.responder?.insertString(paste.string)\n        this.render()\n        return this.delegate?.inputControllerDidPaste(paste)\n\n        // https://bugs.webkit.org/show_bug.cgi?id=196702\n      } else if (href) {\n        event.preventDefault()\n        paste = {\n          type: \"text/html\",\n          html: this.createLinkHTML(href),\n        }\n        this.delegate?.inputControllerWillPaste(paste)\n        this.responder?.insertHTML(paste.html)\n        this.render()\n        return this.delegate?.inputControllerDidPaste(paste)\n      }\n    },\n\n    beforeinput(event) {\n      const handler = this.constructor.inputTypes[event.inputType]\n\n      const immmediateRender = shouldRenderInmmediatelyToDealWithIOSDictation(event)\n\n      if (handler) {\n        this.withEvent(event, handler)\n\n        if (!immmediateRender) {\n          this.scheduleRender()\n        }\n      }\n\n      if (immmediateRender) {\n        this.render()\n      }\n    },\n\n    input(event) {\n      selectionChangeObserver.reset()\n    },\n\n    dragstart(event) {\n      if (this.responder?.selectionContainsAttachments()) {\n        event.dataTransfer.setData(\"application/x-trix-dragging\", true)\n\n        this.dragging = {\n          range: this.responder?.getSelectedRange(),\n          point: pointFromEvent(event),\n        }\n      }\n    },\n\n    dragenter(event) {\n      if (dragEventHasFiles(event)) {\n        event.preventDefault()\n      }\n    },\n\n    dragover(event) {\n      if (this.dragging) {\n        event.preventDefault()\n        const point = pointFromEvent(event)\n        if (!objectsAreEqual(point, this.dragging.point)) {\n          this.dragging.point = point\n          return this.responder?.setLocationRangeFromPointRange(point)\n        }\n      } else if (dragEventHasFiles(event)) {\n        event.preventDefault()\n      }\n    },\n\n    drop(event) {\n      if (this.dragging) {\n        event.preventDefault()\n        this.delegate?.inputControllerWillMoveText()\n        this.responder?.moveTextFromRange(this.dragging.range)\n        this.dragging = null\n        return this.scheduleRender()\n      } else if (dragEventHasFiles(event)) {\n        event.preventDefault()\n        const point = pointFromEvent(event)\n        this.responder?.setLocationRangeFromPointRange(point)\n        return this.attachFiles(event.dataTransfer.files)\n      }\n    },\n\n    dragend() {\n      if (this.dragging) {\n        this.responder?.setSelectedRange(this.dragging.range)\n        this.dragging = null\n      }\n    },\n\n    compositionend(event) {\n      if (this.composing) {\n        this.composing = false\n        if (!config.browser.recentAndroid) this.scheduleRender()\n      }\n    },\n  }\n\n  static keys = {\n    ArrowLeft() {\n      if (this.responder?.shouldManageMovingCursorInDirection(\"backward\")) {\n        this.event.preventDefault()\n        return this.responder?.moveCursorInDirection(\"backward\")\n      }\n    },\n\n    ArrowRight() {\n      if (this.responder?.shouldManageMovingCursorInDirection(\"forward\")) {\n        this.event.preventDefault()\n        return this.responder?.moveCursorInDirection(\"forward\")\n      }\n    },\n\n    Backspace() {\n      if (this.responder?.shouldManageDeletingInDirection(\"backward\")) {\n        this.event.preventDefault()\n        this.delegate?.inputControllerWillPerformTyping()\n        this.responder?.deleteInDirection(\"backward\")\n        return this.render()\n      }\n    },\n\n    Tab() {\n      if (this.responder?.canIncreaseNestingLevel()) {\n        this.event.preventDefault()\n        this.responder?.increaseNestingLevel()\n        return this.render()\n      }\n    },\n\n    \"Tab+Shift\"() {\n      if (this.responder?.canDecreaseNestingLevel()) {\n        this.event.preventDefault()\n        this.responder?.decreaseNestingLevel()\n        return this.render()\n      }\n    },\n  }\n\n  static inputTypes = {\n    deleteByComposition() {\n      return this.deleteInDirection(\"backward\", { recordUndoEntry: false })\n    },\n\n    deleteByCut() {\n      return this.deleteInDirection(\"backward\")\n    },\n\n    deleteByDrag() {\n      this.event.preventDefault()\n      return this.withTargetDOMRange(function() {\n        this.deleteByDragRange = this.responder?.getSelectedRange()\n      })\n    },\n\n    deleteCompositionText() {\n      return this.deleteInDirection(\"backward\", { recordUndoEntry: false })\n    },\n\n    deleteContent() {\n      return this.deleteInDirection(\"backward\")\n    },\n\n    deleteContentBackward() {\n      return this.deleteInDirection(\"backward\")\n    },\n\n    deleteContentForward() {\n      return this.deleteInDirection(\"forward\")\n    },\n\n    deleteEntireSoftLine() {\n      return this.deleteInDirection(\"forward\")\n    },\n\n    deleteHardLineBackward() {\n      return this.deleteInDirection(\"backward\")\n    },\n\n    deleteHardLineForward() {\n      return this.deleteInDirection(\"forward\")\n    },\n\n    deleteSoftLineBackward() {\n      return this.deleteInDirection(\"backward\")\n    },\n\n    deleteSoftLineForward() {\n      return this.deleteInDirection(\"forward\")\n    },\n\n    deleteWordBackward() {\n      return this.deleteInDirection(\"backward\")\n    },\n\n    deleteWordForward() {\n      return this.deleteInDirection(\"forward\")\n    },\n\n    formatBackColor() {\n      return this.activateAttributeIfSupported(\"backgroundColor\", this.event.data)\n    },\n\n    formatBold() {\n      return this.toggleAttributeIfSupported(\"bold\")\n    },\n\n    formatFontColor() {\n      return this.activateAttributeIfSupported(\"color\", this.event.data)\n    },\n\n    formatFontName() {\n      return this.activateAttributeIfSupported(\"font\", this.event.data)\n    },\n\n    formatIndent() {\n      if (this.responder?.canIncreaseNestingLevel()) {\n        return this.withTargetDOMRange(function() {\n          return this.responder?.increaseNestingLevel()\n        })\n      }\n    },\n\n    formatItalic() {\n      return this.toggleAttributeIfSupported(\"italic\")\n    },\n\n    formatJustifyCenter() {\n      return this.toggleAttributeIfSupported(\"justifyCenter\")\n    },\n\n    formatJustifyFull() {\n      return this.toggleAttributeIfSupported(\"justifyFull\")\n    },\n\n    formatJustifyLeft() {\n      return this.toggleAttributeIfSupported(\"justifyLeft\")\n    },\n\n    formatJustifyRight() {\n      return this.toggleAttributeIfSupported(\"justifyRight\")\n    },\n\n    formatOutdent() {\n      if (this.responder?.canDecreaseNestingLevel()) {\n        return this.withTargetDOMRange(function() {\n          return this.responder?.decreaseNestingLevel()\n        })\n      }\n    },\n\n    formatRemove() {\n      this.withTargetDOMRange(function() {\n        for (const attributeName in this.responder?.getCurrentAttributes()) {\n          this.responder?.removeCurrentAttribute(attributeName)\n        }\n      })\n    },\n\n    formatSetBlockTextDirection() {\n      return this.activateAttributeIfSupported(\"blockDir\", this.event.data)\n    },\n\n    formatSetInlineTextDirection() {\n      return this.activateAttributeIfSupported(\"textDir\", this.event.data)\n    },\n\n    formatStrikeThrough() {\n      return this.toggleAttributeIfSupported(\"strike\")\n    },\n\n    formatSubscript() {\n      return this.toggleAttributeIfSupported(\"sub\")\n    },\n\n    formatSuperscript() {\n      return this.toggleAttributeIfSupported(\"sup\")\n    },\n\n    formatUnderline() {\n      return this.toggleAttributeIfSupported(\"underline\")\n    },\n\n    historyRedo() {\n      return this.delegate?.inputControllerWillPerformRedo()\n    },\n\n    historyUndo() {\n      return this.delegate?.inputControllerWillPerformUndo()\n    },\n\n    insertCompositionText() {\n      this.composing = true\n      return this.insertString(this.event.data)\n    },\n\n    insertFromComposition() {\n      this.composing = false\n      return this.insertString(this.event.data)\n    },\n\n    insertFromDrop() {\n      const range = this.deleteByDragRange\n      if (range) {\n        this.deleteByDragRange = null\n        this.delegate?.inputControllerWillMoveText()\n        return this.withTargetDOMRange(function() {\n          return this.responder?.moveTextFromRange(range)\n        })\n      }\n    },\n\n    insertFromPaste() {\n      const { dataTransfer } = this.event\n      const paste = { dataTransfer }\n\n      const href = dataTransfer.getData(\"URL\")\n      const html = dataTransfer.getData(\"text/html\")\n\n      if (href) {\n        let string\n        this.event.preventDefault()\n        paste.type = \"text/html\"\n        const name = dataTransfer.getData(\"public.url-name\")\n        if (name) {\n          string = squishBreakableWhitespace(name).trim()\n        } else {\n          string = href\n        }\n        paste.html = this.createLinkHTML(href, string)\n        this.delegate?.inputControllerWillPaste(paste)\n        this.withTargetDOMRange(function() {\n          return this.responder?.insertHTML(paste.html)\n        })\n        this.afterRender = () => {\n          return this.delegate?.inputControllerDidPaste(paste)\n        }\n      } else if (dataTransferIsPlainText(dataTransfer)) {\n        paste.type = \"text/plain\"\n        paste.string = dataTransfer.getData(\"text/plain\")\n        this.delegate?.inputControllerWillPaste(paste)\n        this.withTargetDOMRange(function() {\n          return this.responder?.insertString(paste.string)\n        })\n\n        this.afterRender = () => {\n          return this.delegate?.inputControllerDidPaste(paste)\n        }\n      } else if (processableFilePaste(this.event)) {\n        paste.type = \"File\"\n        paste.file = dataTransfer.files[0]\n        this.delegate?.inputControllerWillPaste(paste)\n        this.withTargetDOMRange(function() {\n          return this.responder?.insertFile(paste.file)\n        })\n\n        this.afterRender = () => {\n          return this.delegate?.inputControllerDidPaste(paste)\n        }\n      } else if (html) {\n        this.event.preventDefault()\n        paste.type = \"text/html\"\n        paste.html = html\n        this.delegate?.inputControllerWillPaste(paste)\n        this.withTargetDOMRange(function() {\n          return this.responder?.insertHTML(paste.html)\n        })\n        this.afterRender = () => {\n          return this.delegate?.inputControllerDidPaste(paste)\n        }\n      }\n    },\n\n    insertFromYank() {\n      return this.insertString(this.event.data)\n    },\n\n    insertLineBreak() {\n      return this.insertString(\"\\n\")\n    },\n\n    insertLink() {\n      return this.activateAttributeIfSupported(\"href\", this.event.data)\n    },\n\n    insertOrderedList() {\n      return this.toggleAttributeIfSupported(\"number\")\n    },\n\n    insertParagraph() {\n      this.delegate?.inputControllerWillPerformTyping()\n      return this.withTargetDOMRange(function() {\n        return this.responder?.insertLineBreak()\n      })\n    },\n\n    insertReplacementText() {\n      const replacement = this.event.dataTransfer.getData(\"text/plain\")\n      const domRange = this.event.getTargetRanges()[0]\n\n      this.withTargetDOMRange(domRange, () => {\n        this.insertString(replacement, { updatePosition: false })\n      })\n    },\n\n    insertText() {\n      return this.insertString(this.event.data || this.event.dataTransfer?.getData(\"text/plain\"))\n    },\n\n    insertTranspose() {\n      return this.insertString(this.event.data)\n    },\n\n    insertUnorderedList() {\n      return this.toggleAttributeIfSupported(\"bullet\")\n    },\n  }\n\n  elementDidMutate() {\n    if (this.scheduledRender) {\n      if (this.composing) {\n        return this.delegate?.inputControllerDidAllowUnhandledInput?.()\n      }\n    } else {\n      return this.reparse()\n    }\n  }\n\n  scheduleRender() {\n    return this.scheduledRender ? this.scheduledRender : this.scheduledRender = requestAnimationFrame(this.render)\n  }\n\n  render() {\n    cancelAnimationFrame(this.scheduledRender)\n    this.scheduledRender = null\n    if (!this.composing) {\n      this.delegate?.render()\n    }\n    this.afterRender?.()\n    this.afterRender = null\n  }\n\n  reparse() {\n    return this.delegate?.reparse()\n  }\n\n  // Responder helpers\n\n  insertString(string = \"\", options) {\n    this.delegate?.inputControllerWillPerformTyping()\n    return this.withTargetDOMRange(function() {\n      return this.responder?.insertString(string, options)\n    })\n  }\n\n  toggleAttributeIfSupported(attributeName) {\n    if (getAllAttributeNames().includes(attributeName)) {\n      this.delegate?.inputControllerWillPerformFormatting(attributeName)\n      return this.withTargetDOMRange(function() {\n        return this.responder?.toggleCurrentAttribute(attributeName)\n      })\n    }\n  }\n\n  activateAttributeIfSupported(attributeName, value) {\n    if (getAllAttributeNames().includes(attributeName)) {\n      this.delegate?.inputControllerWillPerformFormatting(attributeName)\n      return this.withTargetDOMRange(function() {\n        return this.responder?.setCurrentAttribute(attributeName, value)\n      })\n    }\n  }\n\n  deleteInDirection(direction, { recordUndoEntry } = { recordUndoEntry: true }) {\n    if (recordUndoEntry) {\n      this.delegate?.inputControllerWillPerformTyping()\n    }\n    const perform = () => this.responder?.deleteInDirection(direction)\n    const domRange = this.getTargetDOMRange({ minLength: this.composing ? 1 : 2 })\n    if (domRange) {\n      return this.withTargetDOMRange(domRange, perform)\n    } else {\n      return perform()\n    }\n  }\n\n  // Selection helpers\n\n  withTargetDOMRange(domRange, fn) {\n    if (typeof domRange === \"function\") {\n      fn = domRange\n      domRange = this.getTargetDOMRange()\n    }\n    if (domRange) {\n      return this.responder?.withTargetDOMRange(domRange, fn.bind(this))\n    } else {\n      selectionChangeObserver.reset()\n      return fn.call(this)\n    }\n  }\n\n  getTargetDOMRange({ minLength } = { minLength: 0 }) {\n    const targetRanges = this.event.getTargetRanges?.()\n    if (targetRanges) {\n      if (targetRanges.length) {\n        const domRange = staticRangeToRange(targetRanges[0])\n        if (minLength === 0 || domRange.toString().length >= minLength) {\n          return domRange\n        }\n      }\n    }\n  }\n\n  withEvent(event, fn) {\n    let result\n    this.event = event\n    try {\n      result = fn.call(this)\n    } finally {\n      this.event = null\n    }\n    return result\n  }\n}\n\nconst staticRangeToRange = function(staticRange) {\n  const range = document.createRange()\n  range.setStart(staticRange.startContainer, staticRange.startOffset)\n  range.setEnd(staticRange.endContainer, staticRange.endOffset)\n  return range\n}\n\n// Event helpers\n\nconst dragEventHasFiles = (event) => Array.from(event.dataTransfer?.types || []).includes(\"Files\")\n\nconst processableFilePaste = (event) => {\n  // Paste events that only have files are handled by the paste event handler,\n  // to work around Safari not supporting beforeinput.insertFromPaste for files.\n\n  // MS Office text pastes include a file with a screenshot of the text, but we should\n  // handle them as text pastes.\n  return event.dataTransfer.files?.[0] && !pasteEventHasFilesOnly(event) && !dataTransferIsMsOfficePaste(event)\n}\n\nconst pasteEventHasFilesOnly = function(event) {\n  const clipboard = event.clipboardData\n  if (clipboard) {\n    const fileTypes = Array.from(clipboard.types).filter((type) => type.match(/file/i)) // \"Files\", \"application/x-moz-file\"\n    return fileTypes.length === clipboard.types.length && clipboard.files.length >= 1\n  }\n}\n\nconst pasteEventHasPlainTextOnly = function(event) {\n  const clipboard = event.clipboardData\n  if (clipboard) {\n    return clipboard.types.includes(\"text/plain\") && clipboard.types.length === 1\n  }\n}\n\nconst keyboardCommandFromKeyEvent = function(event) {\n  const command = []\n  if (event.altKey) {\n    command.push(\"alt\")\n  }\n  if (event.shiftKey) {\n    command.push(\"shift\")\n  }\n  command.push(event.key)\n  return command\n}\n\nconst pointFromEvent = (event) => ({\n  x: event.clientX,\n  y: event.clientY,\n})\n", "import BasicObject from \"trix/core/basic_object\"\n\nimport { findClosestElementFromNode, handleEvent, triggerEvent } from \"trix/core/helpers\"\n\nimport DOMPurify from \"dompurify\"\n\nconst attributeButtonSelector = \"[data-trix-attribute]\"\nconst actionButtonSelector = \"[data-trix-action]\"\nconst toolbarButtonSelector = `${attributeButtonSelector}, ${actionButtonSelector}`\nconst dialogSelector = \"[data-trix-dialog]\"\nconst activeDialogSelector = `${dialogSelector}[data-trix-active]`\nconst dialogButtonSelector = `${dialogSelector} [data-trix-method]`\nconst dialogInputSelector = `${dialogSelector} [data-trix-input]`\nconst getInputForDialog = (element, attributeName) => {\n  if (!attributeName) { attributeName = getAttributeName(element) }\n  return element.querySelector(`[data-trix-input][name='${attributeName}']`)\n}\nconst getActionName = (element) => element.getAttribute(\"data-trix-action\")\nconst getAttributeName = (element) => {\n  return element.getAttribute(\"data-trix-attribute\") || element.getAttribute(\"data-trix-dialog-attribute\")\n}\nconst getDialogName = (element) => element.getAttribute(\"data-trix-dialog\")\n\nexport default class ToolbarController extends BasicObject {\n  constructor(element) {\n    super(element)\n    this.didClickActionButton = this.didClickActionButton.bind(this)\n    this.didClickAttributeButton = this.didClickAttributeButton.bind(this)\n    this.didClickDialogButton = this.didClickDialogButton.bind(this)\n    this.didKeyDownDialogInput = this.didKeyDownDialogInput.bind(this)\n    this.element = element\n    this.attributes = {}\n    this.actions = {}\n    this.resetDialogInputs()\n\n    handleEvent(\"mousedown\", {\n      onElement: this.element,\n      matchingSelector: actionButtonSelector,\n      withCallback: this.didClickActionButton,\n    })\n    handleEvent(\"mousedown\", {\n      onElement: this.element,\n      matchingSelector: attributeButtonSelector,\n      withCallback: this.didClickAttributeButton,\n    })\n    handleEvent(\"click\", { onElement: this.element, matchingSelector: toolbarButtonSelector, preventDefault: true })\n    handleEvent(\"click\", {\n      onElement: this.element,\n      matchingSelector: dialogButtonSelector,\n      withCallback: this.didClickDialogButton,\n    })\n    handleEvent(\"keydown\", {\n      onElement: this.element,\n      matchingSelector: dialogInputSelector,\n      withCallback: this.didKeyDownDialogInput,\n    })\n  }\n\n  // Event handlers\n\n  didClickActionButton(event, element) {\n    this.delegate?.toolbarDidClickButton()\n    event.preventDefault()\n    const actionName = getActionName(element)\n\n    if (this.getDialog(actionName)) {\n      return this.toggleDialog(actionName)\n    } else {\n      return this.delegate?.toolbarDidInvokeAction(actionName, element)\n    }\n  }\n\n  didClickAttributeButton(event, element) {\n    this.delegate?.toolbarDidClickButton()\n    event.preventDefault()\n    const attributeName = getAttributeName(element)\n\n    if (this.getDialog(attributeName)) {\n      this.toggleDialog(attributeName)\n    } else {\n      this.delegate?.toolbarDidToggleAttribute(attributeName)\n    }\n\n    return this.refreshAttributeButtons()\n  }\n\n  didClickDialogButton(event, element) {\n    const dialogElement = findClosestElementFromNode(element, { matchingSelector: dialogSelector })\n    const method = element.getAttribute(\"data-trix-method\")\n    return this[method].call(this, dialogElement)\n  }\n\n  didKeyDownDialogInput(event, element) {\n    if (event.keyCode === 13) {\n      // Enter key\n      event.preventDefault()\n      const attribute = element.getAttribute(\"name\")\n      const dialog = this.getDialog(attribute)\n      this.setAttribute(dialog)\n    }\n    if (event.keyCode === 27) {\n      // Escape key\n      event.preventDefault()\n      return this.hideDialog()\n    }\n  }\n\n  // Action buttons\n\n  updateActions(actions) {\n    this.actions = actions\n    return this.refreshActionButtons()\n  }\n\n  refreshActionButtons() {\n    return this.eachActionButton((element, actionName) => {\n      element.disabled = this.actions[actionName] === false\n    })\n  }\n\n  eachActionButton(callback) {\n    return Array.from(this.element.querySelectorAll(actionButtonSelector)).map((element) =>\n      callback(element, getActionName(element))\n    )\n  }\n\n  // Attribute buttons\n\n  updateAttributes(attributes) {\n    this.attributes = attributes\n    return this.refreshAttributeButtons()\n  }\n\n  refreshAttributeButtons() {\n    return this.eachAttributeButton((element, attributeName) => {\n      element.disabled = this.attributes[attributeName] === false\n      if (this.attributes[attributeName] || this.dialogIsVisible(attributeName)) {\n        element.setAttribute(\"data-trix-active\", \"\")\n        return element.classList.add(\"trix-active\")\n      } else {\n        element.removeAttribute(\"data-trix-active\")\n        return element.classList.remove(\"trix-active\")\n      }\n    })\n  }\n\n  eachAttributeButton(callback) {\n    return Array.from(this.element.querySelectorAll(attributeButtonSelector)).map((element) =>\n      callback(element, getAttributeName(element))\n    )\n  }\n\n  applyKeyboardCommand(keys) {\n    const keyString = JSON.stringify(keys.sort())\n    for (const button of Array.from(this.element.querySelectorAll(\"[data-trix-key]\"))) {\n      const buttonKeys = button.getAttribute(\"data-trix-key\").split(\"+\")\n      const buttonKeyString = JSON.stringify(buttonKeys.sort())\n      if (buttonKeyString === keyString) {\n        triggerEvent(\"mousedown\", { onElement: button })\n        return true\n      }\n    }\n    return false\n  }\n\n  // Dialogs\n\n  dialogIsVisible(dialogName) {\n    const element = this.getDialog(dialogName)\n    if (element) {\n      return element.hasAttribute(\"data-trix-active\")\n    }\n  }\n\n  toggleDialog(dialogName) {\n    if (this.dialogIsVisible(dialogName)) {\n      return this.hideDialog()\n    } else {\n      return this.showDialog(dialogName)\n    }\n  }\n\n  showDialog(dialogName) {\n    this.hideDialog()\n    this.delegate?.toolbarWillShowDialog()\n\n    const element = this.getDialog(dialogName)\n    element.setAttribute(\"data-trix-active\", \"\")\n    element.classList.add(\"trix-active\")\n\n    Array.from(element.querySelectorAll(\"input[disabled]\")).forEach((disabledInput) => {\n      disabledInput.removeAttribute(\"disabled\")\n    })\n\n    const attributeName = getAttributeName(element)\n    if (attributeName) {\n      const input = getInputForDialog(element, dialogName)\n      if (input) {\n        input.value = this.attributes[attributeName] || \"\"\n        input.select()\n      }\n    }\n\n    return this.delegate?.toolbarDidShowDialog(dialogName)\n  }\n\n  setAttribute(dialogElement) {\n    const attributeName = getAttributeName(dialogElement)\n    const input = getInputForDialog(dialogElement, attributeName)\n\n    if (input.willValidate) {\n      input.setCustomValidity(\"\")\n      if (!input.checkValidity() || !this.isSafeAttribute(input)) {\n        input.setCustomValidity(\"Invalid value\")\n        input.setAttribute(\"data-trix-validate\", \"\")\n        input.classList.add(\"trix-validate\")\n        return input.focus()\n      }\n    }\n    this.delegate?.toolbarDidUpdateAttribute(attributeName, input.value)\n    return this.hideDialog()\n  }\n\n  isSafeAttribute(input) {\n    if (input.hasAttribute(\"data-trix-validate-href\")) {\n      return DOMPurify.isValidAttribute(\"a\", \"href\", input.value)\n    } else {\n      return true\n    }\n  }\n\n  removeAttribute(dialogElement) {\n    const attributeName = getAttributeName(dialogElement)\n    this.delegate?.toolbarDidRemoveAttribute(attributeName)\n    return this.hideDialog()\n  }\n\n  hideDialog() {\n    const element = this.element.querySelector(activeDialogSelector)\n    if (element) {\n      element.removeAttribute(\"data-trix-active\")\n      element.classList.remove(\"trix-active\")\n      this.resetDialogInputs()\n      return this.delegate?.toolbarDidHideDialog(getDialogName(element))\n    }\n  }\n\n  resetDialogInputs() {\n    Array.from(this.element.querySelectorAll(dialogInputSelector)).forEach((input) => {\n      input.setAttribute(\"disabled\", \"disabled\")\n      input.removeAttribute(\"data-trix-validate\")\n      input.classList.remove(\"trix-validate\")\n    })\n  }\n\n  getDialog(dialogName) {\n    return this.element.querySelector(`[data-trix-dialog=${dialogName}]`)\n  }\n}\n", "/* eslint-disable\n    id-length,\n*/\nimport * as config from \"trix/config\"\n\nimport { serializeToContentType } from \"trix/core/serialization\"\n\nimport Controller from \"trix/controllers/controller\"\nimport Level0InputController from \"trix/controllers/level_0_input_controller\"\nimport Level2InputController from \"trix/controllers/level_2_input_controller\"\nimport CompositionController from \"trix/controllers/composition_controller\"\nimport ToolbarController from \"trix/controllers/toolbar_controller\"\nimport Composition from \"trix/models/composition\"\nimport Editor from \"trix/models/editor\"\nimport AttachmentManager from \"trix/models/attachment_manager\"\nimport SelectionManager from \"trix/models/selection_manager\"\n\nimport { getBlockConfig, objectsAreEqual, rangeIsCollapsed, rangesAreEqual } from \"trix/core/helpers\"\nimport { selectionChangeObserver } from \"trix/observers/selection_change_observer\"\n\nconst snapshotsAreEqual = (a, b) => rangesAreEqual(a.selectedRange, b.selectedRange) && a.document.isEqualTo(b.document)\n\nexport default class EditorController extends Controller {\n  static actions = {\n    undo: {\n      test() {\n        return this.editor.canUndo()\n      },\n      perform() {\n        return this.editor.undo()\n      },\n    },\n    redo: {\n      test() {\n        return this.editor.canRedo()\n      },\n      perform() {\n        return this.editor.redo()\n      },\n    },\n    link: {\n      test() {\n        return this.editor.canActivateAttribute(\"href\")\n      },\n    },\n    increaseNestingLevel: {\n      test() {\n        return this.editor.canIncreaseNestingLevel()\n      },\n      perform() {\n        return this.editor.increaseNestingLevel() && this.render()\n      },\n    },\n    decreaseNestingLevel: {\n      test() {\n        return this.editor.canDecreaseNestingLevel()\n      },\n      perform() {\n        return this.editor.decreaseNestingLevel() && this.render()\n      },\n    },\n    attachFiles: {\n      test() {\n        return true\n      },\n      perform() {\n        return config.input.pickFiles(this.editor.insertFiles)\n      },\n    },\n  }\n\n  constructor({ editorElement, document, html }) {\n    super(...arguments)\n    this.editorElement = editorElement\n    this.selectionManager = new SelectionManager(this.editorElement)\n    this.selectionManager.delegate = this\n\n    this.composition = new Composition()\n    this.composition.delegate = this\n\n    this.attachmentManager = new AttachmentManager(this.composition.getAttachments())\n    this.attachmentManager.delegate = this\n\n    this.inputController =\n      config.input.getLevel() === 2\n        ? new Level2InputController(this.editorElement)\n        : new Level0InputController(this.editorElement)\n\n    this.inputController.delegate = this\n    this.inputController.responder = this.composition\n\n    this.compositionController = new CompositionController(this.editorElement, this.composition)\n    this.compositionController.delegate = this\n\n    this.toolbarController = new ToolbarController(this.editorElement.toolbarElement)\n    this.toolbarController.delegate = this\n\n    this.editor = new Editor(this.composition, this.selectionManager, this.editorElement)\n    if (document) {\n      this.editor.loadDocument(document)\n    } else {\n      this.editor.loadHTML(html)\n    }\n  }\n\n  registerSelectionManager() {\n    return selectionChangeObserver.registerSelectionManager(this.selectionManager)\n  }\n\n  unregisterSelectionManager() {\n    return selectionChangeObserver.unregisterSelectionManager(this.selectionManager)\n  }\n\n  render() {\n    return this.compositionController.render()\n  }\n\n  reparse() {\n    return this.composition.replaceHTML(this.editorElement.innerHTML)\n  }\n\n  // Composition delegate\n\n  compositionDidChangeDocument(document) {\n    this.notifyEditorElement(\"document-change\")\n    if (!this.handlingInput) {\n      return this.render()\n    }\n  }\n\n  compositionDidChangeCurrentAttributes(currentAttributes) {\n    this.currentAttributes = currentAttributes\n    this.toolbarController.updateAttributes(this.currentAttributes)\n    this.updateCurrentActions()\n    return this.notifyEditorElement(\"attributes-change\", { attributes: this.currentAttributes })\n  }\n\n  compositionDidPerformInsertionAtRange(range) {\n    if (this.pasting) {\n      this.pastedRange = range\n    }\n  }\n\n  compositionShouldAcceptFile(file) {\n    return this.notifyEditorElement(\"file-accept\", { file })\n  }\n\n  compositionDidAddAttachment(attachment) {\n    const managedAttachment = this.attachmentManager.manageAttachment(attachment)\n    return this.notifyEditorElement(\"attachment-add\", { attachment: managedAttachment })\n  }\n\n  compositionDidEditAttachment(attachment) {\n    this.compositionController.rerenderViewForObject(attachment)\n    const managedAttachment = this.attachmentManager.manageAttachment(attachment)\n    this.notifyEditorElement(\"attachment-edit\", { attachment: managedAttachment })\n    return this.notifyEditorElement(\"change\")\n  }\n\n  compositionDidChangeAttachmentPreviewURL(attachment) {\n    this.compositionController.invalidateViewForObject(attachment)\n    return this.notifyEditorElement(\"change\")\n  }\n\n  compositionDidRemoveAttachment(attachment) {\n    const managedAttachment = this.attachmentManager.unmanageAttachment(attachment)\n    return this.notifyEditorElement(\"attachment-remove\", { attachment: managedAttachment })\n  }\n\n  compositionDidStartEditingAttachment(attachment, options) {\n    this.attachmentLocationRange = this.composition.document.getLocationRangeOfAttachment(attachment)\n    this.compositionController.installAttachmentEditorForAttachment(attachment, options)\n    return this.selectionManager.setLocationRange(this.attachmentLocationRange)\n  }\n\n  compositionDidStopEditingAttachment(attachment) {\n    this.compositionController.uninstallAttachmentEditor()\n    this.attachmentLocationRange = null\n  }\n\n  compositionDidRequestChangingSelectionToLocationRange(locationRange) {\n    if (this.loadingSnapshot && !this.isFocused()) return\n    this.requestedLocationRange = locationRange\n    this.compositionRevisionWhenLocationRangeRequested = this.composition.revision\n    if (!this.handlingInput) {\n      return this.render()\n    }\n  }\n\n  compositionWillLoadSnapshot() {\n    this.loadingSnapshot = true\n  }\n\n  compositionDidLoadSnapshot() {\n    this.compositionController.refreshViewCache()\n    this.render()\n    this.loadingSnapshot = false\n  }\n\n  getSelectionManager() {\n    return this.selectionManager\n  }\n\n  // Attachment manager delegate\n\n  attachmentManagerDidRequestRemovalOfAttachment(attachment) {\n    return this.removeAttachment(attachment)\n  }\n\n  // Document controller delegate\n\n  compositionControllerWillSyncDocumentView() {\n    this.inputController.editorWillSyncDocumentView()\n    this.selectionManager.lock()\n    return this.selectionManager.clearSelection()\n  }\n\n  compositionControllerDidSyncDocumentView() {\n    this.inputController.editorDidSyncDocumentView()\n    this.selectionManager.unlock()\n    this.updateCurrentActions()\n    return this.notifyEditorElement(\"sync\")\n  }\n\n  compositionControllerDidRender() {\n    if (this.requestedLocationRange) {\n      if (this.compositionRevisionWhenLocationRangeRequested === this.composition.revision) {\n        this.selectionManager.setLocationRange(this.requestedLocationRange)\n      }\n      this.requestedLocationRange = null\n      this.compositionRevisionWhenLocationRangeRequested = null\n    }\n\n    if (this.renderedCompositionRevision !== this.composition.revision) {\n      this.runEditorFilters()\n      this.composition.updateCurrentAttributes()\n      this.notifyEditorElement(\"render\")\n    }\n\n    this.renderedCompositionRevision = this.composition.revision\n  }\n\n  compositionControllerDidFocus() {\n    if (this.isFocusedInvisibly()) {\n      this.setLocationRange({ index: 0, offset: 0 })\n    }\n    this.toolbarController.hideDialog()\n    return this.notifyEditorElement(\"focus\")\n  }\n\n  compositionControllerDidBlur() {\n    return this.notifyEditorElement(\"blur\")\n  }\n\n  compositionControllerDidSelectAttachment(attachment, options) {\n    this.toolbarController.hideDialog()\n    return this.composition.editAttachment(attachment, options)\n  }\n\n  compositionControllerDidRequestDeselectingAttachment(attachment) {\n    const locationRange = this.attachmentLocationRange || this.composition.document.getLocationRangeOfAttachment(attachment)\n    return this.selectionManager.setLocationRange(locationRange[1])\n  }\n\n  compositionControllerWillUpdateAttachment(attachment) {\n    return this.editor.recordUndoEntry(\"Edit Attachment\", { context: attachment.id, consolidatable: true })\n  }\n\n  compositionControllerDidRequestRemovalOfAttachment(attachment) {\n    return this.removeAttachment(attachment)\n  }\n\n  // Input controller delegate\n\n  inputControllerWillHandleInput() {\n    this.handlingInput = true\n    this.requestedRender = false\n  }\n\n  inputControllerDidRequestRender() {\n    this.requestedRender = true\n  }\n\n  inputControllerDidHandleInput() {\n    this.handlingInput = false\n    if (this.requestedRender) {\n      this.requestedRender = false\n      return this.render()\n    }\n  }\n\n  inputControllerDidAllowUnhandledInput() {\n    return this.notifyEditorElement(\"change\")\n  }\n\n  inputControllerDidRequestReparse() {\n    return this.reparse()\n  }\n\n  inputControllerWillPerformTyping() {\n    return this.recordTypingUndoEntry()\n  }\n\n  inputControllerWillPerformFormatting(attributeName) {\n    return this.recordFormattingUndoEntry(attributeName)\n  }\n\n  inputControllerWillCutText() {\n    return this.editor.recordUndoEntry(\"Cut\")\n  }\n\n  inputControllerWillPaste(paste) {\n    this.editor.recordUndoEntry(\"Paste\")\n    this.pasting = true\n    return this.notifyEditorElement(\"before-paste\", { paste })\n  }\n\n  inputControllerDidPaste(paste) {\n    paste.range = this.pastedRange\n    this.pastedRange = null\n    this.pasting = null\n    return this.notifyEditorElement(\"paste\", { paste })\n  }\n\n  inputControllerWillMoveText() {\n    return this.editor.recordUndoEntry(\"Move\")\n  }\n\n  inputControllerWillAttachFiles() {\n    return this.editor.recordUndoEntry(\"Drop Files\")\n  }\n\n  inputControllerWillPerformUndo() {\n    return this.editor.undo()\n  }\n\n  inputControllerWillPerformRedo() {\n    return this.editor.redo()\n  }\n\n  inputControllerDidReceiveKeyboardCommand(keys) {\n    return this.toolbarController.applyKeyboardCommand(keys)\n  }\n\n  inputControllerDidStartDrag() {\n    this.locationRangeBeforeDrag = this.selectionManager.getLocationRange()\n  }\n\n  inputControllerDidReceiveDragOverPoint(point) {\n    return this.selectionManager.setLocationRangeFromPointRange(point)\n  }\n\n  inputControllerDidCancelDrag() {\n    this.selectionManager.setLocationRange(this.locationRangeBeforeDrag)\n    this.locationRangeBeforeDrag = null\n  }\n\n  // Selection manager delegate\n\n  locationRangeDidChange(locationRange) {\n    this.composition.updateCurrentAttributes()\n    this.updateCurrentActions()\n    if (this.attachmentLocationRange && !rangesAreEqual(this.attachmentLocationRange, locationRange)) {\n      this.composition.stopEditingAttachment()\n    }\n    return this.notifyEditorElement(\"selection-change\")\n  }\n\n  // Toolbar controller delegate\n\n  toolbarDidClickButton() {\n    if (!this.getLocationRange()) {\n      return this.setLocationRange({ index: 0, offset: 0 })\n    }\n  }\n\n  toolbarDidInvokeAction(actionName, invokingElement) {\n    return this.invokeAction(actionName, invokingElement)\n  }\n\n  toolbarDidToggleAttribute(attributeName) {\n    this.recordFormattingUndoEntry(attributeName)\n    this.composition.toggleCurrentAttribute(attributeName)\n    this.render()\n    if (!this.selectionFrozen) {\n      return this.editorElement.focus()\n    }\n  }\n\n  toolbarDidUpdateAttribute(attributeName, value) {\n    this.recordFormattingUndoEntry(attributeName)\n    this.composition.setCurrentAttribute(attributeName, value)\n    this.render()\n    if (!this.selectionFrozen) {\n      return this.editorElement.focus()\n    }\n  }\n\n  toolbarDidRemoveAttribute(attributeName) {\n    this.recordFormattingUndoEntry(attributeName)\n    this.composition.removeCurrentAttribute(attributeName)\n    this.render()\n    if (!this.selectionFrozen) {\n      return this.editorElement.focus()\n    }\n  }\n\n  toolbarWillShowDialog(dialogElement) {\n    this.composition.expandSelectionForEditing()\n    return this.freezeSelection()\n  }\n\n  toolbarDidShowDialog(dialogName) {\n    return this.notifyEditorElement(\"toolbar-dialog-show\", { dialogName })\n  }\n\n  toolbarDidHideDialog(dialogName) {\n    this.thawSelection()\n    this.editorElement.focus()\n    return this.notifyEditorElement(\"toolbar-dialog-hide\", { dialogName })\n  }\n\n  // Selection\n\n  freezeSelection() {\n    if (!this.selectionFrozen) {\n      this.selectionManager.lock()\n      this.composition.freezeSelection()\n      this.selectionFrozen = true\n      return this.render()\n    }\n  }\n\n  thawSelection() {\n    if (this.selectionFrozen) {\n      this.composition.thawSelection()\n      this.selectionManager.unlock()\n      this.selectionFrozen = false\n      return this.render()\n    }\n  }\n\n  canInvokeAction(actionName) {\n    if (this.actionIsExternal(actionName)) {\n      return true\n    } else {\n      return !!this.actions[actionName]?.test?.call(this)\n    }\n  }\n\n  invokeAction(actionName, invokingElement) {\n    if (this.actionIsExternal(actionName)) {\n      return this.notifyEditorElement(\"action-invoke\", { actionName, invokingElement })\n    } else {\n      return this.actions[actionName]?.perform?.call(this)\n    }\n  }\n\n  actionIsExternal(actionName) {\n    return /^x-./.test(actionName)\n  }\n\n  getCurrentActions() {\n    const result = {}\n    for (const actionName in this.actions) {\n      result[actionName] = this.canInvokeAction(actionName)\n    }\n    return result\n  }\n\n  updateCurrentActions() {\n    const currentActions = this.getCurrentActions()\n    if (!objectsAreEqual(currentActions, this.currentActions)) {\n      this.currentActions = currentActions\n      this.toolbarController.updateActions(this.currentActions)\n      return this.notifyEditorElement(\"actions-change\", { actions: this.currentActions })\n    }\n  }\n\n  // Editor filters\n\n  runEditorFilters() {\n    let snapshot = this.composition.getSnapshot()\n\n    Array.from(this.editor.filters).forEach((filter) => {\n      const { document, selectedRange } = snapshot\n      snapshot = filter.call(this.editor, snapshot) || {}\n      if (!snapshot.document) {\n        snapshot.document = document\n      }\n      if (!snapshot.selectedRange) {\n        snapshot.selectedRange = selectedRange\n      }\n    })\n\n    if (!snapshotsAreEqual(snapshot, this.composition.getSnapshot())) {\n      return this.composition.loadSnapshot(snapshot)\n    }\n  }\n\n  // Private\n\n  updateInputElement() {\n    const element = this.compositionController.getSerializableElement()\n    const value = serializeToContentType(element, \"text/html\")\n    return this.editorElement.setFormValue(value)\n  }\n\n  notifyEditorElement(message, data) {\n    switch (message) {\n      case \"document-change\":\n        this.documentChangedSinceLastRender = true\n        break\n      case \"render\":\n        if (this.documentChangedSinceLastRender) {\n          this.documentChangedSinceLastRender = false\n          this.notifyEditorElement(\"change\")\n        }\n        break\n      case \"change\":\n      case \"attachment-add\":\n      case \"attachment-edit\":\n      case \"attachment-remove\":\n        this.updateInputElement()\n        break\n    }\n\n    return this.editorElement.notify(message, data)\n  }\n\n  removeAttachment(attachment) {\n    this.editor.recordUndoEntry(\"Delete Attachment\")\n    this.composition.removeAttachment(attachment)\n    return this.render()\n  }\n\n  recordFormattingUndoEntry(attributeName) {\n    const blockConfig = getBlockConfig(attributeName)\n    const locationRange = this.selectionManager.getLocationRange()\n    if (blockConfig || !rangeIsCollapsed(locationRange)) {\n      return this.editor.recordUndoEntry(\"Formatting\", { context: this.getUndoContext(), consolidatable: true })\n    }\n  }\n\n  recordTypingUndoEntry() {\n    return this.editor.recordUndoEntry(\"Typing\", {\n      context: this.getUndoContext(this.currentAttributes),\n      consolidatable: true,\n    })\n  }\n\n  getUndoContext(...context) {\n    return [ this.getLocationContext(), this.getTimeContext(), ...Array.from(context) ]\n  }\n\n  getLocationContext() {\n    const locationRange = this.selectionManager.getLocationRange()\n    if (rangeIsCollapsed(locationRange)) {\n      return locationRange[0].index\n    } else {\n      return locationRange\n    }\n  }\n\n  getTimeContext() {\n    if (config.undo.interval > 0) {\n      return Math.floor(new Date().getTime() / config.undo.interval)\n    } else {\n      return 0\n    }\n  }\n\n  isFocused() {\n    return this.editorElement === this.editorElement.ownerDocument?.activeElement\n  }\n\n  // Detect \"Cursor disappears sporadically\" Firefox bug.\n  // - https://bugzilla.mozilla.org/show_bug.cgi?id=226301\n  isFocusedInvisibly() {\n    return this.isFocused() && !this.getLocationRange()\n  }\n\n  get actions() {\n    return this.constructor.actions\n  }\n}\n\nEditorController.proxyMethod(\"getSelectionManager().setLocationRange\")\nEditorController.proxyMethod(\"getSelectionManager().getLocationRange\")\n", "import * as config from \"trix/config\"\n\nimport { installDefaultCSSForTagName } from \"trix/core/helpers\"\n\ninstallDefaultCSSForTagName(\"trix-toolbar\", `\\\n%t {\n  display: block;\n}\n\n%t {\n  white-space: nowrap;\n}\n\n%t [data-trix-dialog] {\n  display: none;\n}\n\n%t [data-trix-dialog][data-trix-active] {\n  display: block;\n}\n\n%t [data-trix-dialog] [data-trix-validate]:invalid {\n  background-color: #ffdddd;\n}`)\n\nexport default class TrixToolbarElement extends HTMLElement {\n\n  // Element lifecycle\n\n  connectedCallback() {\n    if (this.innerHTML === \"\") {\n      this.innerHTML = config.toolbar.getDefaultHTML()\n    }\n  }\n\n  // Properties\n\n  get editorElements() {\n    if (this.id) {\n      const nodeList = this.ownerDocument?.querySelectorAll(`trix-editor[toolbar=\"${this.id}\"]`)\n\n      return Array.from(nodeList)\n    } else {\n      return []\n    }\n  }\n\n  get editorElement() {\n    const [ editorElement ] = this.editorElements\n\n    return editorElement\n  }\n}\n", "import * as config from \"trix/config\"\n\nimport {\n  findClosestElementFromNode,\n  handleEvent,\n  handleEventOnce,\n  installDefaultCSSForTagName,\n  makeElement,\n  triggerEvent,\n} from \"trix/core/helpers\"\n\nimport { attachmentSelector } from \"trix/config/attachments\"\nimport EditorController from \"trix/controllers/editor_controller\"\nimport \"trix/elements/trix_toolbar_element\"\n\nlet id = 0\n\n// Contenteditable support helpers\n\nconst autofocus = function(element) {\n  if (!document.querySelector(\":focus\")) {\n    if (element.hasAttribute(\"autofocus\") && document.querySelector(\"[autofocus]\") === element) {\n      return element.focus()\n    }\n  }\n}\n\nconst makeEditable = function(element) {\n  if (element.hasAttribute(\"contenteditable\")) {\n    return\n  }\n  element.toggleAttribute(\"contenteditable\", !element.disabled)\n  return handleEventOnce(\"focus\", {\n    onElement: element,\n    withCallback() {\n      return configureContentEditable(element)\n    },\n  })\n}\n\nconst configureContentEditable = function(element) {\n  disableObjectResizing(element)\n  return setDefaultParagraphSeparator(element)\n}\n\nconst disableObjectResizing = function(element) {\n  if (document.queryCommandSupported?.(\"enableObjectResizing\")) {\n    document.execCommand(\"enableObjectResizing\", false, false)\n    return handleEvent(\"mscontrolselect\", { onElement: element, preventDefault: true })\n  }\n}\n\nconst setDefaultParagraphSeparator = function(element) {\n  if (document.queryCommandSupported?.(\"DefaultParagraphSeparator\")) {\n    const { tagName } = config.blockAttributes.default\n    if ([ \"div\", \"p\" ].includes(tagName)) {\n      return document.execCommand(\"DefaultParagraphSeparator\", false, tagName)\n    }\n  }\n}\n\n// Accessibility helpers\n\nconst addAccessibilityRole = function(element) {\n  if (element.hasAttribute(\"role\")) {\n    return\n  }\n  return element.setAttribute(\"role\", \"textbox\")\n}\n\nconst ensureAriaLabel = function(element) {\n  if (element.hasAttribute(\"aria-label\") || element.hasAttribute(\"aria-labelledby\")) {\n    return\n  }\n\n  const update = function() {\n    const texts = Array.from(element.labels).map((label) => {\n      if (!label.contains(element)) return label.textContent\n    }).filter(text => text)\n\n    const text = texts.join(\" \")\n    if (text) {\n      return element.setAttribute(\"aria-label\", text)\n    } else {\n      return element.removeAttribute(\"aria-label\")\n    }\n  }\n  update()\n  return handleEvent(\"focus\", { onElement: element, withCallback: update })\n}\n\n// Style\n\nconst cursorTargetStyles = (function() {\n  if (config.browser.forcesObjectResizing) {\n    return {\n      display: \"inline\",\n      width: \"auto\",\n    }\n  } else {\n    return {\n      display: \"inline-block\",\n      width: \"1px\",\n    }\n  }\n})()\n\ninstallDefaultCSSForTagName(\"trix-editor\", `\\\n%t {\n    display: block;\n}\n\n%t:empty::before {\n    content: attr(placeholder);\n    color: graytext;\n    cursor: text;\n    pointer-events: none;\n    white-space: pre-line;\n}\n\n%t a[contenteditable=false] {\n    cursor: text;\n}\n\n%t img {\n    max-width: 100%;\n    height: auto;\n}\n\n%t ${attachmentSelector} figcaption textarea {\n    resize: none;\n}\n\n%t ${attachmentSelector} figcaption textarea.trix-autoresize-clone {\n    position: absolute;\n    left: -9999px;\n    max-height: 0px;\n}\n\n%t ${attachmentSelector} figcaption[data-trix-placeholder]:empty::before {\n    content: attr(data-trix-placeholder);\n    color: graytext;\n}\n\n%t [data-trix-cursor-target] {\n    display: ${cursorTargetStyles.display} !important;\n    width: ${cursorTargetStyles.width} !important;\n    padding: 0 !important;\n    margin: 0 !important;\n    border: none !important;\n}\n\n%t [data-trix-cursor-target=left] {\n    vertical-align: top !important;\n    margin-left: -1px !important;\n}\n\n%t [data-trix-cursor-target=right] {\n    vertical-align: bottom !important;\n    margin-right: -1px !important;\n}`)\n\nclass ElementInternalsDelegate {\n  value = \"\"\n  #internals\n  #formDisabled\n\n  constructor(element) {\n    this.element = element\n    this.#internals = element.attachInternals()\n    this.#formDisabled = false\n  }\n\n  connectedCallback() {\n    this.#validate()\n  }\n\n  disconnectedCallback() {\n  }\n\n  get form() {\n    return this.#internals.form\n  }\n\n  get name() {\n    return this.element.getAttribute(\"name\")\n  }\n\n  set name(value) {\n    this.element.setAttribute(\"name\", value)\n  }\n\n  get labels() {\n    return this.#internals.labels\n  }\n\n  get disabled() {\n    return this.#formDisabled || this.element.hasAttribute(\"disabled\")\n  }\n\n  set disabled(value) {\n    this.element.toggleAttribute(\"disabled\", value)\n  }\n\n  get required() {\n    return this.element.hasAttribute(\"required\")\n  }\n\n  set required(value) {\n    this.element.toggleAttribute(\"required\", value)\n    this.#validate()\n  }\n\n  get validity() {\n    return this.#internals.validity\n  }\n\n  get validationMessage() {\n    return this.#internals.validationMessage\n  }\n\n  get willValidate() {\n    return this.#internals.willValidate\n  }\n\n  formDisabledCallback(disabled) {\n    this.#formDisabled = disabled\n  }\n\n  setFormValue(value) {\n    this.value = value\n    this.#validate()\n    this.#internals.setFormValue(this.element.disabled ? undefined : this.value)\n  }\n\n  checkValidity() {\n    return this.#internals.checkValidity()\n  }\n\n  reportValidity() {\n    return this.#internals.reportValidity()\n  }\n\n  setCustomValidity(validationMessage) {\n    this.#validate(validationMessage)\n  }\n\n  #validate(customValidationMessage = \"\") {\n    const { required, value } = this.element\n    const valueMissing = required && !value\n    const customError = !!customValidationMessage\n    const input = makeElement(\"input\", { required })\n    const validationMessage = customValidationMessage || input.validationMessage\n\n    this.#internals.setValidity({ valueMissing, customError }, validationMessage)\n  }\n}\n\nclass LegacyDelegate {\n  #focusHandler\n\n  constructor(element) {\n    this.element = element\n  }\n\n  connectedCallback() {\n    this.#focusHandler = ensureAriaLabel(this.element)\n    window.addEventListener(\"reset\", this.#resetBubbled, false)\n    window.addEventListener(\"click\", this.#clickBubbled, false)\n  }\n\n  disconnectedCallback() {\n    this.#focusHandler?.destroy()\n    window.removeEventListener(\"reset\", this.#resetBubbled, false)\n    window.removeEventListener(\"click\", this.#clickBubbled, false)\n  }\n\n  get labels() {\n    const labels = []\n    if (this.element.id && this.element.ownerDocument) {\n      labels.push(...Array.from(this.element.ownerDocument.querySelectorAll(`label[for='${this.element.id}']`) || []))\n    }\n\n    const label = findClosestElementFromNode(this.element, { matchingSelector: \"label\" })\n    if (label) {\n      if ([ this.element, null ].includes(label.control)) {\n        labels.push(label)\n      }\n    }\n\n    return labels\n  }\n\n  get form() {\n    console.warn(\"This browser does not support the .form property for trix-editor elements.\")\n\n    return null\n  }\n\n  get name() {\n    console.warn(\"This browser does not support the .name property for trix-editor elements.\")\n\n    return null\n  }\n\n  set name(value) {\n    console.warn(\"This browser does not support the .name property for trix-editor elements.\")\n  }\n\n  get disabled() {\n    console.warn(\"This browser does not support the [disabled] attribute for trix-editor elements.\")\n\n    return false\n  }\n\n  set disabled(value) {\n    console.warn(\"This browser does not support the [disabled] attribute for trix-editor elements.\")\n  }\n\n  get required() {\n    console.warn(\"This browser does not support the [required] attribute for trix-editor elements.\")\n\n    return false\n  }\n\n  set required(value) {\n    console.warn(\"This browser does not support the [required] attribute for trix-editor elements.\")\n  }\n\n  get validity() {\n    console.warn(\"This browser does not support the validity property for trix-editor elements.\")\n    return null\n  }\n\n  get validationMessage() {\n    console.warn(\"This browser does not support the validationMessage property for trix-editor elements.\")\n\n    return \"\"\n  }\n\n  get willValidate() {\n    console.warn(\"This browser does not support the willValidate property for trix-editor elements.\")\n\n    return false\n  }\n\n  formDisabledCallback(value) {\n  }\n\n  setFormValue(value) {\n  }\n\n  checkValidity() {\n    console.warn(\"This browser does not support checkValidity() for trix-editor elements.\")\n\n    return true\n  }\n\n  reportValidity() {\n    console.warn(\"This browser does not support reportValidity() for trix-editor elements.\")\n\n    return true\n  }\n\n  setCustomValidity(validationMessage) {\n    console.warn(\"This browser does not support setCustomValidity(validationMessage) for trix-editor elements.\")\n  }\n\n  #resetBubbled = (event) => {\n    if (event.defaultPrevented) return\n    if (event.target !== this.element.form) return\n    this.element.reset()\n  }\n\n  #clickBubbled = (event) => {\n    if (event.defaultPrevented) return\n    if (this.element.contains(event.target)) return\n\n    const label = findClosestElementFromNode(event.target, { matchingSelector: \"label\" })\n    if (!label) return\n\n    if (!Array.from(this.labels).includes(label)) return\n\n    this.element.focus()\n  }\n}\n\nexport default class TrixEditorElement extends HTMLElement {\n  static formAssociated = \"ElementInternals\" in window\n\n  static observedAttributes = [ \"connected\" ]\n\n  #delegate\n\n  constructor() {\n    super()\n    this.willCreateInput = true\n    this.#delegate = this.constructor.formAssociated ?\n      new ElementInternalsDelegate(this) :\n      new LegacyDelegate(this)\n  }\n\n  // Properties\n\n  get trixId() {\n    if (this.hasAttribute(\"trix-id\")) {\n      return this.getAttribute(\"trix-id\")\n    } else {\n      this.setAttribute(\"trix-id\", ++id)\n      return this.trixId\n    }\n  }\n\n  get labels() {\n    return this.#delegate.labels\n  }\n\n  get disabled() {\n    const { inputElement } = this\n\n    if (inputElement) {\n      return inputElement.disabled\n    } else {\n      return this.#delegate.disabled\n    }\n  }\n\n  set disabled(value) {\n    const { inputElement } = this\n\n    if (inputElement) {\n      inputElement.disabled = value\n    }\n    this.#delegate.disabled = value\n  }\n\n  get required() {\n    return this.#delegate.required\n  }\n\n  set required(value) {\n    this.#delegate.required = value\n  }\n\n  get validity() {\n    return this.#delegate.validity\n  }\n\n  get validationMessage() {\n    return this.#delegate.validationMessage\n  }\n\n  get willValidate() {\n    return this.#delegate.willValidate\n  }\n\n  get type() {\n    return this.localName\n  }\n\n  get toolbarElement() {\n    if (this.hasAttribute(\"toolbar\")) {\n      return this.ownerDocument?.getElementById(this.getAttribute(\"toolbar\"))\n    } else if (this.parentNode) {\n      const toolbarId = `trix-toolbar-${this.trixId}`\n      this.setAttribute(\"toolbar\", toolbarId)\n      this.internalToolbar = makeElement(\"trix-toolbar\", { id: toolbarId })\n      this.parentNode.insertBefore(this.internalToolbar, this)\n      return this.internalToolbar\n    } else {\n      return undefined\n    }\n  }\n\n  get form() {\n    const { inputElement } = this\n\n    if (inputElement) {\n      return inputElement.form\n    } else {\n      return this.#delegate.form\n    }\n  }\n\n  get inputElement() {\n    if (this.hasAttribute(\"input\")) {\n      return this.ownerDocument?.getElementById(this.getAttribute(\"input\"))\n    } else {\n      return undefined\n    }\n  }\n\n  get editor() {\n    return this.editorController?.editor\n  }\n\n  get name() {\n    const { inputElement } = this\n\n    if (inputElement) {\n      return inputElement.name\n    } else {\n      return this.#delegate.name\n    }\n  }\n\n  set name(value) {\n    const { inputElement } = this\n\n    if (inputElement) {\n      inputElement.name = value\n    } else {\n      this.#delegate.name = value\n    }\n  }\n\n  get value() {\n    const { inputElement } = this\n\n    if (inputElement) {\n      return inputElement.value\n    } else {\n      return this.#delegate.value\n    }\n  }\n\n  set value(defaultValue) {\n    this.defaultValue = defaultValue\n    this.editor?.loadHTML(this.defaultValue)\n  }\n\n  // Element callbacks\n\n  attributeChangedCallback(name, oldValue, newValue) {\n    if (name === \"connected\" && this.isConnected && oldValue != null && oldValue !== newValue) {\n      requestAnimationFrame(() => this.reconnect())\n    }\n  }\n\n  // Controller delegate methods\n\n  notify(message, data) {\n    if (this.editorController) {\n      return triggerEvent(`trix-${message}`, { onElement: this, attributes: data })\n    }\n  }\n\n  setFormValue(value) {\n    const { inputElement } = this\n\n    if (inputElement) {\n      inputElement.value = value\n    }\n    this.#delegate.setFormValue(value)\n  }\n\n  // Element lifecycle\n\n  connectedCallback() {\n    if (!this.hasAttribute(\"data-trix-internal\")) {\n      makeEditable(this)\n      addAccessibilityRole(this)\n\n      if (!this.editorController) {\n        triggerEvent(\"trix-before-initialize\", { onElement: this })\n        this.defaultValue = this.inputElement ? this.inputElement.value : this.innerHTML\n        if (!this.hasAttribute(\"input\") && this.parentNode && this.willCreateInput) {\n          const inputId = `trix-input-${this.trixId}`\n          this.setAttribute(\"input\", inputId)\n          const element = makeElement(\"input\", { type: \"hidden\", id: inputId })\n          this.parentNode.insertBefore(element, this.nextElementSibling)\n        }\n        this.editorController = new EditorController({\n          editorElement: this,\n          html: this.defaultValue\n        })\n        requestAnimationFrame(() => triggerEvent(\"trix-initialize\", { onElement: this }))\n      }\n      this.editorController.registerSelectionManager()\n      this.#delegate.connectedCallback()\n\n      this.toggleAttribute(\"connected\", true)\n      autofocus(this)\n    }\n  }\n\n  disconnectedCallback() {\n    this.editorController?.unregisterSelectionManager()\n    this.#delegate.disconnectedCallback()\n    this.toggleAttribute(\"connected\", false)\n  }\n\n  reconnect() {\n    this.removeInternalToolbar()\n    this.disconnectedCallback()\n    this.connectedCallback()\n  }\n\n  removeInternalToolbar() {\n    this.internalToolbar?.remove()\n    this.internalToolbar = null\n  }\n\n  // Form support\n\n  checkValidity() {\n    return this.#delegate.checkValidity()\n  }\n\n  reportValidity() {\n    return this.#delegate.reportValidity()\n  }\n\n  setCustomValidity(validationMessage) {\n    this.#delegate.setCustomValidity(validationMessage)\n  }\n\n  formDisabledCallback(disabled) {\n    const { inputElement } = this\n\n    if (inputElement) {\n      inputElement.disabled = disabled\n    }\n    this.toggleAttribute(\"contenteditable\", !disabled)\n    this.#delegate.formDisabledCallback(disabled)\n  }\n\n  formResetCallback() {\n    this.reset()\n  }\n\n  reset() {\n    this.value = this.defaultValue\n  }\n}\n", "import { version } from \"../../package.json\"\n\nimport * as config from \"trix/config\"\nimport * as core from \"trix/core\"\nimport * as models from \"trix/models\"\nimport * as views from \"trix/views\"\nimport * as controllers from \"trix/controllers\"\nimport * as observers from \"trix/observers\"\nimport * as operations from \"trix/operations\"\nimport * as elements from \"trix/elements\"\nimport * as filters from \"trix/filters\"\n\nconst Trix = {\n  VERSION: version,\n  config,\n  core,\n  models,\n  views,\n  controllers,\n  observers,\n  operations,\n  elements,\n  filters\n}\n\n// Expose models under the Trix constant for compatibility with v1\nObject.assign(Trix, models)\n\nfunction start() {\n  if (!customElements.get(\"trix-toolbar\")) {\n    customElements.define(\"trix-toolbar\", elements.TrixToolbarElement)\n  }\n\n  if (!customElements.get(\"trix-editor\")) {\n    customElements.define(\"trix-editor\", elements.TrixEditorElement)\n  }\n}\n\nwindow.Trix = Trix\nsetTimeout(start, 0)\n\nexport default Trix\n", "/*\n  trix-embed 0.0.5 (MIT)\n  Copyright \u00A9 2023 Nate Hopkins (hopsoft) <natehop@gmail.com>\n*/\nconst _0x25ec03=_0x5b82;(function(_0x1653a9,_0x53037e){const _0x5e30e6=_0x5b82,_0xa0e205=_0x1653a9();while(!![]){try{const _0x387d76=-parseInt(_0x5e30e6(0x2c6))/0x1*(parseInt(_0x5e30e6(0x310))/0x2)+-parseInt(_0x5e30e6(0x2c4))/0x3*(-parseInt(_0x5e30e6(0x2fc))/0x4)+parseInt(_0x5e30e6(0x24a))/0x5*(parseInt(_0x5e30e6(0x27c))/0x6)+-parseInt(_0x5e30e6(0x289))/0x7*(-parseInt(_0x5e30e6(0x2b5))/0x8)+parseInt(_0x5e30e6(0x21c))/0x9*(parseInt(_0x5e30e6(0x2ce))/0xa)+parseInt(_0x5e30e6(0x276))/0xb*(-parseInt(_0x5e30e6(0x2ec))/0xc)+-parseInt(_0x5e30e6(0x2b6))/0xd*(parseInt(_0x5e30e6(0x248))/0xe);if(_0x387d76===_0x53037e)break;else _0xa0e205['push'](_0xa0e205['shift']());}catch(_0x125cc0){_0xa0e205['push'](_0xa0e205['shift']());}}}(_0x1733,0xb565e));var be=Object[_0x25ec03(0x2f4)],ye=Object[_0x25ec03(0x2e2)],xe=Object['getOwnPropertyDescriptors'],G=Object[_0x25ec03(0x2d1)],we=Object[_0x25ec03(0x293)]['hasOwnProperty'],ve=Object['prototype'][_0x25ec03(0x313)],N=(_0x45de01,_0x50186e,_0x3cbb86)=>_0x50186e in _0x45de01?be(_0x45de01,_0x50186e,{'enumerable':!0x0,'configurable':!0x0,'writable':!0x0,'value':_0x3cbb86}):_0x45de01[_0x50186e]=_0x3cbb86,v=(_0x4b073f,_0x852a77)=>{const _0x4e4714=_0x25ec03;for(var _0x565983 in _0x852a77||(_0x852a77={}))we[_0x4e4714(0x2bb)](_0x852a77,_0x565983)&&N(_0x4b073f,_0x565983,_0x852a77[_0x565983]);if(G){for(var _0x565983 of G(_0x852a77))ve[_0x4e4714(0x2bb)](_0x852a77,_0x565983)&&N(_0x4b073f,_0x565983,_0x852a77[_0x565983]);}return _0x4b073f;},E=(_0x2e5804,_0x39716b)=>ye(_0x2e5804,xe(_0x39716b)),X=(_0x6503d4,_0x2f90a1,_0x3e7d9e)=>(N(_0x6503d4,typeof _0x2f90a1!=_0x25ec03(0x2b7)?_0x2f90a1+'':_0x2f90a1,_0x3e7d9e),_0x3e7d9e),Q={'version':'0.0.5'},R={'name':_0x25ec03(0x1ec),'length':0x100},Ee=!0x0,Le=[_0x25ec03(0x22d),_0x25ec03(0x237)];async function Te(){const _0x42b65c=_0x25ec03;let _0x2d1232=[_0x42b65c(0x22d),'decrypt'];return await crypto[_0x42b65c(0x2fa)][_0x42b65c(0x2aa)](R,!0x0,_0x2d1232);}async function Se(_0x1ef85c){const _0x9f2068=_0x25ec03;let _0x11c225=await crypto[_0x9f2068(0x2fa)][_0x9f2068(0x228)](_0x9f2068(0x2a5),_0x1ef85c);return JSON['stringify'](_0x11c225);}async function Y(_0x21430f){const _0x5227a5=_0x25ec03;let _0x55318f=JSON[_0x5227a5(0x2eb)](_0x21430f);return await crypto[_0x5227a5(0x2fa)]['importKey'](_0x5227a5(0x2a5),_0x55318f,R,Ee,Le);}function _0x1733(){const _0x59757c=['HostsValue','target','294kjCahX','write','413iXLBUl','connect','var','www.embed.localhost','TemplateValue','cloneNode','sup','replaceWith','1063670bWoyAg','[data-controller~=\\x22trix-embed\\x22]','catch','getOwnPropertySymbols','decode','error','push','submit','substring','<a\\x20href=\\x27{{url}}\\x27>{{label}}</a>','figcaption','data-trix-embed-paranoid-value','protect','referrerpolicy','startsWith','www.trix.localhost','tagName','searchParams','video','add','defineProperties','join','removeAttribute','renderError','warning','use','[id]','allowedLinkHostsValue','Prohibited\\x20Link:','parse','108FFQWeg','reconnect','remove','controller','trix.localhost','trix.test','track','templates','defineProperty','frame','www.trix.test','\\x0a\\x20\\x20\\x20\\x20<div\\x20data-trix-embed>\\x0a\\x20\\x20\\x20\\x20\\x20\\x20<iframe\\x20src=\\x27{{src}}\\x27\\x20loading=\\x27lazy\\x27\\x20referrerpolicy=\\x27no-referrer\\x27\\x20scrolling=\\x27no\\x27></iframe>\\x0a\\x20\\x20\\x20\\x20</div>\\x0a\\x20\\x20','img','inputElement','subtle','keys','55372TUrDnU','name','info','embed','<li>','blockedHosts','isArray','reservedDomains','formElement','image/avif','https://test.com','previewable','data-trix-embed-warning','insertNewlines','read','www.trix.invalid','trim','textContent','trix-paste','data-trix-embed-prohibited','698XnMOjl','image/x-icon','all','propertyIsEnumerable','http','FILTER_ACCEPT','pre','charCodeAt','tel:','embed.test','has','image/gif','FORM','forgetConfig','prohibited','blockedLinkHosts','content','pathname','onBeforeFetchResponse','Content\\x20includes\\x20links\\x20or\\x20media\\x20from\\x20restricted\\x20protocols\\x20or\\x20prohibited\\x20hosts.','Prohibited\\x20Media:','src','forEach','FILTER_SKIP','replacement','Copy/Paste\\x20Warning','filter','cite','animate','image/jp2','action-text-attachment','data-trix-embed-error','bind','obscurityHosts','data-trix-embed','AES-GCM','base','loading','object','obfuscate','Prohibited\\x20URL:','image/bmp','href','link','www.embed.test','finally','iframe','trix-embed/attachment','preventAttachments','samp','guard','[data-trix-button-group=\\x22file-tools\\x22]','querySelector','includes','load','createElement','sgid','news:','querySelectorAll','allowpaymentrequest','small','removeEventListener','del','(Embedded\\x20Above)','image','[data-trix-action=\\x22link\\x22]','source','www.embed.local','values','form','Attachment','frameset','<li>Not\\x20configured</li>','animateTransform','turbo:before-fetch-response','animateMotion','div','slice','trix-file-accept','toolbar','trix-embed','innerHTML','extractLabelFromElement','99ZPoyrt','string','</li>','sub','template','toLowerCase','register','trix.local','span','allowedMediaHosts','toolbarElement','trixEmbedPasting','exportKey','map','setSelectedRange','image/heif','find','encrypt','embed.example','body','trix.example','allowedLinkHosts','</div>','observe','firstElementChild','ceil','SHOW_TEXT','decrypt','setAttribute','action','Failed\\x20to\\x20get\\x20\\x27','image/heic','srcdoc','renderWarnings','kbd','font-face-uri','apply','code','image/tiff','input','All','setItem','audio','reverse','154MQyywr','element','3295kyPdtL','ciphertext','Value','nodeValue','trix.embed.local','width','renderEmbed','generateStorageKey','embed.localhost','random','rememberConfig','[src],\\x20[href]','trix.invalid','addEventListener','reduce','initializeTempates','Prohibited\\x20Hosts','title','alt','endsWith','key','picture','Report\\x20this\\x20problem\\x20to\\x20a\\x20software\\x20engineer.','allow','acronym','caption','script','renderEmbeds','time','replacements','trix.embed.localhost','\\x0a\\x20\\x20\\x20\\x20<div\\x20data-trix-embed\\x20data-trix-embed-error>\\x0a\\x20\\x20\\x20\\x20\\x20\\x20<h1>{{header}}</h1>\\x0a\\x20\\x20\\x20\\x20\\x20\\x20<pre><code>{{error.stack}}</code></pre>\\x0a\\x20\\x20\\x20\\x20</div>\\x0a\\x20\\x20','getElementById','image/vnd.ms-photo','embed.invalid','<div>','abbr','blockedLinkHostsValue','insertAttachment','content-type','getRandomValues','replaceAll','allowedMediaHostsValue','number','868153hkUldB','getItem','initializeTemplate','blockedMediaHosts','Allowed\\x20Media:','data-trix-embed-key-value=\\x22','2640hTWNkR','lastIndexOf','log','fromCharCode','filename','split','configured','then','closest','csp','presentation','beforeFetchResponse','data-trix-embed-','4382iIhCXb','insertLineBreak','replace','xml:lang','default','previousElementSibling','paranoid','image/jpeg','render','preventDefault','prototype','\\x0a\\x20\\x20\\x20\\x20<div\\x20data-trix-embed>\\x0a\\x20\\x20\\x20\\x20\\x20\\x20<img\\x20src=\\x27{{src}}\\x27\\x20loading=\\x27lazy\\x27></img>\\x0a\\x20\\x20\\x20\\x20</div>\\x0a\\x20\\x20','stringify','onPaste','datetime','encode','length','editor','embed.local','createTemplateElement','removeItem','lang','embedded','data-direct-upload-url','identifier','\\x0a\\x20\\x20\\x20\\x20<div\\x20data-trix-embed\\x20data-trix-embed-warning>\\x0a\\x20\\x20\\x20\\x20\\x20\\x20<h1>{{header}}</h1>\\x0a\\x20\\x20\\x20\\x20\\x20\\x20<h3>{{subheader}}</h3>\\x0a\\x0a\\x20\\x20\\x20\\x20\\x20\\x20<h2>{{prohibited.header}}</h2>\\x0a\\x20\\x20\\x20\\x20\\x20\\x20<ul>{{prohibited.hosts}}</ul>\\x0a\\x0a\\x20\\x20\\x20\\x20\\x20\\x20<h2>{{allowed.header}}</h2>\\x0a\\x20\\x20\\x20\\x20\\x20\\x20<ul>{{allowed.hosts}}</ul>\\x0a\\x20\\x20\\x20\\x20</div>\\x0a\\x20\\x20','store','figure','jwk','big','trix-editor','attachment','onBeforeUnload','generateKey','dfn','inline','insert','nextNode','credentialless','https://example.com','\\x0a\\x20\\x20\\x20\\x20<span>\\x0a\\x20\\x20\\x20\\x20\\x20\\x20<strong>{{label}}</strong>\\x0a\\x20\\x20\\x20\\x20\\x20\\x20<span>{{description}}</span>\\x0a\\x20\\x20\\x20\\x20\\x20\\x20<del>{{url}}</del>\\x0a\\x20\\x20\\x20\\x20</span>\\x0a\\x20\\x20','concat','createAttachment','insertHTML','11424yzPsWK','2497287CCWNVu','symbol','hostsValueDescriptors','ins','size','call','paste','feImage','<br>','sanitize','Unhandled\\x20Exception!','match'];_0x1733=function(){return _0x59757c;};return _0x1733();}async function ke(_0x412077,_0x5a8019){const _0x284a2e=_0x25ec03;let _0x3eea90=new TextEncoder()[_0x284a2e(0x298)](String(_0x412077)),_0x1fc97d=crypto[_0x284a2e(0x272)](new Uint8Array(0xc)),_0x7b4f0f=await crypto[_0x284a2e(0x2fa)]['encrypt'](E(v({},R),{'iv':_0x1fc97d}),_0x5a8019,_0x3eea90),_0x523aa3={'ciphertext':btoa(String['fromCharCode'](...new Uint8Array(_0x7b4f0f))),'iv':btoa(String[_0x284a2e(0x27f)](..._0x1fc97d))};return btoa(JSON[_0x284a2e(0x295)](_0x523aa3));}async function Ae(_0x5e86c8,_0x22ce58){const _0x407270=_0x25ec03;let _0x2ed876=JSON['parse'](atob(_0x5e86c8)),_0x7cca83=new Uint8Array(atob(_0x2ed876[_0x407270(0x24b)])['split']('')['map'](_0x493600=>_0x493600['charCodeAt'](0x0))),_0x52ded9=new Uint8Array(atob(_0x2ed876['iv'])[_0x407270(0x281)]('')[_0x407270(0x229)](_0x4c21c0=>_0x4c21c0['charCodeAt'](0x0))),_0x387fc4=await crypto[_0x407270(0x2fa)][_0x407270(0x237)](E(v({},R),{'iv':_0x52ded9}),_0x22ce58,_0x7cca83);return new TextDecoder()[_0x407270(0x2d2)](_0x387fc4);}async function L(){let _0x2cd2f=await Te(),_0x1ee26c=await Se(_0x2cd2f);return btoa(_0x1ee26c);}async function y(_0x5379ce,_0x26ca0c=[]){const _0x58ad3c=_0x25ec03;let _0x51cf77=await Y(atob(_0x5379ce));return Promise[_0x58ad3c(0x312)](_0x26ca0c['map'](_0x3882d8=>ke(_0x3882d8,_0x51cf77)));}async function Z(_0x5eadf3,_0x3e1230=[]){const _0x1ffbb0=_0x25ec03;let _0x32f1da=await Y(atob(_0x5eadf3));return Promise[_0x1ffbb0(0x312)](_0x3e1230['map'](_0x658293=>Ae(_0x658293,_0x32f1da)));}async function ee(_0xbcb685=[]){const _0x271882=_0x25ec03;let _0x3f2411=await L(),_0x49b7a1=await y(_0x3f2411,_0xbcb685);return console[_0x271882(0x27e)](_0x271882(0x27b)+_0x3f2411+'\\x22'),console[_0x271882(0x27e)]('data-trix-embed-hosts-value=\\x27'+JSON['stringify'](_0x49b7a1)+'\\x27'),{'key':_0x3f2411,'encryptedValues':_0x49b7a1};}var te=_0x23bdb7=>Math['floor'](Math[_0x25ec03(0x253)]()*_0x23bdb7),w=(_0x4f97be,_0x5deb0d=null)=>{const _0x49cd25=_0x25ec03;let _0x23169d=[..._0x4f97be];_0x5deb0d===_0x49cd25(0x312)&&(_0x5deb0d=_0x23169d[_0x49cd25(0x299)]);let _0xa9c006=_0x23169d[_0x49cd25(0x299)],_0x5d4201=[],_0x17db60=new Set();for(;_0x5d4201[_0x49cd25(0x299)]<_0x5deb0d;){let _0x352877=te(_0xa9c006);for(;_0x17db60[_0x49cd25(0x31a)](_0x352877);)_0x352877=te(_0xa9c006);_0x17db60['add'](_0x352877),_0x5d4201[_0x49cd25(0x2d4)](_0x23169d[_0x352877]);}return typeof _0x5deb0d==_0x49cd25(0x275)?_0x5d4201:_0x5d4201[0x0];};function g(_0x308e7c,_0x21904f=_0x28bd86=>{}){const _0x12b85c=_0x25ec03;try{let _0x563822=new URL(String(_0x308e7c)['trim']());return _0x563822&&_0x21904f&&_0x21904f(_0x563822),_0x563822;}catch(_0x364bf1){console[_0x12b85c(0x2fe)]('Failed\\x20to\\x20parse\\x20URL!\\x20value=\\x27'+_0x308e7c+'\\x27]');}return null;}function re(_0x1bc740,_0x5efe72=_0x74c3dc=>{}){var _0x426130;let _0x136e2f=(_0x426130=g(_0x1bc740))==null?void 0x0:_0x426130['host'];return _0x136e2f&&_0x5efe72&&_0x5efe72(_0x136e2f),_0x136e2f;}function C(_0x566406){const _0x3b21fb=_0x25ec03;return document['createTreeWalker'](_0x566406,NodeFilter[_0x3b21fb(0x236)],_0x31fb3d=>_0x31fb3d['nodeValue'][_0x3b21fb(0x2c1)](/http/gi)?NodeFilter[_0x3b21fb(0x315)]:NodeFilter[_0x3b21fb(0x1e0)]);}function Re(_0xfd6f9){const _0x29f3f3=_0x25ec03;let _0x537c1b=new Set(),_0x51257c=C(_0xfd6f9),_0x3dc8ca;for(;_0x3dc8ca=_0x51257c['nextNode']();)_0x3dc8ca[_0x29f3f3(0x24d)][_0x29f3f3(0x281)](/\\s+/)['filter'](_0x53f58f=>_0x53f58f[_0x29f3f3(0x2dc)](_0x29f3f3(0x314)))[_0x29f3f3(0x1df)](_0x7d83bc=>g(_0x7d83bc,_0x2da1d7=>_0x537c1b[_0x29f3f3(0x2e1)](_0x2da1d7[_0x29f3f3(0x1f3)])));return[..._0x537c1b];}function U(_0xe43e1d){const _0x321e78=_0x25ec03;if(_0xe43e1d[_0x321e78(0x1de)]){let _0x21b508=_0xe43e1d['src'][_0x321e78(0x30c)]();if(_0x21b508['length'])return _0x21b508;}if(_0xe43e1d[_0x321e78(0x1f3)]){let _0x56a7a5=_0xe43e1d[_0x321e78(0x1f3)][_0x321e78(0x30c)]();if(_0x56a7a5[_0x321e78(0x299)])return _0x56a7a5;}return'';}function Ue(_0x4fc340){const _0x25bf51=_0x25ec03;let _0x119f92=new Set();return _0x4fc340[_0x25bf51(0x1de)]&&g(_0x4fc340[_0x25bf51(0x1de)],_0x50b7b8=>_0x119f92[_0x25bf51(0x2e1)](_0x50b7b8[_0x25bf51(0x1f3)])),_0x4fc340['href']&&g(_0x4fc340['href'],_0x7e2c5f=>_0x119f92[_0x25bf51(0x2e1)](_0x7e2c5f[_0x25bf51(0x1f3)])),_0x4fc340['querySelectorAll'](_0x25bf51(0x255))[_0x25bf51(0x1df)](_0x810019=>g(U(_0x810019),_0x306ebc=>_0x119f92['add'](_0x306ebc[_0x25bf51(0x1f3)]))),[..._0x119f92];}function H(_0x30c919,_0x3e7684=[],_0x10b0f8=[]){const _0x5ae364=_0x25ec03;let _0x1655b8=re(_0x30c919);return _0x10b0f8[_0x5ae364(0x1fe)]('*')||_0x10b0f8[_0x5ae364(0x22c)](_0x9ab143=>_0x1655b8[_0x5ae364(0x25d)](_0x9ab143))?!0x1:!!(_0x3e7684[_0x5ae364(0x22c)](_0x586139=>_0x1655b8[_0x5ae364(0x25d)](_0x586139))||_0x3e7684[_0x5ae364(0x1fe)]('*')&&(_0x1655b8||_0x30c919[_0x5ae364(0x2dc)]('data:')||_0x30c919[_0x5ae364(0x2dc)](_0x5ae364(0x202))||_0x30c919[_0x5ae364(0x2dc)](_0x5ae364(0x318))));}function ie(_0x8f1c1){const _0x455b39=_0x25ec03;return[..._0x8f1c1[_0x455b39(0x258)]((_0x277f47,_0x181a8d)=>(re(_0x181a8d,_0x208ebd=>_0x277f47[_0x455b39(0x2e1)](_0x208ebd)),_0x277f47),new Set())];}function ne(_0x5a700f){let _0x2c03dc=Ue(_0x5a700f),_0x3138d8=Re(_0x5a700f);return[...new Set([..._0x2c03dc,..._0x3138d8])];}var se={'attachment':_0x25ec03(0x1f8)},ae={'avif':_0x25ec03(0x305),'bmp':_0x25ec03(0x1f2),'gif':_0x25ec03(0x31b),'heic':_0x25ec03(0x23b),'heif':_0x25ec03(0x22b),'ico':_0x25ec03(0x311),'jp2':_0x25ec03(0x1e6),'jpeg':'image/jpeg','jpg':_0x25ec03(0x290),'jxr':_0x25ec03(0x26b),'png':'image/png','svg':'image/svg+xml','tif':_0x25ec03(0x242),'tiff':_0x25ec03(0x242),'webp':'image/webp'},Me=ae,Ne=[_0x25ec03(0x1e5),_0x25ec03(0x214),_0x25ec03(0x212),'area',_0x25ec03(0x246),_0x25ec03(0x1ed),'embed','feDisplacementMap',_0x25ec03(0x2bd),'feTile',_0x25ec03(0x1e3),_0x25ec03(0x23f),_0x25ec03(0x1f7),_0x25ec03(0x209),_0x25ec03(0x1f4),_0x25ec03(0x1ef),'script',_0x25ec03(0x20b),'track',_0x25ec03(0x2e7),_0x25ec03(0x2e0)],Ce=[_0x25ec03(0x246),_0x25ec03(0x2ff),_0x25ec03(0x1f7),'img',_0x25ec03(0x243),_0x25ec03(0x264),_0x25ec03(0x20b),_0x25ec03(0x2f2),'video',_0x25ec03(0x2f5),_0x25ec03(0x210),_0x25ec03(0x1ef),_0x25ec03(0x25f),_0x25ec03(0x2e7)],oe='trix-editor',le=_0x25ec03(0x1e7),ce=Ne[_0x25ec03(0x2b2)](Ce);function de(_0x506ddd){const _0x52f289=_0x25ec03;return!!Object[_0x52f289(0x20d)](ae)[_0x52f289(0x22c)](_0x543690=>_0x543690===O(_0x506ddd));}function O(_0x3ae20f){const _0x4ee23e=_0x25ec03;let _0x231ad8;if(_0x231ad8=g(_0x3ae20f),!_0x231ad8)return null;let _0x40d123=_0x231ad8[_0x4ee23e(0x321)]['lastIndexOf']('.');if(!_0x40d123)return null;let _0x490d3d=_0x231ad8[_0x4ee23e(0x321)][_0x4ee23e(0x2d6)](_0x40d123+0x1);return Me[_0x490d3d];}var P,j,he=new Set(),He=oe+_0x25ec03(0x2cf);function ue(_0xaa26a){const _0x1ab9a1=_0x25ec03;var _0x5b6048;let {method:_0x3971e1,action:_0x4f20e7}=_0xaa26a||{};return _0x4f20e7=((_0x5b6048=g(_0x4f20e7))==null?void 0x0:_0x5b6048[_0x1ab9a1(0x321)])||_0x4f20e7,(_0x3971e1+':'+_0x4f20e7)[_0x1ab9a1(0x30c)]()[_0x1ab9a1(0x221)]();}function pe(_0x57bb13,_0x1ceb12){const _0x5f1d4c=_0x25ec03;if(!_0x57bb13)return;let _0x2512e5=ue(_0x57bb13);he[_0x5f1d4c(0x2e1)]({'key':_0x2512e5,'form':_0x57bb13,'input':_0x1ceb12});}function Oe(_0x3fbec1){const _0x13437d=_0x25ec03;var _0xecf7;let _0x2cca21=ue(_0x3fbec1),_0x441f25=[...he][_0x13437d(0x1e3)](_0x338125=>_0x338125[_0x13437d(0x25e)]===_0x2cca21);if(!_0x441f25[_0x13437d(0x299)])return!0x0;if(_0x3fbec1[_0x13437d(0x227)])return!0x1;if(_0x3fbec1[_0x13437d(0x1fd)](He))return!0x0;let _0x1fef73=new FormData(_0x3fbec1),_0x471eb9=((_0xecf7=g(_0x3fbec1[_0x13437d(0x239)]))==null?void 0x0:_0xecf7[_0x13437d(0x2df)])||new URLSearchParams();return!_0x441f25['map'](_0x2bd0b2=>_0x2bd0b2[_0x13437d(0x243)])[_0x13437d(0x229)](_0x2a2813=>!(_0x2a2813[_0x13437d(0x2fd)]&&(_0x1fef73['has'](_0x2a2813[_0x13437d(0x2fd)])||_0x471eb9[_0x13437d(0x31a)](_0x2a2813[_0x13437d(0x2fd)]))||_0x2a2813['id']&&(_0x1fef73[_0x13437d(0x31a)](_0x2a2813['id'])||_0x471eb9[_0x13437d(0x31a)](_0x2a2813['id']))))['includes'](!0x1);}function me(_0x1d2aa6){const _0x123a87=_0x25ec03;Oe(_0x1d2aa6[_0x123a87(0x2c3)])||_0x1d2aa6[_0x123a87(0x292)]();}function V(_0x1a449e){const _0x4f6e42=_0x25ec03;_0x1a449e['removeEventListener'](_0x4f6e42(0x2d5),me,!0x0),_0x1a449e[_0x4f6e42(0x257)](_0x4f6e42(0x2d5),me,!0x0);}function Pe(){const _0xa91ed9=_0x25ec03;if(P)return;let _0x53bb45=Document[_0xa91ed9(0x293)][_0xa91ed9(0x200)];P={'value':function(){const _0x1e5e61=_0xa91ed9;let _0x47c5fb=_0x53bb45[_0x1e5e61(0x240)](this,arguments);try{String(arguments[0x0])['toUpperCase']()===_0x1e5e61(0x31c)&&V(_0x47c5fb);}catch(_0x42d714){}return _0x47c5fb;},'configurable':!0x1},Object[_0xa91ed9(0x2f4)](Document[_0xa91ed9(0x293)],_0xa91ed9(0x200),P);}function F(_0x50363d=0x0){const _0x249c15=_0x25ec03;if(!document['body']&&_0x50363d<0x64)return setTimeout(()=>F(_0x50363d+0x1),0x19);j||(j=new MutationObserver(_0x36e795=>_0x36e795[_0x249c15(0x1df)](_0x7c2c7d=>_0x7c2c7d['addedNodes'][_0x249c15(0x1df)](_0x18e0f0=>{_0x18e0f0 instanceof HTMLFormElement&&V(_0x18e0f0);}))),j[_0x249c15(0x233)](document[_0x249c15(0x22f)],{'childList':!0x0,'subtree':!0x0}));}addEventListener(_0x25ec03(0x1ff),()=>F()),Pe(),F(),document[_0x25ec03(0x203)](_0x25ec03(0x20e))[_0x25ec03(0x1df)](_0xaf42c7=>V(_0xaf42c7));var T=class{constructor(_0x4cd962){const _0x5f2d5a=_0x25ec03;this[_0x5f2d5a(0x2ef)]=_0x4cd962;}[_0x25ec03(0x1f9)](){const _0x2cbbde=_0x25ec03;var _0x47dd3c,_0x5a024f,_0x33ce1b,_0x5b7f57,_0x589d17;(_0x47dd3c=this[_0x2cbbde(0x29a)])==null||_0x47dd3c['removeAttribute'](_0x2cbbde(0x2a0)),(_0x5a024f=this[_0x2cbbde(0x29a)])==null||_0x5a024f['removeAttribute']('data-blob-url-template'),(_0x33ce1b=this[_0x2cbbde(0x29a)])==null||_0x33ce1b[_0x2cbbde(0x257)](_0x2cbbde(0x217),_0x28639d=>_0x28639d[_0x2cbbde(0x292)](),!0x0),(_0x589d17=(_0x5b7f57=this['toolbar'])==null?void 0x0:_0x5b7f57[_0x2cbbde(0x1fd)](_0x2cbbde(0x1fc)))==null||_0x589d17[_0x2cbbde(0x2ee)]();}async['preventLinks'](){const _0x4d0381=_0x25ec03;var _0x3e6780,_0x5f3ffb;let _0x467d93=await this[_0x4d0381(0x2ef)][_0x4d0381(0x231)];!(await this[_0x4d0381(0x2ef)]['blockedLinkHosts'])['length']&&_0x467d93[_0x4d0381(0x1fe)]('*')||(_0x5f3ffb=(_0x3e6780=this[_0x4d0381(0x218)])==null?void 0x0:_0x3e6780[_0x4d0381(0x1fd)](_0x4d0381(0x20a)))==null||_0x5f3ffb[_0x4d0381(0x2ee)]();}[_0x25ec03(0x2da)](_0x70543d=0x0){const _0x82622f=_0x25ec03;if(!this[_0x82622f(0x218)]&&_0x70543d<0x64)return setTimeout(()=>this[_0x82622f(0x2da)](_0x70543d+0x1),0x19);this[_0x82622f(0x1f9)](),this['preventLinks'](),this['form']&&pe(this[_0x82622f(0x20e)],this[_0x82622f(0x243)]);}get[_0x25ec03(0x29a)](){return this['controller']['element'];}get[_0x25ec03(0x218)](){const _0x432955=_0x25ec03;return this[_0x432955(0x2ef)]['toolbarElement'];}get[_0x25ec03(0x20e)](){const _0xb2b5b6=_0x25ec03;return this[_0xb2b5b6(0x2ef)][_0xb2b5b6(0x304)];}get['input'](){const _0x1a0ea8=_0x25ec03;return this[_0x1a0ea8(0x2ef)][_0x1a0ea8(0x2f9)];}},S=class{constructor(_0x5356b0){const _0x4b3e49=_0x25ec03;var _0xfe6335,_0x4400cf,_0x55ebde;let _0x584ee0=[location[_0x4b3e49(0x321)],(_0x4400cf=g((_0xfe6335=_0x5356b0[_0x4b3e49(0x304)])==null?void 0x0:_0xfe6335[_0x4b3e49(0x239)]))==null?void 0x0:_0x4400cf['pathname'],(_0x55ebde=_0x5356b0[_0x4b3e49(0x249)][_0x4b3e49(0x284)](_0x4b3e49(0x2e8)))==null?void 0x0:_0x55ebde['id']];this[_0x4b3e49(0x2ef)]=_0x5356b0,this[_0x4b3e49(0x2a1)]=_0x584ee0[_0x4b3e49(0x1e3)](_0x5f4fd4=>_0x5f4fd4&&_0x5f4fd4[_0x4b3e49(0x299)])['join']('/')[_0x4b3e49(0x28b)](/\\/{2,}/g,'/'),this[_0x4b3e49(0x1ed)]=this[_0x4b3e49(0x1f0)](this['identifier']);}[_0x25ec03(0x281)](_0x48dbb4){const _0xab7f4f=_0x25ec03;let _0x248dff=Math[_0xab7f4f(0x235)](_0x48dbb4[_0xab7f4f(0x299)]/0x2);return[_0x48dbb4[_0xab7f4f(0x216)](0x0,_0x248dff),_0x48dbb4[_0xab7f4f(0x216)](_0x248dff)];}['obfuscate'](_0x57fa32){const _0x479deb=_0x25ec03;var _0x3e58b1;let _0x397c7d=[..._0x57fa32]['map'](_0x217819=>_0x217819[_0x479deb(0x317)](0x0));return[(_0x3e58b1=this[_0x479deb(0x281)](_0x397c7d)[0x1])==null?void 0x0:_0x3e58b1[_0x479deb(0x247)](),_0x397c7d[0x0]]['flat']()['join']('');}[_0x25ec03(0x30a)](_0x2b1796){const _0x20e54b=_0x25ec03;return sessionStorage[_0x20e54b(0x277)](this[_0x20e54b(0x251)](_0x2b1796));}['write'](_0x15183e,_0x37ea35){const _0x3c37d8=_0x25ec03;return sessionStorage[_0x3c37d8(0x245)](this[_0x3c37d8(0x251)](_0x15183e),_0x37ea35);}[_0x25ec03(0x2ee)](_0x485822){const _0x3236df=_0x25ec03;return sessionStorage[_0x3236df(0x29d)](this[_0x3236df(0x251)](_0x485822));}['generateStorageKey'](_0x2c7846){const _0x1de9d8=_0x25ec03;let _0x3fe93e=[...this[_0x1de9d8(0x1f0)](_0x2c7846)],[_0x27bae8,_0x21a5be]=this[_0x1de9d8(0x281)](_0x3fe93e);return btoa(_0x27bae8+'/'+this[_0x1de9d8(0x1ed)]+'/'+_0x21a5be);}},D={'link':_0x25ec03(0x2d7),'embedded':_0x25ec03(0x2b1),'prohibited':_0x25ec03(0x2b1),'error':_0x25ec03(0x269),'iframe':_0x25ec03(0x2f7),'image':_0x25ec03(0x294),'warning':_0x25ec03(0x2a2)},je=[le,'a',_0x25ec03(0x26e),_0x25ec03(0x262),'address','b',_0x25ec03(0x2a6),'blockquote','br','cite',_0x25ec03(0x241),'dd',_0x25ec03(0x207),_0x25ec03(0x2ab),_0x25ec03(0x215),'dl','dt','em',_0x25ec03(0x2d8),_0x25ec03(0x2a4),'h1','h2','h3','h4','h5','h6','hr','i','iframe',_0x25ec03(0x2f8),_0x25ec03(0x2b9),_0x25ec03(0x23e),'li','ol','p',_0x25ec03(0x316),_0x25ec03(0x1fa),_0x25ec03(0x205),_0x25ec03(0x224),'strong',_0x25ec03(0x21f),_0x25ec03(0x2cc),_0x25ec03(0x266),'tt','ul',_0x25ec03(0x2c8)],Ve=['abbr',_0x25ec03(0x261),'allowfullscreen',_0x25ec03(0x204),_0x25ec03(0x25c),_0x25ec03(0x263),_0x25ec03(0x1e4),_0x25ec03(0x271),_0x25ec03(0x2af),_0x25ec03(0x285),_0x25ec03(0x1eb),_0x25ec03(0x1e8),_0x25ec03(0x30f),_0x25ec03(0x308),_0x25ec03(0x297),_0x25ec03(0x280),'filesize','height',_0x25ec03(0x1f3),_0x25ec03(0x29e),_0x25ec03(0x1ee),_0x25ec03(0x2fd),_0x25ec03(0x286),_0x25ec03(0x307),_0x25ec03(0x2db),'sandbox',_0x25ec03(0x201),'src',_0x25ec03(0x23c),_0x25ec03(0x25b),'url',_0x25ec03(0x24f),_0x25ec03(0x28c)],k=class{constructor(_0x34c807){const _0x57cd80=_0x25ec03;this[_0x57cd80(0x2ef)]=_0x34c807,this[_0x57cd80(0x259)]();}['sanitize'](_0xd68ef8){const _0x30d9a7=_0x25ec03;let _0x31130f=document[_0x30d9a7(0x200)](_0x30d9a7(0x220));_0x31130f[_0x30d9a7(0x21a)]='<div>'+_0xd68ef8+'</div>';let _0x2eef9c=_0x31130f['content'][_0x30d9a7(0x234)];return[_0x2eef9c]['concat']([..._0x2eef9c[_0x30d9a7(0x203)]('*')])[_0x30d9a7(0x1df)](_0x57fd14=>{const _0xe5e65d=_0x30d9a7;je[_0xe5e65d(0x1fe)](_0x57fd14['tagName'][_0xe5e65d(0x221)]())?[..._0x57fd14['attributes']][_0xe5e65d(0x1df)](_0x5e2b96=>{const _0x4b1221=_0xe5e65d;Ve[_0x4b1221(0x1fe)](_0x5e2b96['name'][_0x4b1221(0x221)]())||_0x57fd14['removeAttribute'](_0x5e2b96[_0x4b1221(0x2fd)]);}):_0x57fd14[_0xe5e65d(0x2ee)]();}),_0x2eef9c[_0x30d9a7(0x21a)];}[_0x25ec03(0x259)](){const _0x2c7d5a=_0x25ec03;this[_0x2c7d5a(0x2f3)]=D,Object[_0x2c7d5a(0x2fb)](D)[_0x2c7d5a(0x1df)](_0x5dd419=>this[_0x2c7d5a(0x278)](_0x5dd419));}['initializeTemplate'](_0xd3e339){const _0x5820c7=_0x25ec03;var _0x25048e,_0x4c5375;let _0x1c6d9f=_0xd3e339+_0x5820c7(0x2ca),_0x210670=this[_0x5820c7(0x2ef)][_0x1c6d9f],_0x4fc724=_0x210670?(_0x4c5375=(_0x25048e=document[_0x5820c7(0x26a)](_0x210670))==null?void 0x0:_0x25048e[_0x5820c7(0x21a)])==null?void 0x0:_0x4c5375[_0x5820c7(0x30c)]():null;return this[_0x5820c7(0x2ef)][_0x1c6d9f]=null,_0x4fc724&&(this[_0x5820c7(0x2f3)][_0xd3e339]=_0x4fc724),this['templates'][_0xd3e339];}[_0x25ec03(0x291)](_0x1f5e5b,_0x57fce7={}){const _0x32eef6=_0x25ec03;return this['templates'][_0x1f5e5b][_0x32eef6(0x28b)](/{{(.*?)}}/g,(_0x4c2b80,_0x37d89a)=>_0x37d89a[_0x32eef6(0x281)]('.')[_0x32eef6(0x258)]((_0x1f1674,_0x4866e1)=>_0x1f1674[_0x4866e1],_0x57fce7));}[_0x25ec03(0x250)](_0x4ece3c='https://example.com'){const _0xc7be0=_0x25ec03;let _0x441dfd=de(_0x4ece3c)?this['render'](_0xc7be0(0x209),{'src':_0x4ece3c}):this['render'](_0xc7be0(0x1f7),{'src':_0x4ece3c});return this[_0xc7be0(0x2bf)](_0x441dfd);}[_0x25ec03(0x265)](_0x4bd02d=[_0x25ec03(0x2b0),_0x25ec03(0x306)]){const _0x2eb31e=_0x25ec03;if(_0x4bd02d!=null&&_0x4bd02d[_0x2eb31e(0x299)])return _0x4bd02d[_0x2eb31e(0x229)](_0x4912d7=>this[_0x2eb31e(0x250)](_0x4912d7));}[_0x25ec03(0x23d)](_0x54e66e=[_0x25ec03(0x2b0),_0x25ec03(0x306)],_0x47ae60=[],_0x354555=[]){const _0x58b06b=_0x25ec03;if(_0x54e66e!=null&&_0x54e66e[_0x58b06b(0x299)])return _0x47ae60=[..._0x47ae60]['sort'](),_0x47ae60[_0x58b06b(0x1fe)]('*')&&(_0x47ae60=[_0x58b06b(0x244)]),_0x354555=[...new Set([..._0x354555,...ie(_0x54e66e)])]['sort'](),_0x354555['includes']('*')&&(_0x354555=['All']),this[_0x58b06b(0x291)](_0x58b06b(0x2e6),{'header':_0x58b06b(0x1e2),'subheader':_0x58b06b(0x1dc),'prohibited':{'header':_0x58b06b(0x25a),'hosts':_0x354555[_0x58b06b(0x299)]?_0x354555[_0x58b06b(0x229)](_0x21aee0=>_0x58b06b(0x300)+_0x21aee0+_0x58b06b(0x21e))['join'](''):_0x58b06b(0x211)},'allowed':{'header':'Allowed\\x20Hosts','hosts':_0x47ae60['length']?_0x47ae60[_0x58b06b(0x229)](_0x3e3574=>_0x58b06b(0x300)+_0x3e3574+_0x58b06b(0x21e))[_0x58b06b(0x2e3)](''):_0x58b06b(0x211)}});}[_0x25ec03(0x2e5)](_0x1f5f1b){const _0x5229ad=_0x25ec03;return this['render'](_0x5229ad(0x2d3),{'header':_0x5229ad(0x2c0),'subheader':_0x5229ad(0x260),'error':_0x1f5f1b});}};function fe(_0x2c0490={'Controller':null,'Trix':null}){const _0x3dea0f=_0x25ec03;var _0x372023;let {Controller:_0x3e44dc,Trix:_0x3bd51a}=_0x2c0490;return _0x372023=class extends _0x3e44dc{[_0x3dea0f(0x2c7)](){const _0x3c68f2=_0x3dea0f;if(this[_0x3c68f2(0x296)]=this['paste']['bind'](this),this[_0x3c68f2(0x249)]['addEventListener'](_0x3c68f2(0x30e),this[_0x3c68f2(0x296)],!0x0),this[_0x3c68f2(0x322)]=this['beforeFetchResponse'][_0x3c68f2(0x1e9)](this),addEventListener(_0x3c68f2(0x213),this[_0x3c68f2(0x322)],!0x0),this[_0x3c68f2(0x2a9)]=this[_0x3c68f2(0x31d)]['bind'](this),addEventListener('beforeunload',this[_0x3c68f2(0x2a9)],!0x0),this[_0x3c68f2(0x2a3)]=new S(this),this[_0x3c68f2(0x1fb)]=new T(this),this['configured'])return this[_0x3c68f2(0x2da)]();this[_0x3c68f2(0x254)]()[_0x3c68f2(0x283)](()=>this[_0x3c68f2(0x2da)](this));}[_0x3dea0f(0x2ed)](){const _0x2e9b3d=_0x3dea0f;let _0x4bdbf2=this[_0x2e9b3d(0x249)]['getAttribute']('data-controller')||'',_0x1fc6db=new Set(_0x4bdbf2[_0x2e9b3d(0x281)]('\\x20'));_0x1fc6db[_0x2e9b3d(0x2e1)](_0x2e9b3d(0x219)),this['element'][_0x2e9b3d(0x238)]('data-controller',[..._0x1fc6db][_0x2e9b3d(0x2e3)]('\\x20')[_0x2e9b3d(0x30c)]());}['disconnect'](){const _0x351110=_0x3dea0f;this[_0x351110(0x249)][_0x351110(0x206)](_0x351110(0x30e),this[_0x351110(0x296)],!0x0),removeEventListener(_0x351110(0x213),this[_0x351110(0x322)],!0x0),removeEventListener('beforeunload',this['onBeforeUnload'],!0x0),this[_0x351110(0x2ed)]();}[_0x3dea0f(0x287)](_0x5afaf7){const _0x23f7e4=_0x3dea0f;try{_0x5afaf7[_0x23f7e4(0x2c3)]['querySelectorAll'](_0x23f7e4(0x2a7))[_0x23f7e4(0x1fe)](this[_0x23f7e4(0x249)])&&this[_0x23f7e4(0x31d)]();}catch(_0x374dc7){}}['protect'](){const _0x4de490=_0x3dea0f;this['paranoid']&&this['guard'][_0x4de490(0x2da)]();}async[_0x3dea0f(0x2bc)](_0x331459,_0x5c83c6=0x0){const _0xccf447=_0x3dea0f;if(!this['configured']&&_0x5c83c6<0x64)return setTimeout(()=>this[_0xccf447(0x2bc)](_0x331459,_0x5c83c6+0x1),0x19);this[_0xccf447(0x304)]&&(this['formElement'][_0xccf447(0x227)]=!0x0);try{let {html:_0x333f94,string:_0x30d08e,range:_0x7a61e1}=_0x331459[_0xccf447(0x2bc)],_0x341eb1=_0x333f94||_0x30d08e||'',_0xee63a6=this[_0xccf447(0x29c)](_0x341eb1),_0x33dc74=ne(_0xee63a6);if(!_0x33dc74['length'])return;_0x331459[_0xccf447(0x292)](),this[_0xccf447(0x29a)][_0xccf447(0x22a)](_0x7a61e1);let _0x42d7e4=new k(this);try{let _0xece02d=await this[_0xccf447(0x225)]||this[_0xccf447(0x274)]||[],_0x5c407a=await this[_0xccf447(0x279)]||this['blockedMediaHostsValue']||[],_0xfba6=new Set(_0x33dc74[_0xccf447(0x1e3)](_0x540e39=>O(_0x540e39)));[..._0xee63a6['querySelectorAll'](_0xccf447(0x1f7))][_0xccf447(0x1df)](_0x108af7=>_0xfba6[_0xccf447(0x2e1)](_0x108af7['src'])),_0xfba6=[..._0xfba6];let _0x45d0a5=_0xfba6[_0xccf447(0x1e3)](_0x5f32e0=>H(_0x5f32e0,_0xece02d,_0x5c407a)),_0xec9502=_0xfba6[_0xccf447(0x1e3)](_0x361ee5=>!_0x45d0a5['includes'](_0x361ee5)),_0x484c98=await this[_0xccf447(0x231)]||this[_0xccf447(0x2e9)]||[],_0x16ee64=await this[_0xccf447(0x31f)]||this[_0xccf447(0x26f)]||[],_0x4214d3=_0x33dc74[_0xccf447(0x1e3)](_0x233c30=>!_0xfba6[_0xccf447(0x1fe)](_0x233c30)),_0x4c8755=_0x4214d3[_0xccf447(0x1e3)](_0xf510d7=>H(_0xf510d7,_0x484c98,_0x16ee64)),_0x4a0857=_0x4214d3[_0xccf447(0x1e3)](_0x5a2eda=>!_0x4c8755['includes'](_0x5a2eda));if(_0xec9502[_0xccf447(0x299)]||_0x4a0857[_0xccf447(0x299)]){let _0x332460=[...new Set([..._0xec9502,..._0x4a0857])],_0x20b933=[...new Set([..._0xece02d,..._0x484c98])]['filter'](_0x2c7f91=>!this[_0xccf447(0x303)][_0xccf447(0x1fe)](_0x2c7f91)),_0x34bfdd=[...new Set([..._0x5c407a,..._0x16ee64])]['filter'](_0x3dc144=>!this[_0xccf447(0x303)]['includes'](_0x3dc144));console['log']('allowedHosts',_0x20b933),console[_0xccf447(0x27e)](_0xccf447(0x301),_0x34bfdd),await this[_0xccf447(0x2ad)](_0x42d7e4['renderWarnings'](_0x332460,_0x20b933,_0x34bfdd));}if(_0x45d0a5[_0xccf447(0x299)]&&await this[_0xccf447(0x2ad)](_0x42d7e4['renderEmbeds'](_0x45d0a5)),_0x33dc74[_0xccf447(0x299)]===0x1&&_0x45d0a5[_0xccf447(0x299)]===0x1)return;let _0x1873b8=this['sanitizePastedElement'](_0xee63a6,{'renderer':_0x42d7e4,'validMediaURLs':_0x45d0a5,'validLinkURLs':_0x4c8755})[_0xccf447(0x21a)][_0xccf447(0x30c)]();_0x1873b8[_0xccf447(0x299)]&&await this[_0xccf447(0x2ad)](_0x1873b8,{'disposition':'inline'});}catch(_0x420992){this[_0xccf447(0x2ad)](_0x42d7e4[_0xccf447(0x2e5)](_0x420992));}}finally{this[_0xccf447(0x304)]&&delete this[_0xccf447(0x304)][_0xccf447(0x227)];}}[_0x3dea0f(0x29c)](_0x3409fd){const _0xa05143=_0x3dea0f;let _0x9a6a2c=document[_0xa05143(0x200)](_0xa05143(0x220));return _0x9a6a2c['innerHTML']=_0xa05143(0x26d)+_0x3409fd['trim']()+_0xa05143(0x232),_0x9a6a2c[_0xa05143(0x320)]['firstElementChild'];}[_0x3dea0f(0x21b)](_0x302762,_0x5476af={'default':null}){const _0xf14e4c=_0x3dea0f;let _0x2395b0=_0x302762[_0xf14e4c(0x25b)];return _0x2395b0&&_0x2395b0[_0xf14e4c(0x299)]||(_0x2395b0=_0x302762[_0xf14e4c(0x30d)][_0xf14e4c(0x30c)](),_0x2395b0&&_0x2395b0[_0xf14e4c(0x299)])?_0x2395b0:_0x5476af[_0xf14e4c(0x28d)];}['sanitizePastedElement'](_0xee0d13,_0x1ed8e5={'renderer':null,'validMediaURLs':[],'validLinkURLs':[]}){const _0x39bae0=_0x3dea0f;let {renderer:_0x50a416,validMediaURLs:_0x565a22,validLinkURLs:_0x3ed902}=_0x1ed8e5;_0xee0d13=_0xee0d13[_0x39bae0(0x2cb)](!0x0);let _0x14dc0a=C(_0xee0d13),_0x5ede3c=[],_0x14eb23;for(;_0x14eb23=_0x14dc0a[_0x39bae0(0x2ae)]();)_0x14eb23[_0x39bae0(0x267)]=_0x14eb23[_0x39bae0(0x267)]||new Set(),_0x5ede3c[_0x39bae0(0x2d4)](_0x14eb23),_0x14eb23['nodeValue'][_0x39bae0(0x281)](/\\s+/)[_0x39bae0(0x1e3)](_0x2e9f6d=>_0x2e9f6d[_0x39bae0(0x2dc)]('http'))[_0x39bae0(0x1df)](_0x1db479=>{const _0x5cfbc4=_0x39bae0;var _0x4ca75d;let _0x4cdf82=(_0x4ca75d=g(_0x1db479))==null?void 0x0:_0x4ca75d[_0x5cfbc4(0x1f3)],_0x1fb743=_0x3ed902[_0x5cfbc4(0x1fe)](_0x4cdf82)||_0x3ed902[_0x5cfbc4(0x1fe)](_0x4cdf82)?_0x50a416[_0x5cfbc4(0x291)](_0x5cfbc4(0x1f4),{'url':_0x4cdf82,'label':_0x4cdf82}):_0x50a416[_0x5cfbc4(0x291)](_0x5cfbc4(0x31e),{'url':_0x4cdf82,'label':_0x5cfbc4(0x1f1),'description':''});_0x14eb23[_0x5cfbc4(0x267)][_0x5cfbc4(0x2e1)]({'match':_0x1db479,'replacement':_0x1fb743});});return _0x5ede3c[_0x39bae0(0x1df)](_0x474abf=>{const _0x3b8efe=_0x39bae0;if(!_0x474abf[_0x3b8efe(0x267)][_0x3b8efe(0x2ba)])return;let _0x5f16ea=_0x474abf[_0x3b8efe(0x24d)];[..._0x474abf[_0x3b8efe(0x267)]]['sort']((_0x203b5a,_0x2da644)=>_0x2da644[_0x3b8efe(0x2c1)][_0x3b8efe(0x299)]-_0x203b5a['match']['length'])['forEach'](_0x4cbde8=>_0x5f16ea=_0x5f16ea[_0x3b8efe(0x273)](_0x4cbde8[_0x3b8efe(0x2c1)],_0x4cbde8[_0x3b8efe(0x1e1)])),_0x474abf[_0x3b8efe(0x2cd)](this[_0x3b8efe(0x29c)](_0x5f16ea));}),_0xee0d13[_0x39bae0(0x203)]('a')[_0x39bae0(0x1df)](_0x5a6afb=>{const _0x310403=_0x39bae0;let _0x470075=U(_0x5a6afb),_0x56cb59=this[_0x310403(0x21b)](_0x5a6afb,{'default':_0x470075}),_0x43e25b=_0x3ed902[_0x310403(0x1fe)](_0x470075)?_0x50a416[_0x310403(0x291)](_0x310403(0x1f4),{'url':_0x470075,'label':_0x56cb59}):_0x50a416[_0x310403(0x291)]('prohibited',{'url':_0x470075,'label':_0x310403(0x2ea),'description':'('+_0x56cb59+')'});_0x5a6afb[_0x310403(0x2cd)](this[_0x310403(0x29c)](_0x43e25b));}),_0xee0d13[_0x39bae0(0x203)](ce[_0x39bae0(0x2e3)](',\\x20'))[_0x39bae0(0x1df)](_0x3a5984=>{const _0x5d40ad=_0x39bae0;let _0x508974=U(_0x3a5984),_0x18bacc=this[_0x5d40ad(0x21b)](_0x3a5984,{'default':_0x508974}),_0x89ac13=_0x565a22[_0x5d40ad(0x1fe)](_0x508974)?_0x50a416[_0x5d40ad(0x291)](_0x5d40ad(0x29f),{'url':_0x508974,'label':_0x5d40ad(0x27a),'description':_0x5d40ad(0x208)}):_0x50a416['render'](_0x5d40ad(0x31e),{'url':_0x508974,'label':_0x5d40ad(0x1dd),'description':''});_0x3a5984[_0x5d40ad(0x2cd)](this[_0x5d40ad(0x29c)](_0x89ac13));}),_0xee0d13[_0x39bae0(0x21a)][_0x39bae0(0x273)](/(\\n|\\r|\\f|\\v)+/g,_0x39bae0(0x2be)),_0xee0d13;}['createAttachment'](_0x53df96){const _0x49889f=_0x3dea0f;return new _0x3bd51a[(_0x49889f(0x20f))]({'content':_0x53df96,'contentType':se[_0x49889f(0x2a8)]});}[_0x3dea0f(0x309)](_0x341aa5=0x1,_0x2a647e={'delay':0x1}){let {delay:_0x1e28d4}=_0x2a647e;return new Promise(_0x5ebf0d=>{setTimeout(()=>{const _0x3c10ff=_0x5b82;for(let _0x540308=0x0;_0x540308<_0x341aa5;_0x540308++)this[_0x3c10ff(0x29a)][_0x3c10ff(0x28a)]();_0x5ebf0d();},_0x1e28d4);});}['insertAttachment'](_0x133f9e,_0x2fd468={'delay':0x1}){let {delay:_0xc14965}=_0x2fd468;return new Promise(_0x2e3903=>{setTimeout(()=>{const _0x3f3672=_0x5b82;this[_0x3f3672(0x29a)][_0x3f3672(0x270)](this[_0x3f3672(0x2b3)](_0x133f9e)),this[_0x3f3672(0x309)](0x1,{'delay':_0xc14965})[_0x3f3672(0x1f6)](_0x2e3903);},_0xc14965);});}[_0x3dea0f(0x2b4)](_0x8e1a46,_0x428c39={'delay':0x1}){let {delay:_0x330dbe}=_0x428c39;return new Promise(_0x3e6491=>{setTimeout(()=>{const _0x48845b=_0x5b82;this[_0x48845b(0x29a)]['insertHTML'](_0x8e1a46),this[_0x48845b(0x309)](0x1,{'delay':_0x330dbe})[_0x48845b(0x1f6)](_0x3e6491);},_0x330dbe);});}[_0x3dea0f(0x2ad)](_0xc5e31f,_0x50e4fb={'delay':0x1,'disposition':_0x3dea0f(0x2a8)}){let {delay:_0x2cb1b6,disposition:_0xbec439}=_0x50e4fb;return _0xc5e31f!=null&&_0xc5e31f['length']?new Promise(_0x3bd69b=>{setTimeout(()=>{const _0x321367=_0x5b82;if(typeof _0xc5e31f==_0x321367(0x21d))return _0xbec439===_0x321367(0x2ac)?this[_0x321367(0x2b4)](_0xc5e31f,{'delay':_0x2cb1b6})[_0x321367(0x2d0)](_0x4d66f2=>this[_0x321367(0x2e5)](_0x4d66f2))[_0x321367(0x1f6)](_0x3bd69b):this[_0x321367(0x270)](_0xc5e31f,{'delay':_0x2cb1b6})['catch'](_0x174918=>this[_0x321367(0x2e5)](_0x174918))['finally'](_0x3bd69b);if(Array[_0x321367(0x302)](_0xc5e31f)){let _0x2b9db1=_0xbec439===_0x321367(0x2ac)?_0xc5e31f['map'](_0x559f4e=>this[_0x321367(0x2b4)](_0x559f4e,{'delay':_0x2cb1b6+0x1})):_0xc5e31f[_0x321367(0x229)](_0x21f9f6=>this[_0x321367(0x270)](_0x21f9f6,{'delay':_0x2cb1b6+0x1}));return Promise[_0x321367(0x312)](_0x2b9db1)[_0x321367(0x2d0)](_0x4135a1=>this[_0x321367(0x2e5)](_0x4135a1))[_0x321367(0x1f6)](_0x3bd69b);}_0x3bd69b();});}):Promise['resolve']();}get[_0x3dea0f(0x29a)](){const _0x1a5094=_0x3dea0f;return this[_0x1a5094(0x249)][_0x1a5094(0x29a)];}get[_0x3dea0f(0x226)](){const _0x989688=_0x3dea0f;let _0x891a1e=this[_0x989688(0x249)]['getAttribute'](_0x989688(0x218)),_0x59cb0a=_0x891a1e?document[_0x989688(0x26a)](_0x891a1e):null;if(!_0x59cb0a){let _0xb213b3=this['element'][_0x989688(0x28e)];_0x59cb0a=_0xb213b3!=null&&_0xb213b3[_0x989688(0x2de)][_0x989688(0x2c1)](/trix-toolbar/i)?_0xb213b3:null;}return _0x59cb0a;}get['formElement'](){const _0x1d7362=_0x3dea0f;return this[_0x1d7362(0x249)][_0x1d7362(0x284)](_0x1d7362(0x20e));}get[_0x3dea0f(0x2f9)](){const _0x4f2cb8=_0x3dea0f;var _0x11990e;let _0x127625=this[_0x4f2cb8(0x249)]['getAttribute'](_0x4f2cb8(0x243));return _0x127625?(_0x11990e=this[_0x4f2cb8(0x304)])==null?void 0x0:_0x11990e[_0x4f2cb8(0x1fd)]('#'+_0x127625):null;}get[_0x3dea0f(0x28f)](){const _0x30836e=_0x3dea0f;return!!this['store'][_0x30836e(0x30a)](_0x30836e(0x28f));}get[_0x3dea0f(0x25e)](){const _0x5878fb=_0x3dea0f;try{return JSON[_0x5878fb(0x2eb)](this[_0x5878fb(0x2a3)][_0x5878fb(0x30a)](_0x5878fb(0x25e)))[0x2];}catch(_0x1a69bd){return null;}}get[_0x3dea0f(0x282)](){const _0xd91c00=_0x3dea0f;try{return this['store'][_0xd91c00(0x30a)]('configured')==='true';}catch(_0x115d1b){return!0x1;}}get['hostsValueDescriptors'](){const _0x2b7917=_0x3dea0f;return Object[_0x2b7917(0x20d)](this['valueDescriptorMap'])[_0x2b7917(0x1e3)](_0x447270=>_0x447270[_0x2b7917(0x2fd)][_0x2b7917(0x25d)](_0x2b7917(0x2c2)));}get['reservedDomains'](){const _0x2dbe87=_0x3dea0f;return[_0x2dbe87(0x22e),_0x2dbe87(0x26c),_0x2dbe87(0x29b),_0x2dbe87(0x252),_0x2dbe87(0x319),'trix.embed.example','trix.embed.invalid',_0x2dbe87(0x24e),_0x2dbe87(0x268),'trix.embed.test',_0x2dbe87(0x230),_0x2dbe87(0x256),_0x2dbe87(0x223),_0x2dbe87(0x2f0),_0x2dbe87(0x2f1),'www.embed.example','www.embed.invalid',_0x2dbe87(0x20c),_0x2dbe87(0x2c9),_0x2dbe87(0x1f5),'www.trix.example',_0x2dbe87(0x30b),'www.trix.local',_0x2dbe87(0x2dd),_0x2dbe87(0x2f6)];}['rememberConfig'](){return new Promise(async _0x2ab40b=>{const _0x5743c=_0x5b82;let _0x251233,_0x5b462a=await L();_0x251233=await y(_0x5b462a,w(this[_0x5743c(0x303)],0x3)),this['store']['write'](_0x5743c(0x25e),JSON[_0x5743c(0x295)]([_0x251233[0x0],_0x251233[0x1],_0x5b462a,_0x251233[0x2]])),this['paranoidValue']!==!0x1&&(_0x251233=await y(_0x5b462a,w(this[_0x5743c(0x303)],0x4)),this['store']['write'](_0x5743c(0x28f),JSON[_0x5743c(0x295)](_0x251233))),this[_0x5743c(0x249)][_0x5743c(0x2e4)](_0x5743c(0x2d9)),this[_0x5743c(0x2b8)]['forEach'](async _0x154325=>{const _0x206595=_0x5743c;let {name:_0x26cc38}=_0x154325,_0x3d0ff1=_0x26cc38['slice'](0x0,_0x26cc38['lastIndexOf'](_0x206595(0x24c))),_0x1f22f5=this[_0x26cc38];_0x1f22f5['length']<0x4&&(_0x1f22f5=_0x1f22f5[_0x206595(0x2b2)](w(this[_0x206595(0x303)],0x4-_0x1f22f5[_0x206595(0x299)]))),this[_0x206595(0x2a3)][_0x206595(0x2c5)](_0x3d0ff1,JSON['stringify'](await y(_0x5b462a,_0x1f22f5))),this['hasOwnProperty'](_0x3d0ff1)||Object['defineProperty'](this,_0x3d0ff1,{'get':async()=>{const _0xf8aa5=_0x206595;try{return(await Z(this[_0xf8aa5(0x25e)],JSON['parse'](this[_0xf8aa5(0x2a3)][_0xf8aa5(0x30a)](_0x3d0ff1))))[_0xf8aa5(0x1e3)](_0x230251=>!this['reservedDomains']['includes'](_0x230251));}catch(_0xbd12e1){return console[_0xf8aa5(0x2d3)](_0xf8aa5(0x23a)+_0x3d0ff1+'\\x27!',_0xbd12e1),[];}}}),this['element'][_0x206595(0x2e4)](_0x206595(0x288)+_0x154325[_0x206595(0x25e)]);}),_0x251233=await y(_0x5b462a,w(this[_0x5743c(0x303)],0x4)),this[_0x5743c(0x2a3)][_0x5743c(0x2c5)]('securityHosts',_0x251233),_0x251233=await y(_0x5b462a,w(this[_0x5743c(0x303)],0x4)),this[_0x5743c(0x2a3)][_0x5743c(0x2c5)](_0x5743c(0x1ea),_0x251233),this['store'][_0x5743c(0x2c5)]('configured',!0x0),_0x2ab40b();});}['forgetConfig'](){const _0x960f3b=_0x3dea0f;var _0x384b94,_0x5d980e,_0xd10ddc,_0xa87f35,_0x388fd4;try{(_0x384b94=this[_0x960f3b(0x2a3)])==null||_0x384b94[_0x960f3b(0x2ee)](_0x960f3b(0x25e)),(_0x5d980e=this[_0x960f3b(0x2a3)])==null||_0x5d980e[_0x960f3b(0x2ee)](_0x960f3b(0x28f)),this[_0x960f3b(0x2b8)]['forEach'](async _0x1f4b95=>{const _0x297e9f=_0x960f3b;var _0x4f3e88;let {name:_0x3a9970}=_0x1f4b95,_0x4d46bf=_0x3a9970[_0x297e9f(0x216)](0x0,_0x3a9970[_0x297e9f(0x27d)](_0x297e9f(0x24c)));(_0x4f3e88=this['store'])==null||_0x4f3e88[_0x297e9f(0x2ee)](_0x4d46bf);}),(_0xd10ddc=this[_0x960f3b(0x2a3)])==null||_0xd10ddc[_0x960f3b(0x2ee)]('securityHosts'),(_0xa87f35=this['store'])==null||_0xa87f35[_0x960f3b(0x2ee)]('obscurityHosts'),(_0x388fd4=this['store'])==null||_0x388fd4['remove'](_0x960f3b(0x282));}catch(_0x7f4986){}}},X(_0x372023,_0x3dea0f(0x20d),{'embeddedTemplate':String,'errorTemplate':String,'iframeTemplate':String,'imageTemplate':String,'linkTemplate':String,'prohibitedTemplate':String,'warningTemplate':String,'allowedLinkHosts':Array,'blockedLinkHosts':Array,'allowedMediaHosts':Array,'blockedMediaHosts':Array,'paranoid':{'type':Boolean,'default':!0x0}}),_0x372023;}var ge=!0x1,Fe={'application':null,'Controller':null,'Trix':null};function De(_0x548be0=Fe){const _0x23dcf3=_0x25ec03;if(ge)return;let {application:_0xf317bc,Controller:_0x4ef87a,Trix:_0x26f7ab}=_0x548be0;_0xf317bc[_0x23dcf3(0x222)](_0x23dcf3(0x219),fe({'Controller':_0x4ef87a,'Trix':_0x26f7ab})),ge=!0x0;}self['TrixEmbed']=E(v({},Q),{'encryptValues':y,'generateKey':L,'generateKeyAndEncryptValues':ee,'initialize':De});function _0x5b82(_0x30e371,_0x4bfe96){const _0x1733aa=_0x1733();return _0x5b82=function(_0x5b8249,_0xe57db7){_0x5b8249=_0x5b8249-0x1dc;let _0x29c4d0=_0x1733aa[_0x5b8249];return _0x29c4d0;},_0x5b82(_0x30e371,_0x4bfe96);}var St=self['TrixEmbed'];export{St as default};", "import ApplicationController from '../application_controller'\n\nexport default class extends ApplicationController {\n  connect() {\n    if (this.element.parentElement.localName === 'wa-toast') return\n\n    let stack = document.querySelector('wa-toast[data-app-toasts]')\n    if (!stack) {\n      stack = document.createElement('wa-toast')\n      stack.dataset.appToasts = ''\n      stack.dataset.turboTemporary = ''\n      document.body.append(stack)\n    }\n    this.element.addEventListener('wa-after-hide', () => this.element.remove(), { once: true })\n    stack.append(this.element)\n  }\n}\n", "import ApplicationController from '../application_controller'\n\nexport default class extends ApplicationController {\n  static outlets = ['unsaved-changes']\n  static values = {\n    allowCloseViaTurboConfirm: { type: Boolean, default: false },\n  }\n\n  connect() {\n    this.hide = this.hide.bind(this)\n    this.hasChanges = this.hasChanges.bind(this)\n    this.noChanges = this.noChanges.bind(this)\n    this.handleRequestClose = this.handleRequestClose.bind(this)\n    this.handleSubmitEnd = this.handleSubmitEnd.bind(this)\n    this.setupListeners()\n  }\n\n  hasChanges() {\n    this.canClose = false\n  }\n\n  noChanges() {\n    this.canClose = true\n  }\n\n  handleRequestClose(event) {\n    if (event.target !== this.element) return\n    if (!this.canClose) {\n      this.confirmChanges(event)\n      if (!this.canClose) event.preventDefault()\n    }\n  }\n\n  /**\n   * Web Awesome closes an open overlay from a document-level Escape keydown.\n   * Stop the keydown at the overlay so it never reaches that listener, while\n   * widgets inside the overlay still see it first.\n   */\n  preventEscapeClose(event) {\n    if (event.key === 'Escape' && this.element.open) {\n      event.preventDefault()\n      event.stopPropagation()\n    }\n  }\n\n  /**\n   * Event handler for 'turbo:submit-end' event. Calls this.element.open = false to automatically\n   * close a drawer or dialog upon a successful form submission of a form contained\n   * within this controller's scope at the time it was connected.\n   *\n   * Optionally, this behavior can be disabled by setting data-close-on-form-success=\"false\"\n   * on the element this controller is bound to.\n   * @param {Event[{detail: {formSubmission: {result: {success: boolean}, formElement: HTMLElement}}}]} event\n   *\n   * @returns {void}\n   */\n  handleSubmitEnd(event) {\n    // eslint-disable-next-line no-unsafe-optional-chaining\n    const { formSubmission } = event?.detail\n    const success = formSubmission?.result?.success\n    const formElement = formSubmission?.formElement\n\n    if (success && this.closeOnFormSuccess) {\n      this.canClose = true\n      /* Close the element automatically on successful form submission */\n      if (this.originatingFormElementInScope(formElement) || this.canCloseViaTurboConfirm(formElement)) {\n        this.element.open = false\n      }\n    }\n  }\n\n  setupListeners() {\n    /* Allow element to close if no unsaved changes */\n    if (this.element.dataset.tracksChanges) {\n      this.canClose = true\n\n      this.element.addEventListener('unsaved-changes:discard', this.hide)\n      this.element.addEventListener('unsaved-changes:has-changes', this.hasChanges)\n      this.element.addEventListener('unsaved-changes:no-changes', this.noChanges)\n      this.element.addEventListener('wa-hide', this.handleRequestClose)\n    }\n\n    /* Optionaly prevent the element from closing if clicking on the overlay */\n    if (this.element.dataset.denyClose) {\n      this.element.lightDismiss = false\n      this.preventEscapeClose = this.preventEscapeClose.bind(this)\n      this.element.addEventListener('keydown', this.preventEscapeClose)\n    }\n\n    document.body.addEventListener('turbo:submit-end', this.handleSubmitEnd)\n  }\n\n  confirmChanges(event) {\n    if (!this.hasUnsavedChangesOutlet) return\n\n    let outletsWithChanges = this.unsavedChangesOutlets.filter((outlet) => outlet.isDirty == true)\n\n    if (outletsWithChanges.length) {\n      outletsWithChanges.forEach((outlet) => outlet.discard(event))\n    } else {\n      this.unsavedChangesOutlets.forEach((outlet) => outlet.discard(event))\n    }\n  }\n\n  hide(event) {\n    if (event) {\n      event.preventDefault()\n    }\n\n    this.canClose = true\n    const base = this.application.getControllerForElementAndIdentifier(this.element, 'web-awesome--base')\n    if (base) base.canClose = true\n    this.element.open = false\n  }\n\n  remove(event) {\n    if (event.target !== this.element) return\n    event.stopPropagation()\n    this.element.remove()\n  }\n\n  disconnect() {\n    this.element.removeEventListener('unsaved-changes:discard', this.hide)\n    this.element.removeEventListener('unsaved-changes:has-changes', this.hasChanges)\n    this.element.removeEventListener('unsaved-changes:no-changes', this.noChanges)\n    this.element.removeEventListener('wa-hide', this.handleRequestClose)\n    this.element.removeEventListener('keydown', this.preventEscapeClose)\n    document.body.removeEventListener('turbo:submit-end', this.handleSubmitEnd)\n  }\n\n  /**\n   * Whether or not the provided form element is within the scope\n   * of this controller at the time it connected, and it is not a\n   * turboConfirm form element.\n   *\n   * @param {formElement: HTMLElement} formElement\n   *\n   * @returns {boolean}\n   */\n  originatingFormElementInScope(formElement) {\n    return [...this.formElements].includes(formElement)\n  }\n\n  /**\n   * Whether or not .hide() can be called on the element\n   * based on whether the formElement is a TurboConfirm form\n   * element and whether the allowCloseViaTurboConfirmValue has\n   * been set to true.\n   *\n   * @param {formElement: HTMLElement} formElement\n   *\n   * @returns {boolean}\n   */\n  canCloseViaTurboConfirm(formElement) {\n    if (!this.allowCloseViaTurboConfirmValue) {\n      return false\n    }\n\n    const { turboConfirm } = formElement.dataset\n\n    return turboConfirm !== 'undefined'\n  }\n\n  get closeOnFormSuccess() {\n    return this.element.dataset.closeOnFormSuccess === 'true'\n  }\n\n  get formElements() {\n    return this.element.querySelectorAll('form')\n  }\n}\n", "import BaseController from './base_controller'\n\nexport default class extends BaseController {\n  static targets = [\n    'icon',\n    'negativeIconTemplate',\n    'positiveIconTemplate',\n    'cancel',\n    'submit',\n    'title',\n    'description',\n    'descriptionWrapper',\n    'guardPhraseTemplate',\n    'guardPhraseField',\n    'guardPhrase',\n    'guardPhraseInput',\n  ]\n\n  static values = {\n    type: { type: String, default: 'neutral' },\n    defaultTitle: String,\n    defaultSubmit: String,\n    defaultCancel: String,\n    title: String,\n    submit: String,\n    cancel: String,\n    description: String,\n    eventDetail: Object,\n    guardPhrase: String,\n    initiator: String,\n    htmlSafeDescription: { type: Boolean, default: false },\n    htmlSafeTitle: { type: Boolean, default: false },\n    useIconButtons: { type: Boolean, default: false },\n  }\n\n  confirm(event) {\n    event.preventDefault()\n    if (!this.validateGuardPhrase()) return\n\n    this.dispatch('confirm', { detail: { confirm: true, ...this.eventDetailValue } })\n    this.element.open = false\n  }\n\n  cancel() {\n    this.dispatch('confirm', { detail: { confirm: false, ...this.eventDetailValue } })\n\n    if (this.hasInitiatorValue) {\n      let confirmAction = document.querySelector(this.initiatorValue)\n      confirmAction.classList.remove('disabled')\n      confirmAction.disabled = false\n    }\n\n    this.element.open = false\n  }\n\n  typeValueChanged() {\n    this.updateToType(this.typeValue)\n  }\n\n  titleValueChanged() {\n    if (this.htmlSafeTitleValue) {\n      this.titleTarget.innerHTML = this.titleValue\n    } else {\n      this.titleTarget.textContent = this.titleValue\n    }\n  }\n\n  descriptionValueChanged() {\n    if (this.htmlSafeDescriptionValue) {\n      this.descriptionTarget.innerHTML = this.descriptionValue\n    } else {\n      this.descriptionTarget.textContent = this.descriptionValue\n    }\n  }\n\n  cancelValueChanged() {\n    if (this.useIconButtonsValue && this.cancelValue) {\n      this.cancelTarget.innerHTML = `<i class=\"${this.cancelValue}\"></i>`\n    } else if (this.cancelValue) {\n      this.cancelTarget.textContent = this.cancelValue\n    }\n  }\n\n  submitValueChanged() {\n    if (this.useIconButtonsValue && this.submitValue) {\n      this.submitTarget.innerHTML = `<i class=\"${this.submitValue}\"></i>`\n    } else if (this.submitValue) {\n      this.submitTarget.textContent = this.submitValue\n    }\n  }\n\n  useIconButtonsValueChanged() {\n    // Re-render buttons when this flag changes\n    if (this.hasSubmitTarget) this.submitValueChanged()\n    if (this.hasCancelTarget) this.cancelValueChanged()\n  }\n\n  updateToType(type) {\n    if (type === 'negative') {\n      this.iconTarget.replaceChildren(this.negativeIconTemplateTarget.content.cloneNode(true))\n      this.submitTarget.classList = 'cf-button-danger'\n    }\n\n    if (type === 'positive') {\n      this.iconTarget.replaceChildren(this.positiveIconTemplateTarget.content.cloneNode(true))\n      this.submitTarget.classList = 'cf-button'\n    }\n\n    if (type === 'neutral' || !type) {\n      this.iconTarget.replaceChildren()\n      this.submitTarget.classList = 'cf-button'\n    }\n  }\n\n  // Phrase Guard functionality\n  guardPhraseValueChanged() {\n    // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n    this.hasGuardPhraseValue && this.guardPhraseValue ? this.enableGuardPhrase() : this.disableGuardPhrase()\n  }\n\n  enableGuardPhrase() {\n    this.disableSubmit()\n    this.descriptionWrapperTarget.appendChild(this.guardPhraseTemplateTarget.content.cloneNode(true))\n  }\n\n  guardPhraseTargetConnected() {\n    // Fill in the guard phrase name in the template\n    this.guardPhraseTarget.textContent = this.guardPhraseValue\n  }\n\n  validateGuardPhrase() {\n    if (!this.hasGuardPhraseValue) return true\n    return this.guardPhraseInputTarget.value === this.guardPhraseValue\n  }\n\n  toggleSubmit() {\n    // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n    this.validateGuardPhrase() ? this.enableSubmit() : this.disableSubmit()\n  }\n\n  enableSubmit() {\n    this.submitTarget.disabled = false\n  }\n\n  disableSubmit() {\n    this.submitTarget.disabled = true\n  }\n\n  disableGuardPhrase() {\n    this.enableSubmit()\n\n    if (!this.hasGuardPhraseFieldTarget) return\n\n    this.guardPhraseFieldTarget.remove()\n  }\n\n  reset() {\n    this.typeValue = ''\n    this.cancelValue = this.defaultCancelValue\n    this.submitValue = this.defaultSubmitValue\n    this.titleValue = this.defaultTitleValue\n\n    if (this.hasGuardPhraseFieldTarget) {\n      this.element.removeAttribute('data-web-awesome--confirm-guard-phrase-value')\n      this.guardPhraseFieldTarget.remove()\n    }\n  }\n}\n", "import BaseController from './base_controller'\n\nexport default class extends BaseController {\n  connect() {\n    // The companion web-awesome--base controller owns the close listeners.\n\n    if (this.element.dataset.autoOpen != 'false') {\n      this.element.updateComplete.then(() => {\n        if (!this.element.open) {\n          this.element.open = true\n\n          // Manually dispatch turbo:render so listeners bound to it re-run for content\n          // revealed on open (Alpine component discovery, custom-file-field icon state).\n          window.dispatchEvent(new Event('turbo:render'))\n        }\n      })\n    }\n  }\n}\n", "import BaseController from './base_controller'\n\nexport default class extends BaseController {\n  connect() {\n    // The companion web-awesome--base controller owns the close listeners.\n\n    if (this.element.dataset.autoOpen != 'false') {\n      this.element.updateComplete.then(() => {\n        if (!this.element.open) {\n          this.element.open = true\n\n          // Manually dispatch turbo:render so listeners bound to it re-run for content\n          // revealed on open (Alpine component discovery, custom-file-field icon state).\n          window.dispatchEvent(new Event('turbo:render'))\n        }\n      })\n    }\n  }\n\n  /**\n   * Closes the drawer by hiding the element.\n   * @function closeDrawer\n   * @returns {void}\n   */\n  closeDrawer() {\n    this.element.open = false\n  }\n}\n", "import ApplicationController from '../application_controller'\nimport { FetchRequest } from '@rails/request.js'\n\n/**\n * Event handler for the `wa-select` event on the <wa-dropdown> element\n *\n * When the user selects an item in the menu, the `menuItemSelected` function is called.\n *\n * @see  WebAwesomeHelper#wa_menu for usage\n * @see  https://webawesome.com/docs/components/dropdown\n */\n\nexport default class extends ApplicationController {\n  static values = {\n    autoClose: { type: Boolean, default: true },\n  }\n  /**\n   * Handler for the `wa-select` event on the <wa-dropdown> element\n   *\n   * @param [CustomEvent] event\n   * @param [HTMLElement] event.detail.item - The selected menu item\n   * @param [string] event.detail.item.dataset.href - The URL to visit when the user selects the item\n   * @param [string] event.detail.item.dataset.turboFrame - The ID of the TurboFrame\n   * @param [string] event.detail.item.dataset.turboMethod - The method of the turbo frame visit\n   * @return [void]\n   */\n  menuItemSelected(event) {\n    // Nested dropdowns handle their own selections.\n    if (event.target !== this.element) return\n    this.navigateToItem(event.detail.item)\n  }\n\n  standaloneItemSelected(event) {\n    const item = event.target.closest('wa-dropdown-item')\n    if (item && !item.disabled) this.navigateToItem(item)\n  }\n\n  navigateToItem(item) {\n    const { turboFrame, href, turboMethod, target } = item.dataset\n\n    if (href) {\n      if (turboFrame) {\n        let frame = document.querySelector(`turbo-frame#${turboFrame}`)\n        frame.src = href\n      } else if (turboMethod && turboMethod !== 'get') {\n        this.performTurboMethodRequest(href, turboMethod)\n      } else if (target) {\n        window.open(href, target)\n      } else {\n        Turbo.visit(href)\n      }\n    } else if (item.querySelector('form')) {\n      item.querySelector('form').requestSubmit()\n    }\n  }\n\n  /**\n   * Performs a turbo-stream request to a given href using a given turbo method.\n   * This is native Turbo behavior via the data-turbo-method attr that we have to\n   * include here in the event a menu item contains a turbo link with\n   * a non-GET turbo-method.\n   *\n   * @param {string} href\n   * @param {String} turboMethod (http request method, e.g. `GET` or `DELETE`)\n   */\n  async performTurboMethodRequest(href, turboMethod) {\n    const req = new FetchRequest(turboMethod, href, { responseKind: 'turbo-stream' })\n    const response = await req.perform()\n    if (response.redirected) {\n      Turbo.visit(response.response?.url)\n    }\n  }\n\n  close() {\n    this.element.open = false\n  }\n\n  handleClick(event) {\n    if (!event.target.closest('[slot=\"trigger\"]') && this.autoCloseValue == true) {\n      this.close()\n    }\n  }\n}\n", "import ApplicationController from '../application_controller'\nimport { FetchRequest } from '@rails/request.js'\n\nexport default class extends ApplicationController {\n  static targets = ['form', 'hiddenField']\n  static values = {\n    remoteUrl: { type: String, default: '' },\n    remoteUrlMethod: { type: String, default: 'PATCH' },\n    remoteUrlPayload: Object,\n    responseKind: { type: String, default: 'html' },\n    ifChecked: String,\n    ifUnchecked: String,\n  }\n\n  // Submit containing <form> element when a change event is emitted from the <wa-switch> element\n  submit() {\n    this.formTarget.requestSubmit()\n  }\n\n  /**\n   * Trigger a request to a remote URL.\n   *\n   * Depends on the following values:\n   * - `remoteUrlValue`: The url to which to perform the request\n   * - `remoteUrlMethod`: The HTTP method for the request. Defaut: PATCH\n   * - `responseKind`: Specifies which response format will be accepted. Default: `html`.\n   * - `remoteUrlPayload`: Any data to send along with the request body. The\n   *                     'checked' state of the switch will be merged with this\n   *                     data as {checked: <value>}.\n   *\n   * @param {Event} event - The event object triggered by the data-action attribute.\n   * @returns {Promise<void>} A Promise that resolves when the remote submission is completed.\n   */\n  async remoteSubmit(event) {\n    const checkedIntent = event.target.checked\n\n    const request = new FetchRequest(this.remoteUrlMethodValue, this.remoteUrlValue, {\n      responseKind: this.responseKindValue,\n      body: {\n        checked: checkedIntent,\n        ...this.remoteUrlPayloadValue,\n      },\n    })\n\n    this.dispatch('remote-submit-start')\n    const response = await request.perform()\n\n    if (response.ok) {\n      this.dispatch('remote-submit-success')\n      return\n    } else {\n      this.element.checked = !checkedIntent\n      console.error(`The response failed with: ${response.statusCode}`)\n      this.dispatch('remote-submit-error')\n    }\n  }\n\n  /**\n   * If the switch wrapps a hidden input field, this method can be\n   * used to toggle the value of that field as the switch changes state.\n   * @returns {any}\n   */\n  toggleHiddenField() {\n    if (this.hasHiddenFieldTarget) {\n      if (this.ifCheckedValue && this.ifUncheckedValue) {\n        this.hiddenFieldTarget.value = this.element.checked ? this.ifCheckedValue : this.ifUncheckedValue\n      } else {\n        const prevValue = this.hiddenFieldTarget.value === 'true'\n\n        this.hiddenFieldTarget.value = !prevValue\n      }\n    }\n  }\n}\n", "// to be used with wa-tab-group\nimport ApplicationController from '../application_controller'\n\n// This controller is used to handle the tab group component\n// @see https://webawesome.com/docs/components/tab-group\n// @param keepScrollPosition [Boolean] - If true, the scroll position will be kept when changing tabs\n// @usage <div data-controller=\"web-awesome--tab-group\" data-web-awesome--tab-group-keep-scroll-position-value=\"true\">\n\nexport default class extends ApplicationController {\n  static values = {\n    keepScrollPosition: { type: Boolean, default: false },\n  }\n\n  connect() {\n    this.currentScrollYPosition = 0\n    this.navigateToTab = this.navigateToTab.bind(this)\n    this.handleTabShow = this.handleTabShow.bind(this)\n    this.handlePopState = this.handlePopState.bind(this)\n    this.preventVisit = false\n\n    this.initialHash = window.location.hash\n\n    this.navigateToTab()\n\n    document.addEventListener('turbo:render', this.navigateToTab)\n    this.element.addEventListener('wa-tab-show', this.handleTabShow)\n    window.addEventListener('popstate', this.handlePopState)\n  }\n\n  disconnect() {\n    document.removeEventListener('turbo:render', this.navigateToTab)\n    this.element.removeEventListener('wa-tab-show', this.handleTabShow)\n    window.removeEventListener('popstate', this.handlePopState)\n  }\n\n  handleTabShow(event) {\n    // Don't create new history entry if we're handling a popstate event\n    if (!this.handlingPopState && !this.preventVisit && event.detail.name !== this.initialHash.slice(1)) {\n      const newUrl = new URL(window.location)\n      newUrl.hash = event.detail.name\n      Turbo.navigator.history.push(newUrl)\n    }\n\n    this.initialHash = ''\n\n    if (this.keepScrollPositionValue) {\n      this.handleTabChange()\n    }\n  }\n\n  handlePopState() {\n    const hash = window.location.hash.slice(1)\n\n    if (hash) {\n      // show the tab specified in the hash\n      this.handlingPopState = true\n      this.preventVisit = true\n      this.activate(hash)\n      this.preventVisit = false\n      this.handlingPopState = false\n    } else {\n      // show first tab when no hash is present\n      const firstTab = this.element.querySelector('wa-tab')\n      if (!firstTab) return\n\n      this.handlingPopState = true\n      this.preventVisit = true\n      this.activate(firstTab.panel)\n      this.preventVisit = false\n      this.handlingPopState = false\n    }\n  }\n\n  navigateToTab() {\n    let hash = window.location.hash.toString()\n    if (hash) {\n      setTimeout(() => {\n        this.preventVisit = true\n        this.activate(hash.slice(1))\n        this.preventVisit = false\n      })\n    } else {\n      /*\n       * Turbo doesn't currently support hashes on redirects (see https://github.com/hotwired/turbo/issues/825)\n       * so we've created a workaround. Pass `redirect_anchor` as a query param, and the component will convert\n       * it to a hash and delete the query param. e.g. `some_url?redirect_anchor=store_upsells`\n       */\n      const params = new URLSearchParams(window.location.search)\n      const redirectedHashParam = params.get('redirect_anchor')\n      if (redirectedHashParam) {\n        params.delete('redirect_anchor')\n        let newParams = params.toString()\n        window.history.replaceState(\n          null,\n          '',\n          [window.location.pathname, newParams ? `?${newParams}` : '', '#', redirectedHashParam].join('')\n        )\n        this.preventVisit = true\n        this.activate(redirectedHashParam)\n        this.preventVisit = false\n      }\n    }\n  }\n\n  openTab(event) {\n    event.preventDefault()\n    const url = new URL(event.target.href)\n    const newTab = url.hash.slice(1)\n    window.history.replaceState(null, '', url.toString())\n\n    this.preventVisit = true\n    this.activate(newTab)\n    this.preventVisit = false\n  }\n\n  handleTabChange() {\n    this.currentScrollYPosition = window.scrollY\n  }\n\n  /**\n   * Programmatically reveal a wa-tab-panel via action params.\n   * @see Web Awesome wa-tab-group show() method\n   * @see https://webawesome.com/docs/components/tab-group\n   *\n   * @param {Event} event\n   * @param {string} event.params.showPanel - the name attribute of the wa-tab-panel to show\n   * @example <button type='button' data-action=\"click->web-awesome--tab-group#show\"\n   *   data-web-awesome--tab-group-show-panel-param=\"mypanelname\">\n   * @returns {void}\n   */\n  show(event) {\n    const { showPanel } = event.params\n    this.activate(showPanel)\n  }\n\n  /**\n   * Activate a panel by name. Web Awesome deactivates every panel when `active`\n   * names a panel the group does not contain (Web Awesome's show() ignored it), and\n   * the location hash reaches every tab group on the page, so only apply names\n   * this group owns.\n   */\n  activate(name) {\n    if (!this.element.querySelector(`:scope > wa-tab[panel=\"${CSS.escape(name)}\"]`)) return\n    this.element.active = name\n  }\n}\n", "import ApplicationController from '../../controllers/application_controller'\n\nexport default class extends ApplicationController {\n  static targets = ['drawer', 'lessonTree', 'languagePicker']\n\n  show() {\n    this.drawerTarget.open = true\n  }\n\n  toggle() {\n    if (this.drawerTarget.open) {\n      this.drawerTarget.open = false\n    } else {\n      this.drawerTarget.open = true\n    }\n  }\n\n  toggleLessonTree() {\n    if (this.lessonTreeTarget.open) {\n      this.lessonTreeTarget.open = false\n    } else {\n      this.lessonTreeTarget.open = true\n    }\n  }\n\n  toggleLanguagePicker() {\n    if (this.languagePickerTarget.open) {\n      this.languagePickerTarget.open = false\n    } else {\n      this.languagePickerTarget.open = true\n    }\n  }\n}\n", "import ApplicationController from '../../controllers/application_controller'\n\nexport default class extends ApplicationController {\n  static targets = ['radioGroup']\n  // intentionally not using classes api\n  // this is not publicly configurable\n  MODES = Object.freeze({\n    dark: 'dark',\n    light: 'light',\n    system: 'system',\n  })\n\n  darkModeClasses = [this.MODES.dark, 'wa-dark']\n  lightModeClasses = [this.MODES.light, 'wa-light']\n\n  connect() {\n    const theme = localStorage.getItem('customerCenterTheme')\n\n    if (theme) {\n      this.radioGroupTarget.value = this.MODES[theme]\n    } else {\n      this.radioGroupTarget.value = this.MODES.system\n    }\n  }\n\n  toggle() {\n    const value = this.radioGroupTarget.value\n\n    if (value == this.MODES.system) {\n      document.documentElement.classList.remove(...this.darkModeClasses)\n      document.documentElement.classList.remove(...this.lightModeClasses)\n      localStorage.removeItem('customerCenterTheme')\n      return\n    }\n\n    if (value == this.MODES.light) {\n      document.documentElement.classList.remove(...this.darkModeClasses)\n      document.documentElement.classList.add(...this.lightModeClasses)\n    } else {\n      document.documentElement.classList.add(...this.darkModeClasses)\n      document.documentElement.classList.remove(...this.lightModeClasses)\n    }\n\n    localStorage.customerCenterTheme = value\n  }\n}\n", "import ApplicationController from '../../controllers/application_controller'\n\nexport default class extends ApplicationController {\n  static values = { prevUrl: { type: String, default: '' } }\n\n  ALLOWED_CLOSERS = ['WA-DIALOG', 'WA-DRAWER']\n\n  handleHide(event) {\n    if (!this.ALLOWED_CLOSERS.includes(event.target.tagName)) return\n    this.setPreviousState()\n    // Prevents turbo from caching the post dialog in an open state.\n    this.element.remove()\n  }\n\n  setPreviousState() {\n    if (this.prevUrlValue) {\n      window.history.pushState(null, null, this.prevUrlValue)\n    }\n  }\n\n  scrollToFrame(event) {\n    const scrollToFrame = document.getElementById(event.detail.frameId)\n\n    scrollToFrame.scrollIntoView({ behavior: 'smooth', block: 'end' })\n  }\n}\n", "import ApplicationController from '../../controllers/application_controller'\nimport { post } from '@rails/request.js'\n\nexport default class extends ApplicationController {\n  static values = {\n    postId: String,\n    url: String,\n  }\n\n  initialize() {\n    this.viewedPosts = new Set()\n    this.observer = null\n    this.debounceTimer = null\n  }\n\n  connect() {\n    if (!this.hasPostIdValue || !this.hasUrlValue) return\n\n    const options = {\n      root: null,\n      rootMargin: '0px',\n      threshold: 0.5, // Post is considered \"viewed\" when 50% is visible\n    }\n\n    this.observer = new IntersectionObserver((entries) => {\n      entries.forEach((entry) => {\n        if (entry.isIntersecting && !this.viewedPosts.has(this.postIdValue)) {\n          this.markAsViewed()\n        }\n      })\n    }, options)\n\n    this.observer.observe(this.element)\n  }\n\n  disconnect() {\n    if (this.observer) {\n      this.observer.disconnect()\n    }\n    if (this.debounceTimer) {\n      clearTimeout(this.debounceTimer)\n    }\n  }\n\n  markAsViewed() {\n    if (this.viewedPosts.has(this.postIdValue)) return\n\n    this.viewedPosts.add(this.postIdValue)\n\n    // Debounce API calls\n    if (this.debounceTimer) {\n      clearTimeout(this.debounceTimer)\n    }\n\n    this.debounceTimer = setTimeout(async () => {\n      try {\n        const response = await post(this.urlValue, {\n          responseKind: 'json',\n        })\n\n        if (response.ok) {\n          return\n        } else {\n          this.viewedPosts.delete(this.postIdValue)\n        }\n      } catch {\n        this.viewedPosts.delete(this.postIdValue)\n      }\n    }, 1500) // 1500ms debounce\n  }\n}\n", "/* global requestAnimationFrame, setTimeout */\nimport ApplicationController from '../../controllers/application_controller'\n\nexport default class extends ApplicationController {\n  static targets = ['submitButton', 'textArea', 'charCount', 'imagePreview']\n  static values = {\n    maxLength: { type: Number, default: 750 },\n  }\n\n  submit() {\n    this.element.requestSubmit(this.submitButtonTarget)\n  }\n\n  enableSubmit() {\n    this.submitButtonTarget.classList.remove('text-gray-300', 'pointer-events-none')\n  }\n\n  disableSubmit() {\n    this.submitButtonTarget.classList.add('text-gray-300', 'pointer-events-none')\n  }\n\n  validateComment(event) {\n    if (!this.validateMaxLength() || !this.validateMinLength()) {\n      event.preventDefault()\n    }\n  }\n\n  handleTrixChange() {\n    if (this.validateMaxLength()) {\n      this.charCountTarget.innerHTML = ''\n    } else {\n      this.charCountTarget.innerHTML = `\u2013${this.contentLength - this.maxLengthValue}`\n    }\n\n    this.detectAndFormatUrls()\n  }\n\n  handleTrixPaste() {\n    requestAnimationFrame(() => {\n      this.detectAndFormatUrls()\n    })\n  }\n\n  detectAndFormatUrls() {\n    const document = this.editor.getDocument()\n    const text = document.toString()\n\n    // get pre blocks so we can ignore urls in them\n    const preBlocks = document.getBlocks().filter((block) => block.attributes.includes('code'))\n    const preBlockRanges = preBlocks.map((block) => {\n      const blockIndex = document.getBlocks().indexOf(block)\n      let startPosition = 0\n\n      // calculate start position by summing lengths of previous blocks\n      for (let i = 0; i < blockIndex; i++) {\n        const previousBlock = document.getBlocks()[i]\n        const blockLength = previousBlock.toString().length || 0\n        startPosition += blockLength + 1\n      }\n\n      const blockLength = block.toString().length || 0\n      // include the newline before the code block in the range\n      return [startPosition - 1, startPosition + blockLength]\n    })\n\n    const urlRegex = /\\b(https?:\\/\\/)?[\\w-]+(\\.[\\w-]+)+\\.?(:\\d+)?(\\/\\S*)?\\b/gi\n    const matches = Array.from(text.matchAll(urlRegex))\n\n    if (!matches.length) return\n\n    // Process matches in reverse order to maintain correct indices\n    matches.reverse().forEach((match) => {\n      const url = match[0]\n      const position = match.index\n      const range = [position, position + url.length]\n\n      // skip if the match is within a pre block\n      const isInPreBlock = preBlockRanges.some((preRange) => position >= preRange[0] && position < preRange[1])\n      if (isInPreBlock) return\n\n      // Ensure URL has protocol\n      const formattedUrl = url.startsWith('http') ? url : `https://${url}`\n\n      const existingAttachment = document.getAttachments().find((attachment) => {\n        const attributes = attachment.getAttributes?.()\n\n        // Skip if:\n        // 1. It's not a link attachment (no href)\n        // 2. It has content/sgid (indicates it's a mention)\n        // 3. It doesn't have getRange method\n        if (!attributes?.href || attributes?.content || attributes?.sgid || !attachment.getRange) {\n          return false\n        }\n\n        const range = attachment.getRange()\n        return range[0] === range[0] && range[1] === range[1]\n      })\n\n      if (!existingAttachment) {\n        const currentSelection = this.editor.getSelectedRange()\n        this.editor.recordUndoEntry('Insert Link')\n        this.editor.setSelectedRange(range)\n        this.editor.activateAttribute('href', formattedUrl)\n        this.editor.setSelectedRange(currentSelection)\n      }\n    })\n  }\n\n  handleTrixInitialize() {\n    setTimeout(() => this.insertCursorEnd())\n  }\n\n  /* Prevent file attachments to comments directly through Trix */\n  handleTrixFileAccept(event) {\n    event.preventDefault()\n  }\n\n  handleTrixAttachmentAdd(event) {\n    const contentType = event.attachment?.attachment?.attributes?.values?.contentType\n    if (contentType == 'image') {\n      event.attachment.remove()\n    }\n  }\n\n  insertCursorEnd() {\n    const length = this.editor.getDocument().getLength()\n    this.editor.setSelectedRange(length - 1)\n    this.editor.element.focus()\n  }\n\n  validateMaxLength() {\n    return this.contentLength <= this.maxLengthValue\n  }\n\n  validateMinLength() {\n    return this.contentLength > 0 || this.previewImages.length > 0\n  }\n\n  get contentLength() {\n    return this.editor.getDocument().toString().length - 1\n  }\n\n  get editor() {\n    return this.textAreaTarget.editor\n  }\n\n  get previewImages() {\n    return this.imagePreviewTarget.querySelectorAll('img')\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n  static targets = ['input', 'submit']\n  static values = { word: String }\n\n  check() {\n    this.submitTarget.disabled = this.inputTarget.value.trim().toLowerCase() !== this.wordValue.toLowerCase()\n  }\n}\n", "import ApplicationController from '../../controllers/application_controller'\n\nexport default class extends ApplicationController {\n  hide(event) {\n    if (['A', 'BUTTON'].includes(event.target.tagName)) {\n      this.element.open = false\n    }\n  }\n}\n", "import ApplicationController from '../../controllers/application_controller'\n\nexport default class extends ApplicationController {\n  handleDetailsShow(event) {\n    if (event.target.localName === 'wa-details') {\n      ;[...this.element.querySelectorAll('wa-details')].map((details) => (details.open = event.target === details))\n    }\n  }\n}\n", "import ApplicationController from '../../controllers/application_controller'\nimport { toast } from '../../utils/toast'\n\nexport default class extends ApplicationController {\n  static targets = [\n    'browse',\n    'clearImage',\n    'fileField',\n    'removeHiddenField',\n    'previewWrapper',\n    'previewImage',\n    'previewTemplate',\n    'submitBtn',\n    'spaceSelect',\n    'bodyEditor',\n  ]\n  static classes = ['hidden']\n\n  static values = {\n    originalFileExtension: String,\n    originalFileContentType: String,\n  }\n\n  enableSubmit() {\n    this.submitBtnTarget.classList.remove('bg-gray-300', 'pointer-events-none')\n  }\n\n  disableSubmit() {\n    this.submitBtnTarget.classList.add('bg-gray-300', 'pointer-events-none')\n  }\n\n  handleHide() {\n    this.element.open = false\n    this.dispatch('cancel')\n  }\n\n  handleSpaceSelect() {\n    this.dispatch('topic-changed', { detail: { spaceId: this.spaceSelectTarget.value } })\n  }\n\n  handleSelect() {\n    this.showClearImage()\n    this.updatePreview()\n    this.removeHiddenFieldTarget.value = false\n  }\n\n  handleRemove() {\n    this.fileFieldTarget.value = null\n    this.removeHiddenFieldTarget.value = true\n    this.showBrowse()\n    this.updatePreview()\n  }\n\n  handleImageCrop({ detail: { blob } }) {\n    const croppedFile = new File([blob], `cropped_image.${this.originalFileExtensionValue}`, {\n      type: this.originalFileType,\n    })\n\n    const dataTransfer = new DataTransfer()\n    dataTransfer.items.add(croppedFile)\n\n    this.fileFieldTarget.files = dataTransfer.files\n\n    this.updatePreview()\n  }\n\n  showBrowse() {\n    this.browseTarget.classList.remove(...this.hiddenClasses)\n    this.clearImageTarget.classList.add(...this.hiddenClasses)\n  }\n\n  showClearImage() {\n    this.browseTarget.classList.add(...this.hiddenClasses)\n    this.clearImageTarget.classList.remove(...this.hiddenClasses)\n  }\n\n  updatePreview() {\n    const file = this.fileFieldTarget.files[0]\n\n    if (file) {\n      const reader = new FileReader()\n\n      this.originalFileContentTypeValue = file.type\n      this.originalFileExtensionValue = this.#getFileExtension(file)\n\n      reader.onload = (e) => {\n        this.previewWrapperTarget.innerHTML = ''\n\n        let previewContent = this.previewTemplateTarget.content.cloneNode(true)\n        previewContent.querySelector('img').src = e.target.result\n        let wrapper = previewContent.querySelector('[data-controller=\"image-crop\"]')\n\n        wrapper.setAttribute('data-image-crop-content-type-value', this.originalFileContentTypeValue)\n\n        this.previewWrapperTarget.appendChild(previewContent)\n      }\n\n      reader.readAsDataURL(file)\n    } else {\n      this.previewWrapperTarget.innerHTML = ''\n    }\n  }\n\n  /* Only accept images as inline embeds */\n  handleTrixFileAccept(event) {\n    const { type } = event.file\n    const regex = /^image\\/.+/\n    const isMatch = regex.test(type)\n\n    if (!isMatch) {\n      event.preventDefault()\n      toast('alert', 'Unaccepted file type.', 'flash')\n    }\n  }\n\n  handleTrixAttachmentAdd(event) {\n    const contentType = event.attachment?.attachment?.attributes?.values?.contentType\n    if (contentType == 'image') {\n      event.attachment.remove()\n    }\n  }\n\n  #getFileExtension(file) {\n    if (!(file instanceof File)) {\n      throw new Error('Input must be a File object')\n    }\n\n    const fileName = file.name\n    const fileNameParts = fileName.split('.')\n\n    if (fileNameParts.length === 1) {\n      return ''\n    }\n\n    return fileNameParts[fileNameParts.length - 1].toLowerCase()\n  }\n}\n", "import ApplicationController from '../../controllers/application_controller'\n\nexport default class extends ApplicationController {\n  iframeLoaded() {\n    this.resize()\n    // Voomly embeds take time to load, so we need to resize the iframe after they're loaded\n    this.element.contentWindow.addEventListener('voomly:video:ready', this.resize.bind(this))\n  }\n\n  resize() {\n    const height = this.element.contentWindow.document.body.scrollHeight\n    this.element.style.height = height + 50 + 'px'\n  }\n}\n", "import ApplicationController from '../../controllers/application_controller'\nimport { toast } from '../../utils/toast'\nimport Tribute from 'tributejs'\nimport Trix from 'trix'\nimport { get, post } from '@rails/request.js'\n\nexport default class extends ApplicationController {\n  static values = {\n    mentionableUsersUrl: String,\n    validateMembershipsPath: String,\n  }\n\n  connect() {\n    this.editor = this.element.editor\n    this.positionMenuAnchor = this.positionMenuAnchor.bind(this)\n    this.initializeTribute()\n  }\n\n  disconnect() {\n    this.element.removeEventListener('tribute-active-true', this.positionMenuAnchor)\n    this.menuAnchor?.remove()\n    this.tribute.detach(this.element)\n  }\n\n  initializeTribute() {\n    // Tribute appends its menu to <body>. Web Awesome dialogs and drawers are native modal <dialog>s,\n    // which make everything outside them inert and paint above it, so inside one the menu is mounted\n    // on a fixed-position anchor within the dialog and positioned from here instead.\n    const modalHost = this.element.closest('wa-dialog, wa-drawer')\n    if (modalHost) {\n      this.menuAnchor = document.createElement('div')\n      this.menuAnchor.className = 'tribute-anchor'\n      modalHost.append(this.menuAnchor)\n      this.element.addEventListener('tribute-active-true', this.positionMenuAnchor)\n    }\n\n    this.tribute = new Tribute({\n      allowSpaces: true,\n      lookup: 'full_name',\n      containerClass: 'tribute-container z-[1000]',\n      itemClass: 'text-color-weak content-md flex items-center',\n      values: this.fetchUsers.bind(this),\n      menuItemTemplate: function (item) {\n        return '<img class=\"!size-6\" src=\"' + item.original.avatar_url + '\">' + item.string\n      },\n      menuContainer: this.menuAnchor,\n      positionMenu: !this.menuAnchor,\n    })\n    this.tribute.attach(this.element)\n    this.tribute.range.pasteHtml = this._pasteHtml.bind(this)\n    this.element.addEventListener('tribute-replaced', this.replaced)\n  }\n\n  positionMenuAnchor() {\n    const selection = window.getSelection()\n    let rect = selection?.rangeCount ? selection.getRangeAt(0).getBoundingClientRect() : null\n    if (!rect || (rect.width === 0 && rect.height === 0)) rect = this.element.getBoundingClientRect()\n\n    this.menuAnchor.style.top = `${rect.bottom}px`\n    this.menuAnchor.style.left = `${rect.left}px`\n  }\n\n  async fetchUsers(text, callback) {\n    const response = await get(this.mentionableUsersUrlValue, {\n      responseKind: 'json',\n      query: new URLSearchParams({ q: text }),\n    })\n\n    if (response.ok) {\n      const body = await response.json\n      callback(body)\n    } else {\n      callback([])\n    }\n  }\n\n  replaced(e) {\n    let mention = e.detail.item.original\n    let attachment = new Trix.Attachment({\n      sgid: mention.sgid,\n      content: mention.content,\n      attachmentType: 'mention',\n    })\n    this.editor.insertAttachment(attachment)\n    this.editor.insertString(' ')\n  }\n\n  _pasteHtml(html, startPos, endPos) {\n    let position = this.editor.getPosition()\n    this.editor.setSelectedRange([position - (endPos - startPos), position])\n    this.editor.deleteInDirection('backward')\n  }\n\n  handleTopicChanged({ detail: { spaceId } }) {\n    if (!this.hasMentionableUsersUrlValue) return\n\n    const url = new URL(this.mentionableUsersUrlValue, window.location.origin)\n\n    // Don't bother if we're not restricting to a space\n    if (!url.searchParams.has('space_id')) return\n\n    url.searchParams.set('space_id', spaceId)\n    this.mentionableUsersUrlValue = url.pathname + url.search\n\n    this.#validateMentionedUsers(spaceId)\n  }\n\n  async #validateMentionedUsers(spaceId) {\n    if (!this.hasValidateMembershipsPathValue) return\n\n    const mentions = this.editor\n      .getDocument()\n      .getAttachments()\n      .filter((attachment) => attachment.attributes.values.attachmentType == 'mention')\n      .map((attachment) => ({\n        attachment,\n        sgid: attachment.attributes.values.sgid,\n        content: attachment.attributes.values.content,\n      }))\n\n    if (mentions.length === 0) return\n\n    const response = await post(this.validateMembershipsPathValue, {\n      body: JSON.stringify({\n        space_id: spaceId,\n        mentions: mentions.map((mention) => mention.sgid),\n      }),\n      responseKind: 'json',\n    })\n\n    const validatedMentions = await response.json\n\n    // Loop through and remove invalid mentions\n    validatedMentions.forEach(({ sgid, valid }) => {\n      if (valid) return\n\n      const mention = mentions.find((mention) => mention.sgid === sgid)\n\n      if (!mention) return\n\n      // Get plain text mention\n      const tempDiv = document.createElement('div')\n      tempDiv.innerHTML = mention.content\n      const plainTextContent = (tempDiv.textContent || tempDiv.innerText).trim()\n\n      /*\n       * Calculate position of mention and replace with plain text\n       * NOTE: don't save the document or pieces to variables.\n       * They need to be recalculated after each insertion\n       */\n      const pieces = this.editor.getDocument().getPieces()\n      const pieceIndex = pieces.findIndex((piece) => piece.attachment == mention.attachment)\n\n      if (pieceIndex === -1) return\n\n      const position = pieces.slice(0, pieceIndex).reduce((sum, piece) => sum + piece.length, 0)\n      this.editor.setSelectedRange([position, position + 1])\n      this.editor.deleteInDirection('forward')\n      this.editor.insertString(plainTextContent)\n    })\n\n    if (validatedMentions.some(({ valid }) => !valid)) {\n      toast('alert', 'Some mentioned users were removed; They do not have access to this topic.', 'flash', 5000)\n    }\n  }\n}\n", "import Chart from 'stimulus-chartjs'\nimport merge from 'lodash.merge'\n\nexport default class extends Chart {\n  static values = {\n    locale: { type: String, default: 'en' },\n  }\n\n  connect() {\n    super.connect()\n    this.applyDashedLineToLastSegment()\n    this.chart.resize()\n  }\n\n  redraw(event) {\n    const index = event.currentTarget.dataset.index\n    this.chart.setDatasetVisibility(index, !this.chart.isDatasetVisible(index))\n    this.chart.update()\n  }\n\n  applyDashedLineToLastSegment() {\n    if (this.chart.data.datasets.length > 0) {\n      this.chart.data.datasets.forEach((dataset) => {\n        if (dataset.data.length >= 2) {\n          dataset.segment = {\n            borderWidth: (ctx) => (ctx.p1DataIndex === dataset.data.length - 1 ? 2 : 3),\n            borderDash: (ctx) => (ctx.p1DataIndex === dataset.data.length - 1 ? [5, 5] : []),\n          }\n        }\n      })\n\n      this.chart.update()\n    }\n  }\n\n  get chartOptions() {\n    const locale = this.localeValue\n    const tooltipCallback = {\n      plugins: {\n        tooltip: {\n          callbacks: {\n            label: function (context) {\n              // The server already translates dataset labels into the contact's locale.\n              let label = context.dataset.label || ''\n\n              if (label) {\n                label += ': '\n              }\n\n              if (context.parsed.y !== null) {\n                if (context.dataset.label.toLowerCase() === 'commissions') {\n                  label += new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(\n                    context.parsed.y\n                  )\n                } else {\n                  label += context.parsed.y\n                }\n              }\n\n              return label\n            },\n            title: function (context) {\n              if (context.length > 0) {\n                const chart = context[0].chart\n                const index = context[0].dataIndex\n\n                let dateValue = null\n                if (chart.data.labels && chart.data.labels[index]) {\n                  dateValue = chart.data.labels[index]\n                }\n\n                if (dateValue) {\n                  const date = new Date(dateValue)\n                  if (!isNaN(date.getTime())) {\n                    return new Intl.DateTimeFormat(locale, {\n                      month: 'long',\n                      day: 'numeric',\n                    }).format(date)\n                  }\n                }\n              }\n              return ''\n            },\n          },\n        },\n      },\n      scales: {\n        x: {\n          ticks: {\n            callback: function (value, index) {\n              // For category scale, get the label directly\n              const chart = this.chart\n              const label = chart.data.labels[index]\n\n              if (label) {\n                const date = new Date(label)\n                return new Intl.DateTimeFormat(locale, {\n                  month: 'short',\n                  day: 'numeric',\n                }).format(date)\n              }\n              return label\n            },\n          },\n        },\n      },\n    }\n    return merge(super.chartOptions, tooltipCallback)\n  }\n}\n", "var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nimport { Controller } from \"@hotwired/stimulus\";\nimport Chart from \"chart.js/auto\";\nclass src_default extends Controller {\n  connect() {\n    const element = this.hasCanvasTarget ? this.canvasTarget : this.element;\n    this.chart = new Chart(element.getContext(\"2d\"), {\n      type: this.typeValue,\n      data: this.chartData,\n      options: this.chartOptions\n    });\n  }\n  disconnect() {\n    this.chart.destroy();\n    this.chart = void 0;\n  }\n  get chartData() {\n    if (!this.hasDataValue) {\n      console.warn(\"[stimulus-chartjs] You need to pass data as JSON to see the chart.\");\n    }\n    return this.dataValue;\n  }\n  get chartOptions() {\n    return __spreadValues(__spreadValues({}, this.defaultOptions), this.optionsValue);\n  }\n  get defaultOptions() {\n    return {};\n  }\n}\nsrc_default.targets = [\"canvas\"];\nsrc_default.values = {\n  type: {\n    type: String,\n    default: \"line\"\n  },\n  data: Object,\n  options: Object\n};\nexport { src_default as default };\n", "import {Chart, registerables} from '../dist/chart.mjs';\n\nChart.register(...registerables);\n\nexport default Chart;\n", "/*!\n * Chart.js v3.9.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, d as defaults, i as isObject, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as createContext, j as defined, s as sign, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as log10, A as _factorize, B as finiteOrDefault, C as callback, D as _addGrace, E as _limitValue, F as toDegrees, G as _measureText, I as _int16Range, J as _alignPixel, K as toPadding, L as clipArea, M as renderText, N as unclipArea, O as toFont, Q as each, R as _toLeftRightCenter, S as _alignStartEnd, U as overrides, V as merge, W as _capitalize, X as getRelativePosition, Y as _rlookupByKey, Z as _lookupByKey, $ as _isPointInArea, a0 as getAngleFromPoint, a1 as getMaximumSize, a2 as _getParentNode, a3 as readUsedSize, a4 as throttled, a5 as supportsEventListenerOptions, a6 as _isDomSupported, a7 as descriptors, a8 as isFunction, a9 as _attachContext, aa as _createResolver, ab as _descriptors, ac as mergeIf, ad as uid, ae as debounce, af as retinaScale, ag as clearCanvas, ah as setsEqual, ai as _elementsEqual, aj as _isClickEvent, ak as _isBetween, al as _readValueToProps, am as _updateBezierControlPoints, an as _computeSegments, ao as _boundSegments, ap as _steppedInterpolation, aq as _bezierInterpolation, ar as _pointInLine, as as _steppedLineTo, at as _bezierCurveTo, au as drawPoint, av as addRoundedRectPath, aw as toTRBL, ax as toTRBLCorners, ay as _boundSegment, az as _normalizeAngle, aA as getRtlAdapter, aB as overrideTextDirection, aC as _textX, aD as restoreTextDirection, aE as drawPointLegend, aF as noop, aG as distanceBetweenPoints, aH as _setMinAndMaxByKey, aI as niceNum, aJ as almostWhole, aK as almostEquals, aL as _decimalPlaces, aM as _longestText, aN as _filterBetween, aO as _lookup } from './chunks/helpers.segment.mjs';\nexport { d as defaults } from './chunks/helpers.segment.mjs';\n\nclass Animator {\n  constructor() {\n    this._request = null;\n    this._charts = new Map();\n    this._running = false;\n    this._lastDate = undefined;\n  }\n  _notify(chart, anims, date, type) {\n    const callbacks = anims.listeners[type];\n    const numSteps = anims.duration;\n    callbacks.forEach(fn => fn({\n      chart,\n      initial: anims.initial,\n      numSteps,\n      currentStep: Math.min(date - anims.start, numSteps)\n    }));\n  }\n  _refresh() {\n    if (this._request) {\n      return;\n    }\n    this._running = true;\n    this._request = requestAnimFrame.call(window, () => {\n      this._update();\n      this._request = null;\n      if (this._running) {\n        this._refresh();\n      }\n    });\n  }\n  _update(date = Date.now()) {\n    let remaining = 0;\n    this._charts.forEach((anims, chart) => {\n      if (!anims.running || !anims.items.length) {\n        return;\n      }\n      const items = anims.items;\n      let i = items.length - 1;\n      let draw = false;\n      let item;\n      for (; i >= 0; --i) {\n        item = items[i];\n        if (item._active) {\n          if (item._total > anims.duration) {\n            anims.duration = item._total;\n          }\n          item.tick(date);\n          draw = true;\n        } else {\n          items[i] = items[items.length - 1];\n          items.pop();\n        }\n      }\n      if (draw) {\n        chart.draw();\n        this._notify(chart, anims, date, 'progress');\n      }\n      if (!items.length) {\n        anims.running = false;\n        this._notify(chart, anims, date, 'complete');\n        anims.initial = false;\n      }\n      remaining += items.length;\n    });\n    this._lastDate = date;\n    if (remaining === 0) {\n      this._running = false;\n    }\n  }\n  _getAnims(chart) {\n    const charts = this._charts;\n    let anims = charts.get(chart);\n    if (!anims) {\n      anims = {\n        running: false,\n        initial: true,\n        items: [],\n        listeners: {\n          complete: [],\n          progress: []\n        }\n      };\n      charts.set(chart, anims);\n    }\n    return anims;\n  }\n  listen(chart, event, cb) {\n    this._getAnims(chart).listeners[event].push(cb);\n  }\n  add(chart, items) {\n    if (!items || !items.length) {\n      return;\n    }\n    this._getAnims(chart).items.push(...items);\n  }\n  has(chart) {\n    return this._getAnims(chart).items.length > 0;\n  }\n  start(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims) {\n      return;\n    }\n    anims.running = true;\n    anims.start = Date.now();\n    anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n    this._refresh();\n  }\n  running(chart) {\n    if (!this._running) {\n      return false;\n    }\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.running || !anims.items.length) {\n      return false;\n    }\n    return true;\n  }\n  stop(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.items.length) {\n      return;\n    }\n    const items = anims.items;\n    let i = items.length - 1;\n    for (; i >= 0; --i) {\n      items[i].cancel();\n    }\n    anims.items = [];\n    this._notify(chart, anims, Date.now(), 'complete');\n  }\n  remove(chart) {\n    return this._charts.delete(chart);\n  }\n}\nvar animator = new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n  boolean(from, to, factor) {\n    return factor > 0.5 ? to : from;\n  },\n  color(from, to, factor) {\n    const c0 = color(from || transparent);\n    const c1 = c0.valid && color(to || transparent);\n    return c1 && c1.valid\n      ? c1.mix(c0, factor).hexString()\n      : to;\n  },\n  number(from, to, factor) {\n    return from + (to - from) * factor;\n  }\n};\nclass Animation {\n  constructor(cfg, target, prop, to) {\n    const currentValue = target[prop];\n    to = resolve([cfg.to, to, currentValue, cfg.from]);\n    const from = resolve([cfg.from, currentValue, to]);\n    this._active = true;\n    this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n    this._easing = effects[cfg.easing] || effects.linear;\n    this._start = Math.floor(Date.now() + (cfg.delay || 0));\n    this._duration = this._total = Math.floor(cfg.duration);\n    this._loop = !!cfg.loop;\n    this._target = target;\n    this._prop = prop;\n    this._from = from;\n    this._to = to;\n    this._promises = undefined;\n  }\n  active() {\n    return this._active;\n  }\n  update(cfg, to, date) {\n    if (this._active) {\n      this._notify(false);\n      const currentValue = this._target[this._prop];\n      const elapsed = date - this._start;\n      const remain = this._duration - elapsed;\n      this._start = date;\n      this._duration = Math.floor(Math.max(remain, cfg.duration));\n      this._total += elapsed;\n      this._loop = !!cfg.loop;\n      this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n      this._from = resolve([cfg.from, currentValue, to]);\n    }\n  }\n  cancel() {\n    if (this._active) {\n      this.tick(Date.now());\n      this._active = false;\n      this._notify(false);\n    }\n  }\n  tick(date) {\n    const elapsed = date - this._start;\n    const duration = this._duration;\n    const prop = this._prop;\n    const from = this._from;\n    const loop = this._loop;\n    const to = this._to;\n    let factor;\n    this._active = from !== to && (loop || (elapsed < duration));\n    if (!this._active) {\n      this._target[prop] = to;\n      this._notify(true);\n      return;\n    }\n    if (elapsed < 0) {\n      this._target[prop] = from;\n      return;\n    }\n    factor = (elapsed / duration) % 2;\n    factor = loop && factor > 1 ? 2 - factor : factor;\n    factor = this._easing(Math.min(1, Math.max(0, factor)));\n    this._target[prop] = this._fn(from, to, factor);\n  }\n  wait() {\n    const promises = this._promises || (this._promises = []);\n    return new Promise((res, rej) => {\n      promises.push({res, rej});\n    });\n  }\n  _notify(resolved) {\n    const method = resolved ? 'res' : 'rej';\n    const promises = this._promises || [];\n    for (let i = 0; i < promises.length; i++) {\n      promises[i][method]();\n    }\n  }\n}\n\nconst numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\ndefaults.set('animation', {\n  delay: undefined,\n  duration: 1000,\n  easing: 'easeOutQuart',\n  fn: undefined,\n  from: undefined,\n  loop: undefined,\n  to: undefined,\n  type: undefined,\n});\nconst animationOptions = Object.keys(defaults.animation);\ndefaults.describe('animation', {\n  _fallback: false,\n  _indexable: false,\n  _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n});\ndefaults.set('animations', {\n  colors: {\n    type: 'color',\n    properties: colors\n  },\n  numbers: {\n    type: 'number',\n    properties: numbers\n  },\n});\ndefaults.describe('animations', {\n  _fallback: 'animation',\n});\ndefaults.set('transitions', {\n  active: {\n    animation: {\n      duration: 400\n    }\n  },\n  resize: {\n    animation: {\n      duration: 0\n    }\n  },\n  show: {\n    animations: {\n      colors: {\n        from: 'transparent'\n      },\n      visible: {\n        type: 'boolean',\n        duration: 0\n      },\n    }\n  },\n  hide: {\n    animations: {\n      colors: {\n        to: 'transparent'\n      },\n      visible: {\n        type: 'boolean',\n        easing: 'linear',\n        fn: v => v | 0\n      },\n    }\n  }\n});\nclass Animations {\n  constructor(chart, config) {\n    this._chart = chart;\n    this._properties = new Map();\n    this.configure(config);\n  }\n  configure(config) {\n    if (!isObject(config)) {\n      return;\n    }\n    const animatedProps = this._properties;\n    Object.getOwnPropertyNames(config).forEach(key => {\n      const cfg = config[key];\n      if (!isObject(cfg)) {\n        return;\n      }\n      const resolved = {};\n      for (const option of animationOptions) {\n        resolved[option] = cfg[option];\n      }\n      (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n        if (prop === key || !animatedProps.has(prop)) {\n          animatedProps.set(prop, resolved);\n        }\n      });\n    });\n  }\n  _animateOptions(target, values) {\n    const newOptions = values.options;\n    const options = resolveTargetOptions(target, newOptions);\n    if (!options) {\n      return [];\n    }\n    const animations = this._createAnimations(options, newOptions);\n    if (newOptions.$shared) {\n      awaitAll(target.options.$animations, newOptions).then(() => {\n        target.options = newOptions;\n      }, () => {\n      });\n    }\n    return animations;\n  }\n  _createAnimations(target, values) {\n    const animatedProps = this._properties;\n    const animations = [];\n    const running = target.$animations || (target.$animations = {});\n    const props = Object.keys(values);\n    const date = Date.now();\n    let i;\n    for (i = props.length - 1; i >= 0; --i) {\n      const prop = props[i];\n      if (prop.charAt(0) === '$') {\n        continue;\n      }\n      if (prop === 'options') {\n        animations.push(...this._animateOptions(target, values));\n        continue;\n      }\n      const value = values[prop];\n      let animation = running[prop];\n      const cfg = animatedProps.get(prop);\n      if (animation) {\n        if (cfg && animation.active()) {\n          animation.update(cfg, value, date);\n          continue;\n        } else {\n          animation.cancel();\n        }\n      }\n      if (!cfg || !cfg.duration) {\n        target[prop] = value;\n        continue;\n      }\n      running[prop] = animation = new Animation(cfg, target, prop, value);\n      animations.push(animation);\n    }\n    return animations;\n  }\n  update(target, values) {\n    if (this._properties.size === 0) {\n      Object.assign(target, values);\n      return;\n    }\n    const animations = this._createAnimations(target, values);\n    if (animations.length) {\n      animator.add(this._chart, animations);\n      return true;\n    }\n  }\n}\nfunction awaitAll(animations, properties) {\n  const running = [];\n  const keys = Object.keys(properties);\n  for (let i = 0; i < keys.length; i++) {\n    const anim = animations[keys[i]];\n    if (anim && anim.active()) {\n      running.push(anim.wait());\n    }\n  }\n  return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n  if (!newOptions) {\n    return;\n  }\n  let options = target.options;\n  if (!options) {\n    target.options = newOptions;\n    return;\n  }\n  if (options.$shared) {\n    target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n  }\n  return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n  const opts = scale && scale.options || {};\n  const reverse = opts.reverse;\n  const min = opts.min === undefined ? allowedOverflow : 0;\n  const max = opts.max === undefined ? allowedOverflow : 0;\n  return {\n    start: reverse ? max : min,\n    end: reverse ? min : max\n  };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n  if (allowedOverflow === false) {\n    return false;\n  }\n  const x = scaleClip(xScale, allowedOverflow);\n  const y = scaleClip(yScale, allowedOverflow);\n  return {\n    top: y.end,\n    right: x.end,\n    bottom: y.start,\n    left: x.start\n  };\n}\nfunction toClip(value) {\n  let t, r, b, l;\n  if (isObject(value)) {\n    t = value.top;\n    r = value.right;\n    b = value.bottom;\n    l = value.left;\n  } else {\n    t = r = b = l = value;\n  }\n  return {\n    top: t,\n    right: r,\n    bottom: b,\n    left: l,\n    disabled: value === false\n  };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n  const keys = [];\n  const metasets = chart._getSortedDatasetMetas(filterVisible);\n  let i, ilen;\n  for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n    keys.push(metasets[i].index);\n  }\n  return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n  const keys = stack.keys;\n  const singleMode = options.mode === 'single';\n  let i, ilen, datasetIndex, otherValue;\n  if (value === null) {\n    return;\n  }\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    datasetIndex = +keys[i];\n    if (datasetIndex === dsIndex) {\n      if (options.all) {\n        continue;\n      }\n      break;\n    }\n    otherValue = stack.values[datasetIndex];\n    if (isNumberFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n      value += otherValue;\n    }\n  }\n  return value;\n}\nfunction convertObjectDataToArray(data) {\n  const keys = Object.keys(data);\n  const adata = new Array(keys.length);\n  let i, ilen, key;\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    key = keys[i];\n    adata[i] = {\n      x: key,\n      y: data[key]\n    };\n  }\n  return adata;\n}\nfunction isStacked(scale, meta) {\n  const stacked = scale && scale.options.stacked;\n  return stacked || (stacked === undefined && meta.stack !== undefined);\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n  return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n  const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n  return {\n    min: minDefined ? min : Number.NEGATIVE_INFINITY,\n    max: maxDefined ? max : Number.POSITIVE_INFINITY\n  };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n  const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n  return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n  for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n    const value = stack[meta.index];\n    if ((positive && value > 0) || (!positive && value < 0)) {\n      return meta.index;\n    }\n  }\n  return null;\n}\nfunction updateStacks(controller, parsed) {\n  const {chart, _cachedMeta: meta} = controller;\n  const stacks = chart._stacks || (chart._stacks = {});\n  const {iScale, vScale, index: datasetIndex} = meta;\n  const iAxis = iScale.axis;\n  const vAxis = vScale.axis;\n  const key = getStackKey(iScale, vScale, meta);\n  const ilen = parsed.length;\n  let stack;\n  for (let i = 0; i < ilen; ++i) {\n    const item = parsed[i];\n    const {[iAxis]: index, [vAxis]: value} = item;\n    const itemStacks = item._stacks || (item._stacks = {});\n    stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n    stack[datasetIndex] = value;\n    stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n    stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n  }\n}\nfunction getFirstScaleId(chart, axis) {\n  const scales = chart.scales;\n  return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n  return createContext(parent,\n    {\n      active: false,\n      dataset: undefined,\n      datasetIndex: index,\n      index,\n      mode: 'default',\n      type: 'dataset'\n    }\n  );\n}\nfunction createDataContext(parent, index, element) {\n  return createContext(parent, {\n    active: false,\n    dataIndex: index,\n    parsed: undefined,\n    raw: undefined,\n    element,\n    index,\n    mode: 'default',\n    type: 'data'\n  });\n}\nfunction clearStacks(meta, items) {\n  const datasetIndex = meta.controller.index;\n  const axis = meta.vScale && meta.vScale.axis;\n  if (!axis) {\n    return;\n  }\n  items = items || meta._parsed;\n  for (const parsed of items) {\n    const stacks = parsed._stacks;\n    if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n      return;\n    }\n    delete stacks[axis][datasetIndex];\n  }\n}\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n  && {keys: getSortedDatasetIndices(chart, true), values: null};\nclass DatasetController {\n  constructor(chart, datasetIndex) {\n    this.chart = chart;\n    this._ctx = chart.ctx;\n    this.index = datasetIndex;\n    this._cachedDataOpts = {};\n    this._cachedMeta = this.getMeta();\n    this._type = this._cachedMeta.type;\n    this.options = undefined;\n    this._parsing = false;\n    this._data = undefined;\n    this._objectData = undefined;\n    this._sharedOptions = undefined;\n    this._drawStart = undefined;\n    this._drawCount = undefined;\n    this.enableOptionSharing = false;\n    this.supportsDecimation = false;\n    this.$context = undefined;\n    this._syncList = [];\n    this.initialize();\n  }\n  initialize() {\n    const meta = this._cachedMeta;\n    this.configure();\n    this.linkScales();\n    meta._stacked = isStacked(meta.vScale, meta);\n    this.addElements();\n  }\n  updateIndex(datasetIndex) {\n    if (this.index !== datasetIndex) {\n      clearStacks(this._cachedMeta);\n    }\n    this.index = datasetIndex;\n  }\n  linkScales() {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n    const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n    const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n    const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n    const indexAxis = meta.indexAxis;\n    const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n    const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n    meta.xScale = this.getScaleForId(xid);\n    meta.yScale = this.getScaleForId(yid);\n    meta.rScale = this.getScaleForId(rid);\n    meta.iScale = this.getScaleForId(iid);\n    meta.vScale = this.getScaleForId(vid);\n  }\n  getDataset() {\n    return this.chart.data.datasets[this.index];\n  }\n  getMeta() {\n    return this.chart.getDatasetMeta(this.index);\n  }\n  getScaleForId(scaleID) {\n    return this.chart.scales[scaleID];\n  }\n  _getOtherScale(scale) {\n    const meta = this._cachedMeta;\n    return scale === meta.iScale\n      ? meta.vScale\n      : meta.iScale;\n  }\n  reset() {\n    this._update('reset');\n  }\n  _destroy() {\n    const meta = this._cachedMeta;\n    if (this._data) {\n      unlistenArrayEvents(this._data, this);\n    }\n    if (meta._stacked) {\n      clearStacks(meta);\n    }\n  }\n  _dataCheck() {\n    const dataset = this.getDataset();\n    const data = dataset.data || (dataset.data = []);\n    const _data = this._data;\n    if (isObject(data)) {\n      this._data = convertObjectDataToArray(data);\n    } else if (_data !== data) {\n      if (_data) {\n        unlistenArrayEvents(_data, this);\n        const meta = this._cachedMeta;\n        clearStacks(meta);\n        meta._parsed = [];\n      }\n      if (data && Object.isExtensible(data)) {\n        listenArrayEvents(data, this);\n      }\n      this._syncList = [];\n      this._data = data;\n    }\n  }\n  addElements() {\n    const meta = this._cachedMeta;\n    this._dataCheck();\n    if (this.datasetElementType) {\n      meta.dataset = new this.datasetElementType();\n    }\n  }\n  buildOrUpdateElements(resetNewElements) {\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    let stackChanged = false;\n    this._dataCheck();\n    const oldStacked = meta._stacked;\n    meta._stacked = isStacked(meta.vScale, meta);\n    if (meta.stack !== dataset.stack) {\n      stackChanged = true;\n      clearStacks(meta);\n      meta.stack = dataset.stack;\n    }\n    this._resyncElements(resetNewElements);\n    if (stackChanged || oldStacked !== meta._stacked) {\n      updateStacks(this, meta._parsed);\n    }\n  }\n  configure() {\n    const config = this.chart.config;\n    const scopeKeys = config.datasetScopeKeys(this._type);\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n    this.options = config.createResolver(scopes, this.getContext());\n    this._parsing = this.options.parsing;\n    this._cachedDataOpts = {};\n  }\n  parse(start, count) {\n    const {_cachedMeta: meta, _data: data} = this;\n    const {iScale, _stacked} = meta;\n    const iAxis = iScale.axis;\n    let sorted = start === 0 && count === data.length ? true : meta._sorted;\n    let prev = start > 0 && meta._parsed[start - 1];\n    let i, cur, parsed;\n    if (this._parsing === false) {\n      meta._parsed = data;\n      meta._sorted = true;\n      parsed = data;\n    } else {\n      if (isArray(data[start])) {\n        parsed = this.parseArrayData(meta, data, start, count);\n      } else if (isObject(data[start])) {\n        parsed = this.parseObjectData(meta, data, start, count);\n      } else {\n        parsed = this.parsePrimitiveData(meta, data, start, count);\n      }\n      const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n      for (i = 0; i < count; ++i) {\n        meta._parsed[i + start] = cur = parsed[i];\n        if (sorted) {\n          if (isNotInOrderComparedToPrev()) {\n            sorted = false;\n          }\n          prev = cur;\n        }\n      }\n      meta._sorted = sorted;\n    }\n    if (_stacked) {\n      updateStacks(this, parsed);\n    }\n  }\n  parsePrimitiveData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const labels = iScale.getLabels();\n    const singleScale = iScale === vScale;\n    const parsed = new Array(count);\n    let i, ilen, index;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      parsed[i] = {\n        [iAxis]: singleScale || iScale.parse(labels[index], index),\n        [vAxis]: vScale.parse(data[index], index)\n      };\n    }\n    return parsed;\n  }\n  parseArrayData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(item[0], index),\n        y: yScale.parse(item[1], index)\n      };\n    }\n    return parsed;\n  }\n  parseObjectData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n        y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n      };\n    }\n    return parsed;\n  }\n  getParsed(index) {\n    return this._cachedMeta._parsed[index];\n  }\n  getDataElement(index) {\n    return this._cachedMeta.data[index];\n  }\n  applyStack(scale, parsed, mode) {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const value = parsed[scale.axis];\n    const stack = {\n      keys: getSortedDatasetIndices(chart, true),\n      values: parsed._stacks[scale.axis]\n    };\n    return applyStack(stack, value, meta.index, {mode});\n  }\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    const parsedValue = parsed[scale.axis];\n    let value = parsedValue === null ? NaN : parsedValue;\n    const values = stack && parsed._stacks[scale.axis];\n    if (stack && values) {\n      stack.values = values;\n      value = applyStack(stack, parsedValue, this._cachedMeta.index);\n    }\n    range.min = Math.min(range.min, value);\n    range.max = Math.max(range.max, value);\n  }\n  getMinMax(scale, canStack) {\n    const meta = this._cachedMeta;\n    const _parsed = meta._parsed;\n    const sorted = meta._sorted && scale === meta.iScale;\n    const ilen = _parsed.length;\n    const otherScale = this._getOtherScale(scale);\n    const stack = createStack(canStack, meta, this.chart);\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n    const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n    let i, parsed;\n    function _skip() {\n      parsed = _parsed[i];\n      const otherValue = parsed[otherScale.axis];\n      return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n    }\n    for (i = 0; i < ilen; ++i) {\n      if (_skip()) {\n        continue;\n      }\n      this.updateRangeFromParsed(range, scale, parsed, stack);\n      if (sorted) {\n        break;\n      }\n    }\n    if (sorted) {\n      for (i = ilen - 1; i >= 0; --i) {\n        if (_skip()) {\n          continue;\n        }\n        this.updateRangeFromParsed(range, scale, parsed, stack);\n        break;\n      }\n    }\n    return range;\n  }\n  getAllParsedValues(scale) {\n    const parsed = this._cachedMeta._parsed;\n    const values = [];\n    let i, ilen, value;\n    for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n      value = parsed[i][scale.axis];\n      if (isNumberFinite(value)) {\n        values.push(value);\n      }\n    }\n    return values;\n  }\n  getMaxOverflow() {\n    return false;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const vScale = meta.vScale;\n    const parsed = this.getParsed(index);\n    return {\n      label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n      value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n    };\n  }\n  _update(mode) {\n    const meta = this._cachedMeta;\n    this.update(mode || 'default');\n    meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n  }\n  update(mode) {}\n  draw() {\n    const ctx = this._ctx;\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const elements = meta.data || [];\n    const area = chart.chartArea;\n    const active = [];\n    const start = this._drawStart || 0;\n    const count = this._drawCount || (elements.length - start);\n    const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n    let i;\n    if (meta.dataset) {\n      meta.dataset.draw(ctx, area, start, count);\n    }\n    for (i = start; i < start + count; ++i) {\n      const element = elements[i];\n      if (element.hidden) {\n        continue;\n      }\n      if (element.active && drawActiveElementsOnTop) {\n        active.push(element);\n      } else {\n        element.draw(ctx, area);\n      }\n    }\n    for (i = 0; i < active.length; ++i) {\n      active[i].draw(ctx, area);\n    }\n  }\n  getStyle(index, active) {\n    const mode = active ? 'active' : 'default';\n    return index === undefined && this._cachedMeta.dataset\n      ? this.resolveDatasetElementOptions(mode)\n      : this.resolveDataElementOptions(index || 0, mode);\n  }\n  getContext(index, active, mode) {\n    const dataset = this.getDataset();\n    let context;\n    if (index >= 0 && index < this._cachedMeta.data.length) {\n      const element = this._cachedMeta.data[index];\n      context = element.$context ||\n        (element.$context = createDataContext(this.getContext(), index, element));\n      context.parsed = this.getParsed(index);\n      context.raw = dataset.data[index];\n      context.index = context.dataIndex = index;\n    } else {\n      context = this.$context ||\n        (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n      context.dataset = dataset;\n      context.index = context.datasetIndex = this.index;\n    }\n    context.active = !!active;\n    context.mode = mode;\n    return context;\n  }\n  resolveDatasetElementOptions(mode) {\n    return this._resolveElementOptions(this.datasetElementType.id, mode);\n  }\n  resolveDataElementOptions(index, mode) {\n    return this._resolveElementOptions(this.dataElementType.id, mode, index);\n  }\n  _resolveElementOptions(elementType, mode = 'default', index) {\n    const active = mode === 'active';\n    const cache = this._cachedDataOpts;\n    const cacheKey = elementType + '-' + mode;\n    const cached = cache[cacheKey];\n    const sharing = this.enableOptionSharing && defined(index);\n    if (cached) {\n      return cloneIfNotShared(cached, sharing);\n    }\n    const config = this.chart.config;\n    const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n    const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n    const names = Object.keys(defaults.elements[elementType]);\n    const context = () => this.getContext(index, active);\n    const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n    if (values.$shared) {\n      values.$shared = sharing;\n      cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n    }\n    return values;\n  }\n  _resolveAnimations(index, transition, active) {\n    const chart = this.chart;\n    const cache = this._cachedDataOpts;\n    const cacheKey = `animation-${transition}`;\n    const cached = cache[cacheKey];\n    if (cached) {\n      return cached;\n    }\n    let options;\n    if (chart.options.animation !== false) {\n      const config = this.chart.config;\n      const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n      const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n      options = config.createResolver(scopes, this.getContext(index, active, transition));\n    }\n    const animations = new Animations(chart, options && options.animations);\n    if (options && options._cacheable) {\n      cache[cacheKey] = Object.freeze(animations);\n    }\n    return animations;\n  }\n  getSharedOptions(options) {\n    if (!options.$shared) {\n      return;\n    }\n    return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n  }\n  includeOptions(mode, sharedOptions) {\n    return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n  }\n  _getSharedOptions(start, mode) {\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const previouslySharedOptions = this._sharedOptions;\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions) || (sharedOptions !== previouslySharedOptions);\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n    return {sharedOptions, includeOptions};\n  }\n  updateElement(element, index, properties, mode) {\n    if (isDirectUpdateMode(mode)) {\n      Object.assign(element, properties);\n    } else {\n      this._resolveAnimations(index, mode).update(element, properties);\n    }\n  }\n  updateSharedOptions(sharedOptions, mode, newOptions) {\n    if (sharedOptions && !isDirectUpdateMode(mode)) {\n      this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n    }\n  }\n  _setStyle(element, index, mode, active) {\n    element.active = active;\n    const options = this.getStyle(index, active);\n    this._resolveAnimations(index, mode, active).update(element, {\n      options: (!active && this.getSharedOptions(options)) || options\n    });\n  }\n  removeHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', false);\n  }\n  setHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', true);\n  }\n  _removeDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n    if (element) {\n      this._setStyle(element, undefined, 'active', false);\n    }\n  }\n  _setDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n    if (element) {\n      this._setStyle(element, undefined, 'active', true);\n    }\n  }\n  _resyncElements(resetNewElements) {\n    const data = this._data;\n    const elements = this._cachedMeta.data;\n    for (const [method, arg1, arg2] of this._syncList) {\n      this[method](arg1, arg2);\n    }\n    this._syncList = [];\n    const numMeta = elements.length;\n    const numData = data.length;\n    const count = Math.min(numData, numMeta);\n    if (count) {\n      this.parse(0, count);\n    }\n    if (numData > numMeta) {\n      this._insertElements(numMeta, numData - numMeta, resetNewElements);\n    } else if (numData < numMeta) {\n      this._removeElements(numData, numMeta - numData);\n    }\n  }\n  _insertElements(start, count, resetNewElements = true) {\n    const meta = this._cachedMeta;\n    const data = meta.data;\n    const end = start + count;\n    let i;\n    const move = (arr) => {\n      arr.length += count;\n      for (i = arr.length - 1; i >= end; i--) {\n        arr[i] = arr[i - count];\n      }\n    };\n    move(data);\n    for (i = start; i < end; ++i) {\n      data[i] = new this.dataElementType();\n    }\n    if (this._parsing) {\n      move(meta._parsed);\n    }\n    this.parse(start, count);\n    if (resetNewElements) {\n      this.updateElements(data, start, count, 'reset');\n    }\n  }\n  updateElements(element, start, count, mode) {}\n  _removeElements(start, count) {\n    const meta = this._cachedMeta;\n    if (this._parsing) {\n      const removed = meta._parsed.splice(start, count);\n      if (meta._stacked) {\n        clearStacks(meta, removed);\n      }\n    }\n    meta.data.splice(start, count);\n  }\n  _sync(args) {\n    if (this._parsing) {\n      this._syncList.push(args);\n    } else {\n      const [method, arg1, arg2] = args;\n      this[method](arg1, arg2);\n    }\n    this.chart._dataChanges.push([this.index, ...args]);\n  }\n  _onDataPush() {\n    const count = arguments.length;\n    this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n  }\n  _onDataPop() {\n    this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n  }\n  _onDataShift() {\n    this._sync(['_removeElements', 0, 1]);\n  }\n  _onDataSplice(start, count) {\n    if (count) {\n      this._sync(['_removeElements', start, count]);\n    }\n    const newCount = arguments.length - 2;\n    if (newCount) {\n      this._sync(['_insertElements', start, newCount]);\n    }\n  }\n  _onDataUnshift() {\n    this._sync(['_insertElements', 0, arguments.length]);\n  }\n}\nDatasetController.defaults = {};\nDatasetController.prototype.datasetElementType = null;\nDatasetController.prototype.dataElementType = null;\n\nfunction getAllScaleValues(scale, type) {\n  if (!scale._cache.$bar) {\n    const visibleMetas = scale.getMatchingVisibleMetas(type);\n    let values = [];\n    for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n      values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n    }\n    scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n  }\n  return scale._cache.$bar;\n}\nfunction computeMinSampleSize(meta) {\n  const scale = meta.iScale;\n  const values = getAllScaleValues(scale, meta.type);\n  let min = scale._length;\n  let i, ilen, curr, prev;\n  const updateMinAndPrev = () => {\n    if (curr === 32767 || curr === -32768) {\n      return;\n    }\n    if (defined(prev)) {\n      min = Math.min(min, Math.abs(curr - prev) || min);\n    }\n    prev = curr;\n  };\n  for (i = 0, ilen = values.length; i < ilen; ++i) {\n    curr = scale.getPixelForValue(values[i]);\n    updateMinAndPrev();\n  }\n  prev = undefined;\n  for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n    curr = scale.getPixelForTick(i);\n    updateMinAndPrev();\n  }\n  return min;\n}\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n  const thickness = options.barThickness;\n  let size, ratio;\n  if (isNullOrUndef(thickness)) {\n    size = ruler.min * options.categoryPercentage;\n    ratio = options.barPercentage;\n  } else {\n    size = thickness * stackCount;\n    ratio = 1;\n  }\n  return {\n    chunk: size / stackCount,\n    ratio,\n    start: ruler.pixels[index] - (size / 2)\n  };\n}\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n  const pixels = ruler.pixels;\n  const curr = pixels[index];\n  let prev = index > 0 ? pixels[index - 1] : null;\n  let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n  const percent = options.categoryPercentage;\n  if (prev === null) {\n    prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n  }\n  if (next === null) {\n    next = curr + curr - prev;\n  }\n  const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n  const size = Math.abs(next - prev) / 2 * percent;\n  return {\n    chunk: size / stackCount,\n    ratio: options.barPercentage,\n    start\n  };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n  const startValue = vScale.parse(entry[0], i);\n  const endValue = vScale.parse(entry[1], i);\n  const min = Math.min(startValue, endValue);\n  const max = Math.max(startValue, endValue);\n  let barStart = min;\n  let barEnd = max;\n  if (Math.abs(min) > Math.abs(max)) {\n    barStart = max;\n    barEnd = min;\n  }\n  item[vScale.axis] = barEnd;\n  item._custom = {\n    barStart,\n    barEnd,\n    start: startValue,\n    end: endValue,\n    min,\n    max\n  };\n}\nfunction parseValue(entry, item, vScale, i) {\n  if (isArray(entry)) {\n    parseFloatBar(entry, item, vScale, i);\n  } else {\n    item[vScale.axis] = vScale.parse(entry, i);\n  }\n  return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n  const iScale = meta.iScale;\n  const vScale = meta.vScale;\n  const labels = iScale.getLabels();\n  const singleScale = iScale === vScale;\n  const parsed = [];\n  let i, ilen, item, entry;\n  for (i = start, ilen = start + count; i < ilen; ++i) {\n    entry = data[i];\n    item = {};\n    item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n    parsed.push(parseValue(entry, item, vScale, i));\n  }\n  return parsed;\n}\nfunction isFloatBar(custom) {\n  return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n  if (size !== 0) {\n    return sign(size);\n  }\n  return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n  let reverse, start, end, top, bottom;\n  if (properties.horizontal) {\n    reverse = properties.base > properties.x;\n    start = 'left';\n    end = 'right';\n  } else {\n    reverse = properties.base < properties.y;\n    start = 'bottom';\n    end = 'top';\n  }\n  if (reverse) {\n    top = 'end';\n    bottom = 'start';\n  } else {\n    top = 'start';\n    bottom = 'end';\n  }\n  return {start, end, reverse, top, bottom};\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n  let edge = options.borderSkipped;\n  const res = {};\n  if (!edge) {\n    properties.borderSkipped = res;\n    return;\n  }\n  if (edge === true) {\n    properties.borderSkipped = {top: true, right: true, bottom: true, left: true};\n    return;\n  }\n  const {start, end, reverse, top, bottom} = borderProps(properties);\n  if (edge === 'middle' && stack) {\n    properties.enableBorderRadius = true;\n    if ((stack._top || 0) === index) {\n      edge = top;\n    } else if ((stack._bottom || 0) === index) {\n      edge = bottom;\n    } else {\n      res[parseEdge(bottom, start, end, reverse)] = true;\n      edge = top;\n    }\n  }\n  res[parseEdge(edge, start, end, reverse)] = true;\n  properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n  if (reverse) {\n    edge = swap(edge, a, b);\n    edge = startEnd(edge, b, a);\n  } else {\n    edge = startEnd(edge, a, b);\n  }\n  return edge;\n}\nfunction swap(orig, v1, v2) {\n  return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n  return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n  properties.inflateAmount = inflateAmount === 'auto'\n    ? ratio === 1 ? 0.33 : 0\n    : inflateAmount;\n}\nclass BarController extends DatasetController {\n  parsePrimitiveData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n  parseArrayData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n  parseObjectData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const parsed = [];\n    let i, ilen, item, obj;\n    for (i = start, ilen = start + count; i < ilen; ++i) {\n      obj = data[i];\n      item = {};\n      item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n      parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n    }\n    return parsed;\n  }\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    super.updateRangeFromParsed(range, scale, parsed, stack);\n    const custom = parsed._custom;\n    if (custom && scale === this._cachedMeta.vScale) {\n      range.min = Math.min(range.min, custom.min);\n      range.max = Math.max(range.max, custom.max);\n    }\n  }\n  getMaxOverflow() {\n    return 0;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const {iScale, vScale} = meta;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const value = isFloatBar(custom)\n      ? '[' + custom.start + ', ' + custom.end + ']'\n      : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n    return {\n      label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n      value\n    };\n  }\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n    const meta = this._cachedMeta;\n    meta.stack = this.getDataset().stack;\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    this.updateElements(meta.data, 0, meta.data.length, mode);\n  }\n  updateElements(bars, start, count, mode) {\n    const reset = mode === 'reset';\n    const {index, _cachedMeta: {vScale}} = this;\n    const base = vScale.getBasePixel();\n    const horizontal = vScale.isHorizontal();\n    const ruler = this._getRuler();\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    for (let i = start; i < start + count; i++) {\n      const parsed = this.getParsed(i);\n      const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n      const ipixels = this._calculateBarIndexPixels(i, ruler);\n      const stack = (parsed._stacks || {})[vScale.axis];\n      const properties = {\n        horizontal,\n        base: vpixels.base,\n        enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n        x: horizontal ? vpixels.head : ipixels.center,\n        y: horizontal ? ipixels.center : vpixels.head,\n        height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n        width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n      }\n      const options = properties.options || bars[i].options;\n      setBorderSkipped(properties, options, stack, index);\n      setInflateAmount(properties, options, ruler.ratio);\n      this.updateElement(bars[i], i, properties, mode);\n    }\n  }\n  _getStacks(last, dataIndex) {\n    const {iScale} = this._cachedMeta;\n    const metasets = iScale.getMatchingVisibleMetas(this._type)\n      .filter(meta => meta.controller.options.grouped);\n    const stacked = iScale.options.stacked;\n    const stacks = [];\n    const skipNull = (meta) => {\n      const parsed = meta.controller.getParsed(dataIndex);\n      const val = parsed && parsed[meta.vScale.axis];\n      if (isNullOrUndef(val) || isNaN(val)) {\n        return true;\n      }\n    };\n    for (const meta of metasets) {\n      if (dataIndex !== undefined && skipNull(meta)) {\n        continue;\n      }\n      if (stacked === false || stacks.indexOf(meta.stack) === -1 ||\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\n        stacks.push(meta.stack);\n      }\n      if (meta.index === last) {\n        break;\n      }\n    }\n    if (!stacks.length) {\n      stacks.push(undefined);\n    }\n    return stacks;\n  }\n  _getStackCount(index) {\n    return this._getStacks(undefined, index).length;\n  }\n  _getStackIndex(datasetIndex, name, dataIndex) {\n    const stacks = this._getStacks(datasetIndex, dataIndex);\n    const index = (name !== undefined)\n      ? stacks.indexOf(name)\n      : -1;\n    return (index === -1)\n      ? stacks.length - 1\n      : index;\n  }\n  _getRuler() {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const pixels = [];\n    let i, ilen;\n    for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n      pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n    }\n    const barThickness = opts.barThickness;\n    const min = barThickness || computeMinSampleSize(meta);\n    return {\n      min,\n      pixels,\n      start: iScale._startPixel,\n      end: iScale._endPixel,\n      stackCount: this._getStackCount(),\n      scale: iScale,\n      grouped: opts.grouped,\n      ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n    };\n  }\n  _calculateBarValuePixels(index) {\n    const {_cachedMeta: {vScale, _stacked}, options: {base: baseValue, minBarLength}} = this;\n    const actualBase = baseValue || 0;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const floating = isFloatBar(custom);\n    let value = parsed[vScale.axis];\n    let start = 0;\n    let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n    let head, size;\n    if (length !== value) {\n      start = length - value;\n      length = value;\n    }\n    if (floating) {\n      value = custom.barStart;\n      length = custom.barEnd - custom.barStart;\n      if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n        start = 0;\n      }\n      start += value;\n    }\n    const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n    let base = vScale.getPixelForValue(startValue);\n    if (this.chart.getDataVisibility(index)) {\n      head = vScale.getPixelForValue(start + length);\n    } else {\n      head = base;\n    }\n    size = head - base;\n    if (Math.abs(size) < minBarLength) {\n      size = barSign(size, vScale, actualBase) * minBarLength;\n      if (value === actualBase) {\n        base -= size / 2;\n      }\n      const startPixel = vScale.getPixelForDecimal(0);\n      const endPixel = vScale.getPixelForDecimal(1);\n      const min = Math.min(startPixel, endPixel);\n      const max = Math.max(startPixel, endPixel);\n      base = Math.max(Math.min(base, max), min);\n      head = base + size;\n    }\n    if (base === vScale.getPixelForValue(actualBase)) {\n      const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n      base += halfGrid;\n      size -= halfGrid;\n    }\n    return {\n      size,\n      base,\n      head,\n      center: head + size / 2\n    };\n  }\n  _calculateBarIndexPixels(index, ruler) {\n    const scale = ruler.scale;\n    const options = this.options;\n    const skipNull = options.skipNull;\n    const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n    let center, size;\n    if (ruler.grouped) {\n      const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n      const range = options.barThickness === 'flex'\n        ? computeFlexCategoryTraits(index, ruler, options, stackCount)\n        : computeFitCategoryTraits(index, ruler, options, stackCount);\n      const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n      center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n      size = Math.min(maxBarThickness, range.chunk * range.ratio);\n    } else {\n      center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n      size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n    }\n    return {\n      base: center - size / 2,\n      head: center + size / 2,\n      center,\n      size\n    };\n  }\n  draw() {\n    const meta = this._cachedMeta;\n    const vScale = meta.vScale;\n    const rects = meta.data;\n    const ilen = rects.length;\n    let i = 0;\n    for (; i < ilen; ++i) {\n      if (this.getParsed(i)[vScale.axis] !== null) {\n        rects[i].draw(this._ctx);\n      }\n    }\n  }\n}\nBarController.id = 'bar';\nBarController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'bar',\n  categoryPercentage: 0.8,\n  barPercentage: 0.9,\n  grouped: true,\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'base', 'width', 'height']\n    }\n  }\n};\nBarController.overrides = {\n  scales: {\n    _index_: {\n      type: 'category',\n      offset: true,\n      grid: {\n        offset: true\n      }\n    },\n    _value_: {\n      type: 'linear',\n      beginAtZero: true,\n    }\n  }\n};\n\nclass BubbleController extends DatasetController {\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n  }\n  parsePrimitiveData(meta, data, start, count) {\n    const parsed = super.parsePrimitiveData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n    }\n    return parsed;\n  }\n  parseArrayData(meta, data, start, count) {\n    const parsed = super.parseArrayData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n  parseObjectData(meta, data, start, count) {\n    const parsed = super.parseObjectData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n  getMaxOverflow() {\n    const data = this._cachedMeta.data;\n    let max = 0;\n    for (let i = data.length - 1; i >= 0; --i) {\n      max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n    }\n    return max > 0 && max;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const {xScale, yScale} = meta;\n    const parsed = this.getParsed(index);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n    const r = parsed._custom;\n    return {\n      label: meta.label,\n      value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n    };\n  }\n  update(mode) {\n    const points = this._cachedMeta.data;\n    this.updateElements(points, 0, points.length, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale} = this._cachedMeta;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const parsed = !reset && this.getParsed(i);\n      const properties = {};\n      const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n      const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n      properties.skip = isNaN(iPixel) || isNaN(vPixel);\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n        if (reset) {\n          properties.options.radius = 0;\n        }\n      }\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n  resolveDataElementOptions(index, mode) {\n    const parsed = this.getParsed(index);\n    let values = super.resolveDataElementOptions(index, mode);\n    if (values.$shared) {\n      values = Object.assign({}, values, {$shared: false});\n    }\n    const radius = values.radius;\n    if (mode !== 'active') {\n      values.radius = 0;\n    }\n    values.radius += valueOrDefault(parsed && parsed._custom, radius);\n    return values;\n  }\n}\nBubbleController.id = 'bubble';\nBubbleController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'point',\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'borderWidth', 'radius']\n    }\n  }\n};\nBubbleController.overrides = {\n  scales: {\n    x: {\n      type: 'linear'\n    },\n    y: {\n      type: 'linear'\n    }\n  },\n  plugins: {\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        }\n      }\n    }\n  }\n};\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n  let ratioX = 1;\n  let ratioY = 1;\n  let offsetX = 0;\n  let offsetY = 0;\n  if (circumference < TAU) {\n    const startAngle = rotation;\n    const endAngle = startAngle + circumference;\n    const startX = Math.cos(startAngle);\n    const startY = Math.sin(startAngle);\n    const endX = Math.cos(endAngle);\n    const endY = Math.sin(endAngle);\n    const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n    const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n    const maxX = calcMax(0, startX, endX);\n    const maxY = calcMax(HALF_PI, startY, endY);\n    const minX = calcMin(PI, startX, endX);\n    const minY = calcMin(PI + HALF_PI, startY, endY);\n    ratioX = (maxX - minX) / 2;\n    ratioY = (maxY - minY) / 2;\n    offsetX = -(maxX + minX) / 2;\n    offsetY = -(maxY + minY) / 2;\n  }\n  return {ratioX, ratioY, offsetX, offsetY};\n}\nclass DoughnutController extends DatasetController {\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n    this.enableOptionSharing = true;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.offsetX = undefined;\n    this.offsetY = undefined;\n  }\n  linkScales() {}\n  parse(start, count) {\n    const data = this.getDataset().data;\n    const meta = this._cachedMeta;\n    if (this._parsing === false) {\n      meta._parsed = data;\n    } else {\n      let getter = (i) => +data[i];\n      if (isObject(data[start])) {\n        const {key = 'value'} = this._parsing;\n        getter = (i) => +resolveObjectKey(data[i], key);\n      }\n      let i, ilen;\n      for (i = start, ilen = start + count; i < ilen; ++i) {\n        meta._parsed[i] = getter(i);\n      }\n    }\n  }\n  _getRotation() {\n    return toRadians(this.options.rotation - 90);\n  }\n  _getCircumference() {\n    return toRadians(this.options.circumference);\n  }\n  _getRotationExtents() {\n    let min = TAU;\n    let max = -TAU;\n    for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        const controller = this.chart.getDatasetMeta(i).controller;\n        const rotation = controller._getRotation();\n        const circumference = controller._getCircumference();\n        min = Math.min(min, rotation);\n        max = Math.max(max, rotation + circumference);\n      }\n    }\n    return {\n      rotation: min,\n      circumference: max - min,\n    };\n  }\n  update(mode) {\n    const chart = this.chart;\n    const {chartArea} = chart;\n    const meta = this._cachedMeta;\n    const arcs = meta.data;\n    const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n    const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n    const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n    const chartWeight = this._getRingWeight(this.index);\n    const {circumference, rotation} = this._getRotationExtents();\n    const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n    const maxWidth = (chartArea.width - spacing) / ratioX;\n    const maxHeight = (chartArea.height - spacing) / ratioY;\n    const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n    const outerRadius = toDimension(this.options.radius, maxRadius);\n    const innerRadius = Math.max(outerRadius * cutout, 0);\n    const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n    this.offsetX = offsetX * outerRadius;\n    this.offsetY = offsetY * outerRadius;\n    meta.total = this.calculateTotal();\n    this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n    this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n  _circumference(i, reset) {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const circumference = this._getCircumference();\n    if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n      return 0;\n    }\n    return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n  }\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const centerX = (chartArea.left + chartArea.right) / 2;\n    const centerY = (chartArea.top + chartArea.bottom) / 2;\n    const animateScale = reset && animationOpts.animateScale;\n    const innerRadius = animateScale ? 0 : this.innerRadius;\n    const outerRadius = animateScale ? 0 : this.outerRadius;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    let startAngle = this._getRotation();\n    let i;\n    for (i = 0; i < start; ++i) {\n      startAngle += this._circumference(i, reset);\n    }\n    for (i = start; i < start + count; ++i) {\n      const circumference = this._circumference(i, reset);\n      const arc = arcs[i];\n      const properties = {\n        x: centerX + this.offsetX,\n        y: centerY + this.offsetY,\n        startAngle,\n        endAngle: startAngle + circumference,\n        circumference,\n        outerRadius,\n        innerRadius\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n      }\n      startAngle += circumference;\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n  calculateTotal() {\n    const meta = this._cachedMeta;\n    const metaData = meta.data;\n    let total = 0;\n    let i;\n    for (i = 0; i < metaData.length; i++) {\n      const value = meta._parsed[i];\n      if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n        total += Math.abs(value);\n      }\n    }\n    return total;\n  }\n  calculateCircumference(value) {\n    const total = this._cachedMeta.total;\n    if (total > 0 && !isNaN(value)) {\n      return TAU * (Math.abs(value) / total);\n    }\n    return 0;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index], chart.options.locale);\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n  getMaxBorderWidth(arcs) {\n    let max = 0;\n    const chart = this.chart;\n    let i, ilen, meta, controller, options;\n    if (!arcs) {\n      for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n        if (chart.isDatasetVisible(i)) {\n          meta = chart.getDatasetMeta(i);\n          arcs = meta.data;\n          controller = meta.controller;\n          break;\n        }\n      }\n    }\n    if (!arcs) {\n      return 0;\n    }\n    for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n      options = controller.resolveDataElementOptions(i);\n      if (options.borderAlign !== 'inner') {\n        max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n      }\n    }\n    return max;\n  }\n  getMaxOffset(arcs) {\n    let max = 0;\n    for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n      const options = this.resolveDataElementOptions(i);\n      max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n    }\n    return max;\n  }\n  _getRingWeightOffset(datasetIndex) {\n    let ringWeightOffset = 0;\n    for (let i = 0; i < datasetIndex; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        ringWeightOffset += this._getRingWeight(i);\n      }\n    }\n    return ringWeightOffset;\n  }\n  _getRingWeight(datasetIndex) {\n    return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n  }\n  _getVisibleDatasetWeightTotal() {\n    return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n  }\n}\nDoughnutController.id = 'doughnut';\nDoughnutController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'arc',\n  animation: {\n    animateRotate: true,\n    animateScale: false\n  },\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n    },\n  },\n  cutout: '50%',\n  rotation: 0,\n  circumference: 360,\n  radius: '100%',\n  spacing: 0,\n  indexAxis: 'r',\n};\nDoughnutController.descriptors = {\n  _scriptable: (name) => name !== 'spacing',\n  _indexable: (name) => name !== 'spacing',\n};\nDoughnutController.overrides = {\n  aspectRatio: 1,\n  plugins: {\n    legend: {\n      labels: {\n        generateLabels(chart) {\n          const data = chart.data;\n          if (data.labels.length && data.datasets.length) {\n            const {labels: {pointStyle}} = chart.legend.options;\n            return data.labels.map((label, i) => {\n              const meta = chart.getDatasetMeta(0);\n              const style = meta.controller.getStyle(i);\n              return {\n                text: label,\n                fillStyle: style.backgroundColor,\n                strokeStyle: style.borderColor,\n                lineWidth: style.borderWidth,\n                pointStyle: pointStyle,\n                hidden: !chart.getDataVisibility(i),\n                index: i\n              };\n            });\n          }\n          return [];\n        }\n      },\n      onClick(e, legendItem, legend) {\n        legend.chart.toggleDataVisibility(legendItem.index);\n        legend.chart.update();\n      }\n    },\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(tooltipItem) {\n          let dataLabel = tooltipItem.label;\n          const value = ': ' + tooltipItem.formattedValue;\n          if (isArray(dataLabel)) {\n            dataLabel = dataLabel.slice();\n            dataLabel[0] += value;\n          } else {\n            dataLabel += value;\n          }\n          return dataLabel;\n        }\n      }\n    }\n  }\n};\n\nclass LineController extends DatasetController {\n  initialize() {\n    this.enableOptionSharing = true;\n    this.supportsDecimation = true;\n    super.initialize();\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {dataset: line, data: points = [], _dataset} = meta;\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n    this._drawStart = start;\n    this._drawCount = count;\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n    line._chart = this.chart;\n    line._datasetIndex = this.index;\n    line._decimated = !!_dataset._decimated;\n    line.points = points;\n    const options = this.resolveDatasetElementOptions(mode);\n    if (!this.options.showLine) {\n      options.borderWidth = 0;\n    }\n    options.segment = this.options.segment;\n    this.updateElement(line, undefined, {\n      animated: !animationsDisabled,\n      options\n    }, mode);\n    this.updateElements(points, start, count, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n    for (let i = start; i < start + count; ++i) {\n      const point = points[i];\n      const parsed = this.getParsed(i);\n      const properties = directUpdate ? point : {};\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n      prevParsed = parsed;\n    }\n  }\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n    const data = meta.data || [];\n    if (!data.length) {\n      return border;\n    }\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n  draw() {\n    const meta = this._cachedMeta;\n    meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n    super.draw();\n  }\n}\nLineController.id = 'line';\nLineController.defaults = {\n  datasetElementType: 'line',\n  dataElementType: 'point',\n  showLine: true,\n  spanGaps: false,\n};\nLineController.overrides = {\n  scales: {\n    _index_: {\n      type: 'category',\n    },\n    _value_: {\n      type: 'linear',\n    },\n  }\n};\n\nclass PolarAreaController extends DatasetController {\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n  update(mode) {\n    const arcs = this._cachedMeta.data;\n    this._updateRadius();\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n  getMinMax() {\n    const meta = this._cachedMeta;\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n    meta.data.forEach((element, index) => {\n      const parsed = this.getParsed(index).r;\n      if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n        if (parsed < range.min) {\n          range.min = parsed;\n        }\n        if (parsed > range.max) {\n          range.max = parsed;\n        }\n      }\n    });\n    return range;\n  }\n  _updateRadius() {\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n    const outerRadius = Math.max(minSize / 2, 0);\n    const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n    const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n    this.outerRadius = outerRadius - (radiusLength * this.index);\n    this.innerRadius = this.outerRadius - radiusLength;\n  }\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const scale = this._cachedMeta.rScale;\n    const centerX = scale.xCenter;\n    const centerY = scale.yCenter;\n    const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n    let angle = datasetStartAngle;\n    let i;\n    const defaultAngle = 360 / this.countVisibleElements();\n    for (i = 0; i < start; ++i) {\n      angle += this._computeAngle(i, mode, defaultAngle);\n    }\n    for (i = start; i < start + count; i++) {\n      const arc = arcs[i];\n      let startAngle = angle;\n      let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n      let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n      angle = endAngle;\n      if (reset) {\n        if (animationOpts.animateScale) {\n          outerRadius = 0;\n        }\n        if (animationOpts.animateRotate) {\n          startAngle = endAngle = datasetStartAngle;\n        }\n      }\n      const properties = {\n        x: centerX,\n        y: centerY,\n        innerRadius: 0,\n        outerRadius,\n        startAngle,\n        endAngle,\n        options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n      };\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n  countVisibleElements() {\n    const meta = this._cachedMeta;\n    let count = 0;\n    meta.data.forEach((element, index) => {\n      if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n        count++;\n      }\n    });\n    return count;\n  }\n  _computeAngle(index, mode, defaultAngle) {\n    return this.chart.getDataVisibility(index)\n      ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n      : 0;\n  }\n}\nPolarAreaController.id = 'polarArea';\nPolarAreaController.defaults = {\n  dataElementType: 'arc',\n  animation: {\n    animateRotate: true,\n    animateScale: true\n  },\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n    },\n  },\n  indexAxis: 'r',\n  startAngle: 0,\n};\nPolarAreaController.overrides = {\n  aspectRatio: 1,\n  plugins: {\n    legend: {\n      labels: {\n        generateLabels(chart) {\n          const data = chart.data;\n          if (data.labels.length && data.datasets.length) {\n            const {labels: {pointStyle}} = chart.legend.options;\n            return data.labels.map((label, i) => {\n              const meta = chart.getDatasetMeta(0);\n              const style = meta.controller.getStyle(i);\n              return {\n                text: label,\n                fillStyle: style.backgroundColor,\n                strokeStyle: style.borderColor,\n                lineWidth: style.borderWidth,\n                pointStyle: pointStyle,\n                hidden: !chart.getDataVisibility(i),\n                index: i\n              };\n            });\n          }\n          return [];\n        }\n      },\n      onClick(e, legendItem, legend) {\n        legend.chart.toggleDataVisibility(legendItem.index);\n        legend.chart.update();\n      }\n    },\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(context) {\n          return context.chart.data.labels[context.dataIndex] + ': ' + context.formattedValue;\n        }\n      }\n    }\n  },\n  scales: {\n    r: {\n      type: 'radialLinear',\n      angleLines: {\n        display: false\n      },\n      beginAtZero: true,\n      grid: {\n        circular: true\n      },\n      pointLabels: {\n        display: false\n      },\n      startAngle: 0\n    }\n  }\n};\n\nclass PieController extends DoughnutController {\n}\nPieController.id = 'pie';\nPieController.defaults = {\n  cutout: 0,\n  rotation: 0,\n  circumference: 360,\n  radius: '100%'\n};\n\nclass RadarController extends DatasetController {\n  getLabelAndValue(index) {\n    const vScale = this._cachedMeta.vScale;\n    const parsed = this.getParsed(index);\n    return {\n      label: vScale.getLabels()[index],\n      value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n    };\n  }\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    const line = meta.dataset;\n    const points = meta.data || [];\n    const labels = meta.iScale.getLabels();\n    line.points = points;\n    if (mode !== 'resize') {\n      const options = this.resolveDatasetElementOptions(mode);\n      if (!this.options.showLine) {\n        options.borderWidth = 0;\n      }\n      const properties = {\n        _loop: true,\n        _fullLoop: labels.length === points.length,\n        options\n      };\n      this.updateElement(line, undefined, properties, mode);\n    }\n    this.updateElements(points, 0, points.length, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const scale = this._cachedMeta.rScale;\n    const reset = mode === 'reset';\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n      const x = reset ? scale.xCenter : pointPosition.x;\n      const y = reset ? scale.yCenter : pointPosition.y;\n      const properties = {\n        x,\n        y,\n        angle: pointPosition.angle,\n        skip: isNaN(x) || isNaN(y),\n        options\n      };\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n}\nRadarController.id = 'radar';\nRadarController.defaults = {\n  datasetElementType: 'line',\n  dataElementType: 'point',\n  indexAxis: 'r',\n  showLine: true,\n  elements: {\n    line: {\n      fill: 'start'\n    }\n  },\n};\nRadarController.overrides = {\n  aspectRatio: 1,\n  scales: {\n    r: {\n      type: 'radialLinear',\n    }\n  }\n};\n\nclass Element {\n  constructor() {\n    this.x = undefined;\n    this.y = undefined;\n    this.active = false;\n    this.options = undefined;\n    this.$animations = undefined;\n  }\n  tooltipPosition(useFinalPosition) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n  hasValue() {\n    return isNumber(this.x) && isNumber(this.y);\n  }\n  getProps(props, final) {\n    const anims = this.$animations;\n    if (!final || !anims) {\n      return this;\n    }\n    const ret = {};\n    props.forEach(prop => {\n      ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n    });\n    return ret;\n  }\n}\nElement.defaults = {};\nElement.defaultRoutes = undefined;\n\nconst formatters = {\n  values(value) {\n    return isArray(value) ? value : '' + value;\n  },\n  numeric(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const locale = this.chart.options.locale;\n    let notation;\n    let delta = tickValue;\n    if (ticks.length > 1) {\n      const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n      if (maxTick < 1e-4 || maxTick > 1e+15) {\n        notation = 'scientific';\n      }\n      delta = calculateDelta(tickValue, ticks);\n    }\n    const logDelta = log10(Math.abs(delta));\n    const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n    const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n    Object.assign(options, this.options.ticks.format);\n    return formatNumber(tickValue, locale, options);\n  },\n  logarithmic(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const remain = tickValue / (Math.pow(10, Math.floor(log10(tickValue))));\n    if (remain === 1 || remain === 2 || remain === 5) {\n      return formatters.numeric.call(this, tickValue, index, ticks);\n    }\n    return '';\n  }\n};\nfunction calculateDelta(tickValue, ticks) {\n  let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n  if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n    delta = tickValue - Math.floor(tickValue);\n  }\n  return delta;\n}\nvar Ticks = {formatters};\n\ndefaults.set('scale', {\n  display: true,\n  offset: false,\n  reverse: false,\n  beginAtZero: false,\n  bounds: 'ticks',\n  grace: 0,\n  grid: {\n    display: true,\n    lineWidth: 1,\n    drawBorder: true,\n    drawOnChartArea: true,\n    drawTicks: true,\n    tickLength: 8,\n    tickWidth: (_ctx, options) => options.lineWidth,\n    tickColor: (_ctx, options) => options.color,\n    offset: false,\n    borderDash: [],\n    borderDashOffset: 0.0,\n    borderWidth: 1\n  },\n  title: {\n    display: false,\n    text: '',\n    padding: {\n      top: 4,\n      bottom: 4\n    }\n  },\n  ticks: {\n    minRotation: 0,\n    maxRotation: 50,\n    mirror: false,\n    textStrokeWidth: 0,\n    textStrokeColor: '',\n    padding: 3,\n    display: true,\n    autoSkip: true,\n    autoSkipPadding: 3,\n    labelOffset: 0,\n    callback: Ticks.formatters.values,\n    minor: {},\n    major: {},\n    align: 'center',\n    crossAlign: 'near',\n    showLabelBackdrop: false,\n    backdropColor: 'rgba(255, 255, 255, 0.75)',\n    backdropPadding: 2,\n  }\n});\ndefaults.route('scale.ticks', 'color', '', 'color');\ndefaults.route('scale.grid', 'color', '', 'borderColor');\ndefaults.route('scale.grid', 'borderColor', '', 'borderColor');\ndefaults.route('scale.title', 'color', '', 'color');\ndefaults.describe('scale', {\n  _fallback: false,\n  _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n  _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash',\n});\ndefaults.describe('scales', {\n  _fallback: 'scale',\n});\ndefaults.describe('scale.ticks', {\n  _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n  _indexable: (name) => name !== 'backdropPadding',\n});\n\nfunction autoSkip(scale, ticks) {\n  const tickOpts = scale.options.ticks;\n  const ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale);\n  const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n  const numMajorIndices = majorIndices.length;\n  const first = majorIndices[0];\n  const last = majorIndices[numMajorIndices - 1];\n  const newTicks = [];\n  if (numMajorIndices > ticksLimit) {\n    skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n    return newTicks;\n  }\n  const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n  if (numMajorIndices > 0) {\n    let i, ilen;\n    const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n    skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n    for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n      skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n    }\n    skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n    return newTicks;\n  }\n  skip(ticks, newTicks, spacing);\n  return newTicks;\n}\nfunction determineMaxTicks(scale) {\n  const offset = scale.options.offset;\n  const tickLength = scale._tickSize();\n  const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n  const maxChart = scale._maxLength / tickLength;\n  return Math.floor(Math.min(maxScale, maxChart));\n}\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n  const evenMajorSpacing = getEvenSpacing(majorIndices);\n  const spacing = ticks.length / ticksLimit;\n  if (!evenMajorSpacing) {\n    return Math.max(spacing, 1);\n  }\n  const factors = _factorize(evenMajorSpacing);\n  for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n    const factor = factors[i];\n    if (factor > spacing) {\n      return factor;\n    }\n  }\n  return Math.max(spacing, 1);\n}\nfunction getMajorIndices(ticks) {\n  const result = [];\n  let i, ilen;\n  for (i = 0, ilen = ticks.length; i < ilen; i++) {\n    if (ticks[i].major) {\n      result.push(i);\n    }\n  }\n  return result;\n}\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n  let count = 0;\n  let next = majorIndices[0];\n  let i;\n  spacing = Math.ceil(spacing);\n  for (i = 0; i < ticks.length; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = majorIndices[count * spacing];\n    }\n  }\n}\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n  const start = valueOrDefault(majorStart, 0);\n  const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n  let count = 0;\n  let length, i, next;\n  spacing = Math.ceil(spacing);\n  if (majorEnd) {\n    length = majorEnd - majorStart;\n    spacing = length / Math.floor(length / spacing);\n  }\n  next = start;\n  while (next < 0) {\n    count++;\n    next = Math.round(start + count * spacing);\n  }\n  for (i = Math.max(start, 0); i < end; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = Math.round(start + count * spacing);\n    }\n  }\n}\nfunction getEvenSpacing(arr) {\n  const len = arr.length;\n  let i, diff;\n  if (len < 2) {\n    return false;\n  }\n  for (diff = arr[0], i = 1; i < len; ++i) {\n    if (arr[i] - arr[i - 1] !== diff) {\n      return false;\n    }\n  }\n  return diff;\n}\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nfunction sample(arr, numItems) {\n  const result = [];\n  const increment = arr.length / numItems;\n  const len = arr.length;\n  let i = 0;\n  for (; i < len; i += increment) {\n    result.push(arr[Math.floor(i)]);\n  }\n  return result;\n}\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n  const length = scale.ticks.length;\n  const validIndex = Math.min(index, length - 1);\n  const start = scale._startPixel;\n  const end = scale._endPixel;\n  const epsilon = 1e-6;\n  let lineValue = scale.getPixelForTick(validIndex);\n  let offset;\n  if (offsetGridLines) {\n    if (length === 1) {\n      offset = Math.max(lineValue - start, end - lineValue);\n    } else if (index === 0) {\n      offset = (scale.getPixelForTick(1) - lineValue) / 2;\n    } else {\n      offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n    }\n    lineValue += validIndex < index ? offset : -offset;\n    if (lineValue < start - epsilon || lineValue > end + epsilon) {\n      return;\n    }\n  }\n  return lineValue;\n}\nfunction garbageCollect(caches, length) {\n  each(caches, (cache) => {\n    const gc = cache.gc;\n    const gcLen = gc.length / 2;\n    let i;\n    if (gcLen > length) {\n      for (i = 0; i < gcLen; ++i) {\n        delete cache.data[gc[i]];\n      }\n      gc.splice(0, gcLen);\n    }\n  });\n}\nfunction getTickMarkLength(options) {\n  return options.drawTicks ? options.tickLength : 0;\n}\nfunction getTitleHeight(options, fallback) {\n  if (!options.display) {\n    return 0;\n  }\n  const font = toFont(options.font, fallback);\n  const padding = toPadding(options.padding);\n  const lines = isArray(options.text) ? options.text.length : 1;\n  return (lines * font.lineHeight) + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n  return createContext(parent, {\n    scale,\n    type: 'scale'\n  });\n}\nfunction createTickContext(parent, index, tick) {\n  return createContext(parent, {\n    tick,\n    index,\n    type: 'tick'\n  });\n}\nfunction titleAlign(align, position, reverse) {\n  let ret = _toLeftRightCenter(align);\n  if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n    ret = reverseAlign(ret);\n  }\n  return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n  const {top, left, bottom, right, chart} = scale;\n  const {chartArea, scales} = chart;\n  let rotation = 0;\n  let maxWidth, titleX, titleY;\n  const height = bottom - top;\n  const width = right - left;\n  if (scale.isHorizontal()) {\n    titleX = _alignStartEnd(align, left, right);\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n    } else if (position === 'center') {\n      titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n    } else {\n      titleY = offsetFromEdge(scale, position, offset);\n    }\n    maxWidth = right - left;\n  } else {\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n    } else if (position === 'center') {\n      titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n    } else {\n      titleX = offsetFromEdge(scale, position, offset);\n    }\n    titleY = _alignStartEnd(align, bottom, top);\n    rotation = position === 'left' ? -HALF_PI : HALF_PI;\n  }\n  return {titleX, titleY, maxWidth, rotation};\n}\nclass Scale extends Element {\n  constructor(cfg) {\n    super();\n    this.id = cfg.id;\n    this.type = cfg.type;\n    this.options = undefined;\n    this.ctx = cfg.ctx;\n    this.chart = cfg.chart;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this._margins = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    };\n    this.maxWidth = undefined;\n    this.maxHeight = undefined;\n    this.paddingTop = undefined;\n    this.paddingBottom = undefined;\n    this.paddingLeft = undefined;\n    this.paddingRight = undefined;\n    this.axis = undefined;\n    this.labelRotation = undefined;\n    this.min = undefined;\n    this.max = undefined;\n    this._range = undefined;\n    this.ticks = [];\n    this._gridLineItems = null;\n    this._labelItems = null;\n    this._labelSizes = null;\n    this._length = 0;\n    this._maxLength = 0;\n    this._longestTextCache = {};\n    this._startPixel = undefined;\n    this._endPixel = undefined;\n    this._reversePixels = false;\n    this._userMax = undefined;\n    this._userMin = undefined;\n    this._suggestedMax = undefined;\n    this._suggestedMin = undefined;\n    this._ticksLength = 0;\n    this._borderValue = 0;\n    this._cache = {};\n    this._dataLimitsCached = false;\n    this.$context = undefined;\n  }\n  init(options) {\n    this.options = options.setContext(this.getContext());\n    this.axis = options.axis;\n    this._userMin = this.parse(options.min);\n    this._userMax = this.parse(options.max);\n    this._suggestedMin = this.parse(options.suggestedMin);\n    this._suggestedMax = this.parse(options.suggestedMax);\n  }\n  parse(raw, index) {\n    return raw;\n  }\n  getUserBounds() {\n    let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n    _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n    _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n    _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n    _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n    return {\n      min: finiteOrDefault(_userMin, _suggestedMin),\n      max: finiteOrDefault(_userMax, _suggestedMax),\n      minDefined: isNumberFinite(_userMin),\n      maxDefined: isNumberFinite(_userMax)\n    };\n  }\n  getMinMax(canStack) {\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n    let range;\n    if (minDefined && maxDefined) {\n      return {min, max};\n    }\n    const metas = this.getMatchingVisibleMetas();\n    for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n      range = metas[i].controller.getMinMax(this, canStack);\n      if (!minDefined) {\n        min = Math.min(min, range.min);\n      }\n      if (!maxDefined) {\n        max = Math.max(max, range.max);\n      }\n    }\n    min = maxDefined && min > max ? max : min;\n    max = minDefined && min > max ? min : max;\n    return {\n      min: finiteOrDefault(min, finiteOrDefault(max, min)),\n      max: finiteOrDefault(max, finiteOrDefault(min, max))\n    };\n  }\n  getPadding() {\n    return {\n      left: this.paddingLeft || 0,\n      top: this.paddingTop || 0,\n      right: this.paddingRight || 0,\n      bottom: this.paddingBottom || 0\n    };\n  }\n  getTicks() {\n    return this.ticks;\n  }\n  getLabels() {\n    const data = this.chart.data;\n    return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n  }\n  beforeLayout() {\n    this._cache = {};\n    this._dataLimitsCached = false;\n  }\n  beforeUpdate() {\n    callback(this.options.beforeUpdate, [this]);\n  }\n  update(maxWidth, maxHeight, margins) {\n    const {beginAtZero, grace, ticks: tickOpts} = this.options;\n    const sampleSize = tickOpts.sampleSize;\n    this.beforeUpdate();\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins = Object.assign({\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    }, margins);\n    this.ticks = null;\n    this._labelSizes = null;\n    this._gridLineItems = null;\n    this._labelItems = null;\n    this.beforeSetDimensions();\n    this.setDimensions();\n    this.afterSetDimensions();\n    this._maxLength = this.isHorizontal()\n      ? this.width + margins.left + margins.right\n      : this.height + margins.top + margins.bottom;\n    if (!this._dataLimitsCached) {\n      this.beforeDataLimits();\n      this.determineDataLimits();\n      this.afterDataLimits();\n      this._range = _addGrace(this, grace, beginAtZero);\n      this._dataLimitsCached = true;\n    }\n    this.beforeBuildTicks();\n    this.ticks = this.buildTicks() || [];\n    this.afterBuildTicks();\n    const samplingEnabled = sampleSize < this.ticks.length;\n    this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n    this.configure();\n    this.beforeCalculateLabelRotation();\n    this.calculateLabelRotation();\n    this.afterCalculateLabelRotation();\n    if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n      this.ticks = autoSkip(this, this.ticks);\n      this._labelSizes = null;\n      this.afterAutoSkip();\n    }\n    if (samplingEnabled) {\n      this._convertTicksToLabels(this.ticks);\n    }\n    this.beforeFit();\n    this.fit();\n    this.afterFit();\n    this.afterUpdate();\n  }\n  configure() {\n    let reversePixels = this.options.reverse;\n    let startPixel, endPixel;\n    if (this.isHorizontal()) {\n      startPixel = this.left;\n      endPixel = this.right;\n    } else {\n      startPixel = this.top;\n      endPixel = this.bottom;\n      reversePixels = !reversePixels;\n    }\n    this._startPixel = startPixel;\n    this._endPixel = endPixel;\n    this._reversePixels = reversePixels;\n    this._length = endPixel - startPixel;\n    this._alignToPixels = this.options.alignToPixels;\n  }\n  afterUpdate() {\n    callback(this.options.afterUpdate, [this]);\n  }\n  beforeSetDimensions() {\n    callback(this.options.beforeSetDimensions, [this]);\n  }\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = 0;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = 0;\n      this.bottom = this.height;\n    }\n    this.paddingLeft = 0;\n    this.paddingTop = 0;\n    this.paddingRight = 0;\n    this.paddingBottom = 0;\n  }\n  afterSetDimensions() {\n    callback(this.options.afterSetDimensions, [this]);\n  }\n  _callHooks(name) {\n    this.chart.notifyPlugins(name, this.getContext());\n    callback(this.options[name], [this]);\n  }\n  beforeDataLimits() {\n    this._callHooks('beforeDataLimits');\n  }\n  determineDataLimits() {}\n  afterDataLimits() {\n    this._callHooks('afterDataLimits');\n  }\n  beforeBuildTicks() {\n    this._callHooks('beforeBuildTicks');\n  }\n  buildTicks() {\n    return [];\n  }\n  afterBuildTicks() {\n    this._callHooks('afterBuildTicks');\n  }\n  beforeTickToLabelConversion() {\n    callback(this.options.beforeTickToLabelConversion, [this]);\n  }\n  generateTickLabels(ticks) {\n    const tickOpts = this.options.ticks;\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      tick = ticks[i];\n      tick.label = callback(tickOpts.callback, [tick.value, i, ticks], this);\n    }\n  }\n  afterTickToLabelConversion() {\n    callback(this.options.afterTickToLabelConversion, [this]);\n  }\n  beforeCalculateLabelRotation() {\n    callback(this.options.beforeCalculateLabelRotation, [this]);\n  }\n  calculateLabelRotation() {\n    const options = this.options;\n    const tickOpts = options.ticks;\n    const numTicks = this.ticks.length;\n    const minRotation = tickOpts.minRotation || 0;\n    const maxRotation = tickOpts.maxRotation;\n    let labelRotation = minRotation;\n    let tickWidth, maxHeight, maxLabelDiagonal;\n    if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n      this.labelRotation = minRotation;\n      return;\n    }\n    const labelSizes = this._getLabelSizes();\n    const maxLabelWidth = labelSizes.widest.width;\n    const maxLabelHeight = labelSizes.highest.height;\n    const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n    tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n    if (maxLabelWidth + 6 > tickWidth) {\n      tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n      maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n      maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n      labelRotation = toDegrees(Math.min(\n        Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n        Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n      ));\n      labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n    }\n    this.labelRotation = labelRotation;\n  }\n  afterCalculateLabelRotation() {\n    callback(this.options.afterCalculateLabelRotation, [this]);\n  }\n  afterAutoSkip() {}\n  beforeFit() {\n    callback(this.options.beforeFit, [this]);\n  }\n  fit() {\n    const minSize = {\n      width: 0,\n      height: 0\n    };\n    const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n    const display = this._isVisible();\n    const isHorizontal = this.isHorizontal();\n    if (display) {\n      const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n      if (isHorizontal) {\n        minSize.width = this.maxWidth;\n        minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n      } else {\n        minSize.height = this.maxHeight;\n        minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n      }\n      if (tickOpts.display && this.ticks.length) {\n        const {first, last, widest, highest} = this._getLabelSizes();\n        const tickPadding = tickOpts.padding * 2;\n        const angleRadians = toRadians(this.labelRotation);\n        const cos = Math.cos(angleRadians);\n        const sin = Math.sin(angleRadians);\n        if (isHorizontal) {\n          const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n          minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n        } else {\n          const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n          minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n        }\n        this._calculatePadding(first, last, sin, cos);\n      }\n    }\n    this._handleMargins();\n    if (isHorizontal) {\n      this.width = this._length = chart.width - this._margins.left - this._margins.right;\n      this.height = minSize.height;\n    } else {\n      this.width = minSize.width;\n      this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n    }\n  }\n  _calculatePadding(first, last, sin, cos) {\n    const {ticks: {align, padding}, position} = this.options;\n    const isRotated = this.labelRotation !== 0;\n    const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n    if (this.isHorizontal()) {\n      const offsetLeft = this.getPixelForTick(0) - this.left;\n      const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n      let paddingLeft = 0;\n      let paddingRight = 0;\n      if (isRotated) {\n        if (labelsBelowTicks) {\n          paddingLeft = cos * first.width;\n          paddingRight = sin * last.height;\n        } else {\n          paddingLeft = sin * first.height;\n          paddingRight = cos * last.width;\n        }\n      } else if (align === 'start') {\n        paddingRight = last.width;\n      } else if (align === 'end') {\n        paddingLeft = first.width;\n      } else if (align !== 'inner') {\n        paddingLeft = first.width / 2;\n        paddingRight = last.width / 2;\n      }\n      this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n      this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n    } else {\n      let paddingTop = last.height / 2;\n      let paddingBottom = first.height / 2;\n      if (align === 'start') {\n        paddingTop = 0;\n        paddingBottom = first.height;\n      } else if (align === 'end') {\n        paddingTop = last.height;\n        paddingBottom = 0;\n      }\n      this.paddingTop = paddingTop + padding;\n      this.paddingBottom = paddingBottom + padding;\n    }\n  }\n  _handleMargins() {\n    if (this._margins) {\n      this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n      this._margins.top = Math.max(this.paddingTop, this._margins.top);\n      this._margins.right = Math.max(this.paddingRight, this._margins.right);\n      this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n    }\n  }\n  afterFit() {\n    callback(this.options.afterFit, [this]);\n  }\n  isHorizontal() {\n    const {axis, position} = this.options;\n    return position === 'top' || position === 'bottom' || axis === 'x';\n  }\n  isFullSize() {\n    return this.options.fullSize;\n  }\n  _convertTicksToLabels(ticks) {\n    this.beforeTickToLabelConversion();\n    this.generateTickLabels(ticks);\n    let i, ilen;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      if (isNullOrUndef(ticks[i].label)) {\n        ticks.splice(i, 1);\n        ilen--;\n        i--;\n      }\n    }\n    this.afterTickToLabelConversion();\n  }\n  _getLabelSizes() {\n    let labelSizes = this._labelSizes;\n    if (!labelSizes) {\n      const sampleSize = this.options.ticks.sampleSize;\n      let ticks = this.ticks;\n      if (sampleSize < ticks.length) {\n        ticks = sample(ticks, sampleSize);\n      }\n      this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length);\n    }\n    return labelSizes;\n  }\n  _computeLabelSizes(ticks, length) {\n    const {ctx, _longestTextCache: caches} = this;\n    const widths = [];\n    const heights = [];\n    let widestLabelSize = 0;\n    let highestLabelSize = 0;\n    let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n    for (i = 0; i < length; ++i) {\n      label = ticks[i].label;\n      tickFont = this._resolveTickFontOptions(i);\n      ctx.font = fontString = tickFont.string;\n      cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n      lineHeight = tickFont.lineHeight;\n      width = height = 0;\n      if (!isNullOrUndef(label) && !isArray(label)) {\n        width = _measureText(ctx, cache.data, cache.gc, width, label);\n        height = lineHeight;\n      } else if (isArray(label)) {\n        for (j = 0, jlen = label.length; j < jlen; ++j) {\n          nestedLabel = label[j];\n          if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n            width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n            height += lineHeight;\n          }\n        }\n      }\n      widths.push(width);\n      heights.push(height);\n      widestLabelSize = Math.max(width, widestLabelSize);\n      highestLabelSize = Math.max(height, highestLabelSize);\n    }\n    garbageCollect(caches, length);\n    const widest = widths.indexOf(widestLabelSize);\n    const highest = heights.indexOf(highestLabelSize);\n    const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n    return {\n      first: valueAt(0),\n      last: valueAt(length - 1),\n      widest: valueAt(widest),\n      highest: valueAt(highest),\n      widths,\n      heights,\n    };\n  }\n  getLabelForValue(value) {\n    return value;\n  }\n  getPixelForValue(value, index) {\n    return NaN;\n  }\n  getValueForPixel(pixel) {}\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n  getPixelForDecimal(decimal) {\n    if (this._reversePixels) {\n      decimal = 1 - decimal;\n    }\n    const pixel = this._startPixel + decimal * this._length;\n    return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n  }\n  getDecimalForPixel(pixel) {\n    const decimal = (pixel - this._startPixel) / this._length;\n    return this._reversePixels ? 1 - decimal : decimal;\n  }\n  getBasePixel() {\n    return this.getPixelForValue(this.getBaseValue());\n  }\n  getBaseValue() {\n    const {min, max} = this;\n    return min < 0 && max < 0 ? max :\n      min > 0 && max > 0 ? min :\n      0;\n  }\n  getContext(index) {\n    const ticks = this.ticks || [];\n    if (index >= 0 && index < ticks.length) {\n      const tick = ticks[index];\n      return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n    }\n    return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n  }\n  _tickSize() {\n    const optionTicks = this.options.ticks;\n    const rot = toRadians(this.labelRotation);\n    const cos = Math.abs(Math.cos(rot));\n    const sin = Math.abs(Math.sin(rot));\n    const labelSizes = this._getLabelSizes();\n    const padding = optionTicks.autoSkipPadding || 0;\n    const w = labelSizes ? labelSizes.widest.width + padding : 0;\n    const h = labelSizes ? labelSizes.highest.height + padding : 0;\n    return this.isHorizontal()\n      ? h * cos > w * sin ? w / cos : h / sin\n      : h * sin < w * cos ? h / cos : w / sin;\n  }\n  _isVisible() {\n    const display = this.options.display;\n    if (display !== 'auto') {\n      return !!display;\n    }\n    return this.getMatchingVisibleMetas().length > 0;\n  }\n  _computeGridLineItems(chartArea) {\n    const axis = this.axis;\n    const chart = this.chart;\n    const options = this.options;\n    const {grid, position} = options;\n    const offset = grid.offset;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const ticksLength = ticks.length + (offset ? 1 : 0);\n    const tl = getTickMarkLength(grid);\n    const items = [];\n    const borderOpts = grid.setContext(this.getContext());\n    const axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0;\n    const axisHalfWidth = axisWidth / 2;\n    const alignBorderValue = function(pixel) {\n      return _alignPixel(chart, pixel, axisWidth);\n    };\n    let borderValue, i, lineValue, alignedLineValue;\n    let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n    if (position === 'top') {\n      borderValue = alignBorderValue(this.bottom);\n      ty1 = this.bottom - tl;\n      ty2 = borderValue - axisHalfWidth;\n      y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n      y2 = chartArea.bottom;\n    } else if (position === 'bottom') {\n      borderValue = alignBorderValue(this.top);\n      y1 = chartArea.top;\n      y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = this.top + tl;\n    } else if (position === 'left') {\n      borderValue = alignBorderValue(this.right);\n      tx1 = this.right - tl;\n      tx2 = borderValue - axisHalfWidth;\n      x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n      x2 = chartArea.right;\n    } else if (position === 'right') {\n      borderValue = alignBorderValue(this.left);\n      x1 = chartArea.left;\n      x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n      tx1 = borderValue + axisHalfWidth;\n      tx2 = this.left + tl;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n      y1 = chartArea.top;\n      y2 = chartArea.bottom;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = ty1 + tl;\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n      tx1 = borderValue - axisHalfWidth;\n      tx2 = tx1 - tl;\n      x1 = chartArea.left;\n      x2 = chartArea.right;\n    }\n    const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n    const step = Math.max(1, Math.ceil(ticksLength / limit));\n    for (i = 0; i < ticksLength; i += step) {\n      const optsAtIndex = grid.setContext(this.getContext(i));\n      const lineWidth = optsAtIndex.lineWidth;\n      const lineColor = optsAtIndex.color;\n      const borderDash = optsAtIndex.borderDash || [];\n      const borderDashOffset = optsAtIndex.borderDashOffset;\n      const tickWidth = optsAtIndex.tickWidth;\n      const tickColor = optsAtIndex.tickColor;\n      const tickBorderDash = optsAtIndex.tickBorderDash || [];\n      const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n      lineValue = getPixelForGridLine(this, i, offset);\n      if (lineValue === undefined) {\n        continue;\n      }\n      alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n      if (isHorizontal) {\n        tx1 = tx2 = x1 = x2 = alignedLineValue;\n      } else {\n        ty1 = ty2 = y1 = y2 = alignedLineValue;\n      }\n      items.push({\n        tx1,\n        ty1,\n        tx2,\n        ty2,\n        x1,\n        y1,\n        x2,\n        y2,\n        width: lineWidth,\n        color: lineColor,\n        borderDash,\n        borderDashOffset,\n        tickWidth,\n        tickColor,\n        tickBorderDash,\n        tickBorderDashOffset,\n      });\n    }\n    this._ticksLength = ticksLength;\n    this._borderValue = borderValue;\n    return items;\n  }\n  _computeLabelItems(chartArea) {\n    const axis = this.axis;\n    const options = this.options;\n    const {position, ticks: optionTicks} = options;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const {align, crossAlign, padding, mirror} = optionTicks;\n    const tl = getTickMarkLength(options.grid);\n    const tickAndPadding = tl + padding;\n    const hTickAndPadding = mirror ? -padding : tickAndPadding;\n    const rotation = -toRadians(this.labelRotation);\n    const items = [];\n    let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n    let textBaseline = 'middle';\n    if (position === 'top') {\n      y = this.bottom - hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'bottom') {\n      y = this.top + hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'left') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (position === 'right') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n      }\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        x = this.chart.scales[positionAxisID].getPixelForValue(value);\n      }\n      textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n    }\n    if (axis === 'y') {\n      if (align === 'start') {\n        textBaseline = 'top';\n      } else if (align === 'end') {\n        textBaseline = 'bottom';\n      }\n    }\n    const labelSizes = this._getLabelSizes();\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      label = tick.label;\n      const optsAtIndex = optionTicks.setContext(this.getContext(i));\n      pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n      font = this._resolveTickFontOptions(i);\n      lineHeight = font.lineHeight;\n      lineCount = isArray(label) ? label.length : 1;\n      const halfCount = lineCount / 2;\n      const color = optsAtIndex.color;\n      const strokeColor = optsAtIndex.textStrokeColor;\n      const strokeWidth = optsAtIndex.textStrokeWidth;\n      let tickTextAlign = textAlign;\n      if (isHorizontal) {\n        x = pixel;\n        if (textAlign === 'inner') {\n          if (i === ilen - 1) {\n            tickTextAlign = !this.options.reverse ? 'right' : 'left';\n          } else if (i === 0) {\n            tickTextAlign = !this.options.reverse ? 'left' : 'right';\n          } else {\n            tickTextAlign = 'center';\n          }\n        }\n        if (position === 'top') {\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = -lineCount * lineHeight + lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n          } else {\n            textOffset = -labelSizes.highest.height + lineHeight / 2;\n          }\n        } else {\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n          } else {\n            textOffset = labelSizes.highest.height - lineCount * lineHeight;\n          }\n        }\n        if (mirror) {\n          textOffset *= -1;\n        }\n      } else {\n        y = pixel;\n        textOffset = (1 - lineCount) * lineHeight / 2;\n      }\n      let backdrop;\n      if (optsAtIndex.showLabelBackdrop) {\n        const labelPadding = toPadding(optsAtIndex.backdropPadding);\n        const height = labelSizes.heights[i];\n        const width = labelSizes.widths[i];\n        let top = y + textOffset - labelPadding.top;\n        let left = x - labelPadding.left;\n        switch (textBaseline) {\n        case 'middle':\n          top -= height / 2;\n          break;\n        case 'bottom':\n          top -= height;\n          break;\n        }\n        switch (textAlign) {\n        case 'center':\n          left -= width / 2;\n          break;\n        case 'right':\n          left -= width;\n          break;\n        }\n        backdrop = {\n          left,\n          top,\n          width: width + labelPadding.width,\n          height: height + labelPadding.height,\n          color: optsAtIndex.backdropColor,\n        };\n      }\n      items.push({\n        rotation,\n        label,\n        font,\n        color,\n        strokeColor,\n        strokeWidth,\n        textOffset,\n        textAlign: tickTextAlign,\n        textBaseline,\n        translation: [x, y],\n        backdrop,\n      });\n    }\n    return items;\n  }\n  _getXAxisLabelAlignment() {\n    const {position, ticks} = this.options;\n    const rotation = -toRadians(this.labelRotation);\n    if (rotation) {\n      return position === 'top' ? 'left' : 'right';\n    }\n    let align = 'center';\n    if (ticks.align === 'start') {\n      align = 'left';\n    } else if (ticks.align === 'end') {\n      align = 'right';\n    } else if (ticks.align === 'inner') {\n      align = 'inner';\n    }\n    return align;\n  }\n  _getYAxisLabelAlignment(tl) {\n    const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n    const labelSizes = this._getLabelSizes();\n    const tickAndPadding = tl + padding;\n    const widest = labelSizes.widest.width;\n    let textAlign;\n    let x;\n    if (position === 'left') {\n      if (mirror) {\n        x = this.right + padding;\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += (widest / 2);\n        } else {\n          textAlign = 'right';\n          x += widest;\n        }\n      } else {\n        x = this.right - tickAndPadding;\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x = this.left;\n        }\n      }\n    } else if (position === 'right') {\n      if (mirror) {\n        x = this.left + padding;\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x -= widest;\n        }\n      } else {\n        x = this.left + tickAndPadding;\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += widest / 2;\n        } else {\n          textAlign = 'right';\n          x = this.right;\n        }\n      }\n    } else {\n      textAlign = 'right';\n    }\n    return {textAlign, x};\n  }\n  _computeLabelArea() {\n    if (this.options.ticks.mirror) {\n      return;\n    }\n    const chart = this.chart;\n    const position = this.options.position;\n    if (position === 'left' || position === 'right') {\n      return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n    } if (position === 'top' || position === 'bottom') {\n      return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n    }\n  }\n  drawBackground() {\n    const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n    if (backgroundColor) {\n      ctx.save();\n      ctx.fillStyle = backgroundColor;\n      ctx.fillRect(left, top, width, height);\n      ctx.restore();\n    }\n  }\n  getLineWidthForValue(value) {\n    const grid = this.options.grid;\n    if (!this._isVisible() || !grid.display) {\n      return 0;\n    }\n    const ticks = this.ticks;\n    const index = ticks.findIndex(t => t.value === value);\n    if (index >= 0) {\n      const opts = grid.setContext(this.getContext(index));\n      return opts.lineWidth;\n    }\n    return 0;\n  }\n  drawGrid(chartArea) {\n    const grid = this.options.grid;\n    const ctx = this.ctx;\n    const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n    let i, ilen;\n    const drawLine = (p1, p2, style) => {\n      if (!style.width || !style.color) {\n        return;\n      }\n      ctx.save();\n      ctx.lineWidth = style.width;\n      ctx.strokeStyle = style.color;\n      ctx.setLineDash(style.borderDash || []);\n      ctx.lineDashOffset = style.borderDashOffset;\n      ctx.beginPath();\n      ctx.moveTo(p1.x, p1.y);\n      ctx.lineTo(p2.x, p2.y);\n      ctx.stroke();\n      ctx.restore();\n    };\n    if (grid.display) {\n      for (i = 0, ilen = items.length; i < ilen; ++i) {\n        const item = items[i];\n        if (grid.drawOnChartArea) {\n          drawLine(\n            {x: item.x1, y: item.y1},\n            {x: item.x2, y: item.y2},\n            item\n          );\n        }\n        if (grid.drawTicks) {\n          drawLine(\n            {x: item.tx1, y: item.ty1},\n            {x: item.tx2, y: item.ty2},\n            {\n              color: item.tickColor,\n              width: item.tickWidth,\n              borderDash: item.tickBorderDash,\n              borderDashOffset: item.tickBorderDashOffset\n            }\n          );\n        }\n      }\n    }\n  }\n  drawBorder() {\n    const {chart, ctx, options: {grid}} = this;\n    const borderOpts = grid.setContext(this.getContext());\n    const axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;\n    if (!axisWidth) {\n      return;\n    }\n    const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n    const borderValue = this._borderValue;\n    let x1, x2, y1, y2;\n    if (this.isHorizontal()) {\n      x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n      x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n      y1 = y2 = borderValue;\n    } else {\n      y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n      y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n      x1 = x2 = borderValue;\n    }\n    ctx.save();\n    ctx.lineWidth = borderOpts.borderWidth;\n    ctx.strokeStyle = borderOpts.borderColor;\n    ctx.beginPath();\n    ctx.moveTo(x1, y1);\n    ctx.lineTo(x2, y2);\n    ctx.stroke();\n    ctx.restore();\n  }\n  drawLabels(chartArea) {\n    const optionTicks = this.options.ticks;\n    if (!optionTicks.display) {\n      return;\n    }\n    const ctx = this.ctx;\n    const area = this._computeLabelArea();\n    if (area) {\n      clipArea(ctx, area);\n    }\n    const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n    let i, ilen;\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      const item = items[i];\n      const tickFont = item.font;\n      const label = item.label;\n      if (item.backdrop) {\n        ctx.fillStyle = item.backdrop.color;\n        ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height);\n      }\n      let y = item.textOffset;\n      renderText(ctx, label, 0, y, tickFont, item);\n    }\n    if (area) {\n      unclipArea(ctx);\n    }\n  }\n  drawTitle() {\n    const {ctx, options: {position, title, reverse}} = this;\n    if (!title.display) {\n      return;\n    }\n    const font = toFont(title.font);\n    const padding = toPadding(title.padding);\n    const align = title.align;\n    let offset = font.lineHeight / 2;\n    if (position === 'bottom' || position === 'center' || isObject(position)) {\n      offset += padding.bottom;\n      if (isArray(title.text)) {\n        offset += font.lineHeight * (title.text.length - 1);\n      }\n    } else {\n      offset += padding.top;\n    }\n    const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n    renderText(ctx, title.text, 0, 0, font, {\n      color: title.color,\n      maxWidth,\n      rotation,\n      textAlign: titleAlign(align, position, reverse),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n  draw(chartArea) {\n    if (!this._isVisible()) {\n      return;\n    }\n    this.drawBackground();\n    this.drawGrid(chartArea);\n    this.drawBorder();\n    this.drawTitle();\n    this.drawLabels(chartArea);\n  }\n  _layers() {\n    const opts = this.options;\n    const tz = opts.ticks && opts.ticks.z || 0;\n    const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n    if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n      return [{\n        z: tz,\n        draw: (chartArea) => {\n          this.draw(chartArea);\n        }\n      }];\n    }\n    return [{\n      z: gz,\n      draw: (chartArea) => {\n        this.drawBackground();\n        this.drawGrid(chartArea);\n        this.drawTitle();\n      }\n    }, {\n      z: gz + 1,\n      draw: () => {\n        this.drawBorder();\n      }\n    }, {\n      z: tz,\n      draw: (chartArea) => {\n        this.drawLabels(chartArea);\n      }\n    }];\n  }\n  getMatchingVisibleMetas(type) {\n    const metas = this.chart.getSortedVisibleDatasetMetas();\n    const axisID = this.axis + 'AxisID';\n    const result = [];\n    let i, ilen;\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      const meta = metas[i];\n      if (meta[axisID] === this.id && (!type || meta.type === type)) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n  _resolveTickFontOptions(index) {\n    const opts = this.options.ticks.setContext(this.getContext(index));\n    return toFont(opts.font);\n  }\n  _maxDigits() {\n    const fontSize = this._resolveTickFontOptions(0).lineHeight;\n    return (this.isHorizontal() ? this.width : this.height) / fontSize;\n  }\n}\n\nclass TypedRegistry {\n  constructor(type, scope, override) {\n    this.type = type;\n    this.scope = scope;\n    this.override = override;\n    this.items = Object.create(null);\n  }\n  isForType(type) {\n    return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n  }\n  register(item) {\n    const proto = Object.getPrototypeOf(item);\n    let parentScope;\n    if (isIChartComponent(proto)) {\n      parentScope = this.register(proto);\n    }\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope + '.' + id;\n    if (!id) {\n      throw new Error('class does not have id: ' + item);\n    }\n    if (id in items) {\n      return scope;\n    }\n    items[id] = item;\n    registerDefaults(item, scope, parentScope);\n    if (this.override) {\n      defaults.override(item.id, item.overrides);\n    }\n    return scope;\n  }\n  get(id) {\n    return this.items[id];\n  }\n  unregister(item) {\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope;\n    if (id in items) {\n      delete items[id];\n    }\n    if (scope && id in defaults[scope]) {\n      delete defaults[scope][id];\n      if (this.override) {\n        delete overrides[id];\n      }\n    }\n  }\n}\nfunction registerDefaults(item, scope, parentScope) {\n  const itemDefaults = merge(Object.create(null), [\n    parentScope ? defaults.get(parentScope) : {},\n    defaults.get(scope),\n    item.defaults\n  ]);\n  defaults.set(scope, itemDefaults);\n  if (item.defaultRoutes) {\n    routeDefaults(scope, item.defaultRoutes);\n  }\n  if (item.descriptors) {\n    defaults.describe(scope, item.descriptors);\n  }\n}\nfunction routeDefaults(scope, routes) {\n  Object.keys(routes).forEach(property => {\n    const propertyParts = property.split('.');\n    const sourceName = propertyParts.pop();\n    const sourceScope = [scope].concat(propertyParts).join('.');\n    const parts = routes[property].split('.');\n    const targetName = parts.pop();\n    const targetScope = parts.join('.');\n    defaults.route(sourceScope, sourceName, targetScope, targetName);\n  });\n}\nfunction isIChartComponent(proto) {\n  return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n  constructor() {\n    this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n    this.elements = new TypedRegistry(Element, 'elements');\n    this.plugins = new TypedRegistry(Object, 'plugins');\n    this.scales = new TypedRegistry(Scale, 'scales');\n    this._typedRegistries = [this.controllers, this.scales, this.elements];\n  }\n  add(...args) {\n    this._each('register', args);\n  }\n  remove(...args) {\n    this._each('unregister', args);\n  }\n  addControllers(...args) {\n    this._each('register', args, this.controllers);\n  }\n  addElements(...args) {\n    this._each('register', args, this.elements);\n  }\n  addPlugins(...args) {\n    this._each('register', args, this.plugins);\n  }\n  addScales(...args) {\n    this._each('register', args, this.scales);\n  }\n  getController(id) {\n    return this._get(id, this.controllers, 'controller');\n  }\n  getElement(id) {\n    return this._get(id, this.elements, 'element');\n  }\n  getPlugin(id) {\n    return this._get(id, this.plugins, 'plugin');\n  }\n  getScale(id) {\n    return this._get(id, this.scales, 'scale');\n  }\n  removeControllers(...args) {\n    this._each('unregister', args, this.controllers);\n  }\n  removeElements(...args) {\n    this._each('unregister', args, this.elements);\n  }\n  removePlugins(...args) {\n    this._each('unregister', args, this.plugins);\n  }\n  removeScales(...args) {\n    this._each('unregister', args, this.scales);\n  }\n  _each(method, args, typedRegistry) {\n    [...args].forEach(arg => {\n      const reg = typedRegistry || this._getRegistryForType(arg);\n      if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n        this._exec(method, reg, arg);\n      } else {\n        each(arg, item => {\n          const itemReg = typedRegistry || this._getRegistryForType(item);\n          this._exec(method, itemReg, item);\n        });\n      }\n    });\n  }\n  _exec(method, registry, component) {\n    const camelMethod = _capitalize(method);\n    callback(component['before' + camelMethod], [], component);\n    registry[method](component);\n    callback(component['after' + camelMethod], [], component);\n  }\n  _getRegistryForType(type) {\n    for (let i = 0; i < this._typedRegistries.length; i++) {\n      const reg = this._typedRegistries[i];\n      if (reg.isForType(type)) {\n        return reg;\n      }\n    }\n    return this.plugins;\n  }\n  _get(id, typedRegistry, type) {\n    const item = typedRegistry.get(id);\n    if (item === undefined) {\n      throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n    }\n    return item;\n  }\n}\nvar registry = new Registry();\n\nclass ScatterController extends DatasetController {\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {data: points = []} = meta;\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n    this._drawStart = start;\n    this._drawCount = count;\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n    if (this.options.showLine) {\n      const {dataset: line, _dataset} = meta;\n      line._chart = this.chart;\n      line._datasetIndex = this.index;\n      line._decimated = !!_dataset._decimated;\n      line.points = points;\n      const options = this.resolveDatasetElementOptions(mode);\n      options.segment = this.options.segment;\n      this.updateElement(line, undefined, {\n        animated: !animationsDisabled,\n        options\n      }, mode);\n    }\n    this.updateElements(points, start, count, mode);\n  }\n  addElements() {\n    const {showLine} = this.options;\n    if (!this.datasetElementType && showLine) {\n      this.datasetElementType = registry.getElement('line');\n    }\n    super.addElements();\n  }\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n    for (let i = start; i < start + count; ++i) {\n      const point = points[i];\n      const parsed = this.getParsed(i);\n      const properties = directUpdate ? point : {};\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n      prevParsed = parsed;\n    }\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const data = meta.data || [];\n    if (!this.options.showLine) {\n      let max = 0;\n      for (let i = data.length - 1; i >= 0; --i) {\n        max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n      }\n      return max > 0 && max;\n    }\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n    if (!data.length) {\n      return border;\n    }\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n}\nScatterController.id = 'scatter';\nScatterController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'point',\n  showLine: false,\n  fill: false\n};\nScatterController.overrides = {\n  interaction: {\n    mode: 'point'\n  },\n  plugins: {\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(item) {\n          return '(' + item.label + ', ' + item.formattedValue + ')';\n        }\n      }\n    }\n  },\n  scales: {\n    x: {\n      type: 'linear'\n    },\n    y: {\n      type: 'linear'\n    }\n  }\n};\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPolarAreaController: PolarAreaController,\nPieController: PieController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\nfunction abstract() {\n  throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\nclass DateAdapter {\n  constructor(options) {\n    this.options = options || {};\n  }\n  init(chartOptions) {}\n  formats() {\n    return abstract();\n  }\n  parse(value, format) {\n    return abstract();\n  }\n  format(timestamp, format) {\n    return abstract();\n  }\n  add(timestamp, amount, unit) {\n    return abstract();\n  }\n  diff(a, b, unit) {\n    return abstract();\n  }\n  startOf(timestamp, unit, weekday) {\n    return abstract();\n  }\n  endOf(timestamp, unit) {\n    return abstract();\n  }\n}\nDateAdapter.override = function(members) {\n  Object.assign(DateAdapter.prototype, members);\n};\nvar adapters = {\n  _date: DateAdapter\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n  const {controller, data, _sorted} = metaset;\n  const iScale = controller._cachedMeta.iScale;\n  if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n    const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n    if (!intersect) {\n      return lookupMethod(data, axis, value);\n    } else if (controller._sharedOptions) {\n      const el = data[0];\n      const range = typeof el.getRange === 'function' && el.getRange(axis);\n      if (range) {\n        const start = lookupMethod(data, axis, value - range);\n        const end = lookupMethod(data, axis, value + range);\n        return {lo: start.lo, hi: end.hi};\n      }\n    }\n  }\n  return {lo: 0, hi: data.length - 1};\n}\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n  const metasets = chart.getSortedVisibleDatasetMetas();\n  const value = position[axis];\n  for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n    const {index, data} = metasets[i];\n    const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n    for (let j = lo; j <= hi; ++j) {\n      const element = data[j];\n      if (!element.skip) {\n        handler(element, index, j);\n      }\n    }\n  }\n}\nfunction getDistanceMetricForAxis(axis) {\n  const useX = axis.indexOf('x') !== -1;\n  const useY = axis.indexOf('y') !== -1;\n  return function(pt1, pt2) {\n    const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n    const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n    return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n  };\n}\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n  const items = [];\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return items;\n  }\n  const evaluationFunc = function(element, datasetIndex, index) {\n    if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n      return;\n    }\n    if (element.inRange(position.x, position.y, useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n    }\n  };\n  evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n  return items;\n}\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n  let items = [];\n  function evaluationFunc(element, datasetIndex, index) {\n    const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n    const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n    if (_angleBetween(angle, startAngle, endAngle)) {\n      items.push({element, datasetIndex, index});\n    }\n  }\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  let items = [];\n  const distanceMetric = getDistanceMetricForAxis(axis);\n  let minDistance = Number.POSITIVE_INFINITY;\n  function evaluationFunc(element, datasetIndex, index) {\n    const inRange = element.inRange(position.x, position.y, useFinalPosition);\n    if (intersect && !inRange) {\n      return;\n    }\n    const center = element.getCenterPoint(useFinalPosition);\n    const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n    if (!pointInArea && !inRange) {\n      return;\n    }\n    const distance = distanceMetric(position, center);\n    if (distance < minDistance) {\n      items = [{element, datasetIndex, index}];\n      minDistance = distance;\n    } else if (distance === minDistance) {\n      items.push({element, datasetIndex, index});\n    }\n  }\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return [];\n  }\n  return axis === 'r' && !intersect\n    ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n    : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n  const items = [];\n  const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n  let intersectsItem = false;\n  evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n    if (element[rangeMethod](position[axis], useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n      intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n    }\n  });\n  if (intersect && !intersectsItem) {\n    return [];\n  }\n  return items;\n}\nvar Interaction = {\n  evaluateInteractionItems,\n  modes: {\n    index(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'x';\n      const includeInvisible = options.includeInvisible || false;\n      const items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n        : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n      const elements = [];\n      if (!items.length) {\n        return [];\n      }\n      chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n        const index = items[0].index;\n        const element = meta.data[index];\n        if (element && !element.skip) {\n          elements.push({element, datasetIndex: meta.index, index});\n        }\n      });\n      return elements;\n    },\n    dataset(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      let items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n        getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n      if (items.length > 0) {\n        const datasetIndex = items[0].datasetIndex;\n        const data = chart.getDatasetMeta(datasetIndex).data;\n        items = [];\n        for (let i = 0; i < data.length; ++i) {\n          items.push({element: data[i], datasetIndex, index: i});\n        }\n      }\n      return items;\n    },\n    point(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n    },\n    nearest(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n    },\n    x(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n    },\n    y(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n    }\n  }\n};\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\nfunction filterByPosition(array, position) {\n  return array.filter(v => v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n  return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n  return array.sort((a, b) => {\n    const v0 = reverse ? b : a;\n    const v1 = reverse ? a : b;\n    return v0.weight === v1.weight ?\n      v0.index - v1.index :\n      v0.weight - v1.weight;\n  });\n}\nfunction wrapBoxes(boxes) {\n  const layoutBoxes = [];\n  let i, ilen, box, pos, stack, stackWeight;\n  for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n    box = boxes[i];\n    ({position: pos, options: {stack, stackWeight = 1}} = box);\n    layoutBoxes.push({\n      index: i,\n      box,\n      pos,\n      horizontal: box.isHorizontal(),\n      weight: box.weight,\n      stack: stack && (pos + stack),\n      stackWeight\n    });\n  }\n  return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n  const stacks = {};\n  for (const wrap of layouts) {\n    const {stack, pos, stackWeight} = wrap;\n    if (!stack || !STATIC_POSITIONS.includes(pos)) {\n      continue;\n    }\n    const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n    _stack.count++;\n    _stack.weight += stackWeight;\n  }\n  return stacks;\n}\nfunction setLayoutDims(layouts, params) {\n  const stacks = buildStacks(layouts);\n  const {vBoxMaxWidth, hBoxMaxHeight} = params;\n  let i, ilen, layout;\n  for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n    layout = layouts[i];\n    const {fullSize} = layout.box;\n    const stack = stacks[layout.stack];\n    const factor = stack && layout.stackWeight / stack.weight;\n    if (layout.horizontal) {\n      layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n      layout.height = hBoxMaxHeight;\n    } else {\n      layout.width = vBoxMaxWidth;\n      layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n    }\n  }\n  return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n  const layoutBoxes = wrapBoxes(boxes);\n  const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n  const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n  const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n  const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n  const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n  const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n  const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n  return {\n    fullSize,\n    leftAndTop: left.concat(top),\n    rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n    chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n    vertical: left.concat(right).concat(centerVertical),\n    horizontal: top.concat(bottom).concat(centerHorizontal)\n  };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n  return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n  maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n  maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n  maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n  maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n  const {pos, box} = layout;\n  const maxPadding = chartArea.maxPadding;\n  if (!isObject(pos)) {\n    if (layout.size) {\n      chartArea[pos] -= layout.size;\n    }\n    const stack = stacks[layout.stack] || {size: 0, count: 1};\n    stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n    layout.size = stack.size / stack.count;\n    chartArea[pos] += layout.size;\n  }\n  if (box.getPadding) {\n    updateMaxPadding(maxPadding, box.getPadding());\n  }\n  const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n  const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n  const widthChanged = newWidth !== chartArea.w;\n  const heightChanged = newHeight !== chartArea.h;\n  chartArea.w = newWidth;\n  chartArea.h = newHeight;\n  return layout.horizontal\n    ? {same: widthChanged, other: heightChanged}\n    : {same: heightChanged, other: widthChanged};\n}\nfunction handleMaxPadding(chartArea) {\n  const maxPadding = chartArea.maxPadding;\n  function updatePos(pos) {\n    const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n    chartArea[pos] += change;\n    return change;\n  }\n  chartArea.y += updatePos('top');\n  chartArea.x += updatePos('left');\n  updatePos('right');\n  updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n  const maxPadding = chartArea.maxPadding;\n  function marginForPositions(positions) {\n    const margin = {left: 0, top: 0, right: 0, bottom: 0};\n    positions.forEach((pos) => {\n      margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n    });\n    return margin;\n  }\n  return horizontal\n    ? marginForPositions(['left', 'right'])\n    : marginForPositions(['top', 'bottom']);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n  const refitBoxes = [];\n  let i, ilen, layout, box, refit, changed;\n  for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n    layout = boxes[i];\n    box = layout.box;\n    box.update(\n      layout.width || chartArea.w,\n      layout.height || chartArea.h,\n      getMargins(layout.horizontal, chartArea)\n    );\n    const {same, other} = updateDims(chartArea, params, layout, stacks);\n    refit |= same && refitBoxes.length;\n    changed = changed || other;\n    if (!box.fullSize) {\n      refitBoxes.push(layout);\n    }\n  }\n  return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n  box.top = top;\n  box.left = left;\n  box.right = left + width;\n  box.bottom = top + height;\n  box.width = width;\n  box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n  const userPadding = params.padding;\n  let {x, y} = chartArea;\n  for (const layout of boxes) {\n    const box = layout.box;\n    const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n    const weight = (layout.stackWeight / stack.weight) || 1;\n    if (layout.horizontal) {\n      const width = chartArea.w * weight;\n      const height = stack.size || box.height;\n      if (defined(stack.start)) {\n        y = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n      } else {\n        setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n      }\n      stack.start = y;\n      stack.placed += width;\n      y = box.bottom;\n    } else {\n      const height = chartArea.h * weight;\n      const width = stack.size || box.width;\n      if (defined(stack.start)) {\n        x = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n      } else {\n        setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n      }\n      stack.start = x;\n      stack.placed += height;\n      x = box.right;\n    }\n  }\n  chartArea.x = x;\n  chartArea.y = y;\n}\ndefaults.set('layout', {\n  autoPadding: true,\n  padding: {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  }\n});\nvar layouts = {\n  addBox(chart, item) {\n    if (!chart.boxes) {\n      chart.boxes = [];\n    }\n    item.fullSize = item.fullSize || false;\n    item.position = item.position || 'top';\n    item.weight = item.weight || 0;\n    item._layers = item._layers || function() {\n      return [{\n        z: 0,\n        draw(chartArea) {\n          item.draw(chartArea);\n        }\n      }];\n    };\n    chart.boxes.push(item);\n  },\n  removeBox(chart, layoutItem) {\n    const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n    if (index !== -1) {\n      chart.boxes.splice(index, 1);\n    }\n  },\n  configure(chart, item, options) {\n    item.fullSize = options.fullSize;\n    item.position = options.position;\n    item.weight = options.weight;\n  },\n  update(chart, width, height, minPadding) {\n    if (!chart) {\n      return;\n    }\n    const padding = toPadding(chart.options.layout.padding);\n    const availableWidth = Math.max(width - padding.width, 0);\n    const availableHeight = Math.max(height - padding.height, 0);\n    const boxes = buildLayoutBoxes(chart.boxes);\n    const verticalBoxes = boxes.vertical;\n    const horizontalBoxes = boxes.horizontal;\n    each(chart.boxes, box => {\n      if (typeof box.beforeLayout === 'function') {\n        box.beforeLayout();\n      }\n    });\n    const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n      wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n    const params = Object.freeze({\n      outerWidth: width,\n      outerHeight: height,\n      padding,\n      availableWidth,\n      availableHeight,\n      vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n      hBoxMaxHeight: availableHeight / 2\n    });\n    const maxPadding = Object.assign({}, padding);\n    updateMaxPadding(maxPadding, toPadding(minPadding));\n    const chartArea = Object.assign({\n      maxPadding,\n      w: availableWidth,\n      h: availableHeight,\n      x: padding.left,\n      y: padding.top\n    }, padding);\n    const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n    fitBoxes(boxes.fullSize, chartArea, params, stacks);\n    fitBoxes(verticalBoxes, chartArea, params, stacks);\n    if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n      fitBoxes(verticalBoxes, chartArea, params, stacks);\n    }\n    handleMaxPadding(chartArea);\n    placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n    chartArea.x += chartArea.w;\n    chartArea.y += chartArea.h;\n    placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n    chart.chartArea = {\n      left: chartArea.left,\n      top: chartArea.top,\n      right: chartArea.left + chartArea.w,\n      bottom: chartArea.top + chartArea.h,\n      height: chartArea.h,\n      width: chartArea.w,\n    };\n    each(boxes.chartArea, (layout) => {\n      const box = layout.box;\n      Object.assign(box, chart.chartArea);\n      box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n    });\n  }\n};\n\nclass BasePlatform {\n  acquireContext(canvas, aspectRatio) {}\n  releaseContext(context) {\n    return false;\n  }\n  addEventListener(chart, type, listener) {}\n  removeEventListener(chart, type, listener) {}\n  getDevicePixelRatio() {\n    return 1;\n  }\n  getMaximumSize(element, width, height, aspectRatio) {\n    width = Math.max(0, width || element.width);\n    height = height || element.height;\n    return {\n      width,\n      height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n    };\n  }\n  isAttached(canvas) {\n    return true;\n  }\n  updateConfig(config) {\n  }\n}\n\nclass BasicPlatform extends BasePlatform {\n  acquireContext(item) {\n    return item && item.getContext && item.getContext('2d') || null;\n  }\n  updateConfig(config) {\n    config.options.animation = false;\n  }\n}\n\nconst EXPANDO_KEY = '$chartjs';\nconst EVENT_TYPES = {\n  touchstart: 'mousedown',\n  touchmove: 'mousemove',\n  touchend: 'mouseup',\n  pointerenter: 'mouseenter',\n  pointerdown: 'mousedown',\n  pointermove: 'mousemove',\n  pointerup: 'mouseup',\n  pointerleave: 'mouseout',\n  pointerout: 'mouseout'\n};\nconst isNullOrEmpty = value => value === null || value === '';\nfunction initCanvas(canvas, aspectRatio) {\n  const style = canvas.style;\n  const renderHeight = canvas.getAttribute('height');\n  const renderWidth = canvas.getAttribute('width');\n  canvas[EXPANDO_KEY] = {\n    initial: {\n      height: renderHeight,\n      width: renderWidth,\n      style: {\n        display: style.display,\n        height: style.height,\n        width: style.width\n      }\n    }\n  };\n  style.display = style.display || 'block';\n  style.boxSizing = style.boxSizing || 'border-box';\n  if (isNullOrEmpty(renderWidth)) {\n    const displayWidth = readUsedSize(canvas, 'width');\n    if (displayWidth !== undefined) {\n      canvas.width = displayWidth;\n    }\n  }\n  if (isNullOrEmpty(renderHeight)) {\n    if (canvas.style.height === '') {\n      canvas.height = canvas.width / (aspectRatio || 2);\n    } else {\n      const displayHeight = readUsedSize(canvas, 'height');\n      if (displayHeight !== undefined) {\n        canvas.height = displayHeight;\n      }\n    }\n  }\n  return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\nfunction addListener(node, type, listener) {\n  node.addEventListener(type, listener, eventListenerOptions);\n}\nfunction removeListener(chart, type, listener) {\n  chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\nfunction fromNativeEvent(event, chart) {\n  const type = EVENT_TYPES[event.type] || event.type;\n  const {x, y} = getRelativePosition(event, chart);\n  return {\n    type,\n    chart,\n    native: event,\n    x: x !== undefined ? x : null,\n    y: y !== undefined ? y : null,\n  };\n}\nfunction nodeListContains(nodeList, canvas) {\n  for (const node of nodeList) {\n    if (node === canvas || node.contains(canvas)) {\n      return true;\n    }\n  }\n}\nfunction createAttachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n  const dpr = window.devicePixelRatio;\n  if (dpr === oldDevicePixelRatio) {\n    return;\n  }\n  oldDevicePixelRatio = dpr;\n  drpListeningCharts.forEach((resize, chart) => {\n    if (chart.currentDevicePixelRatio !== dpr) {\n      resize();\n    }\n  });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n  if (!drpListeningCharts.size) {\n    window.addEventListener('resize', onWindowResize);\n  }\n  drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n  drpListeningCharts.delete(chart);\n  if (!drpListeningCharts.size) {\n    window.removeEventListener('resize', onWindowResize);\n  }\n}\nfunction createResizeObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const container = canvas && _getParentNode(canvas);\n  if (!container) {\n    return;\n  }\n  const resize = throttled((width, height) => {\n    const w = container.clientWidth;\n    listener(width, height);\n    if (w < container.clientWidth) {\n      listener();\n    }\n  }, window);\n  const observer = new ResizeObserver(entries => {\n    const entry = entries[0];\n    const width = entry.contentRect.width;\n    const height = entry.contentRect.height;\n    if (width === 0 && height === 0) {\n      return;\n    }\n    resize(width, height);\n  });\n  observer.observe(container);\n  listenDevicePixelRatioChanges(chart, resize);\n  return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n  if (observer) {\n    observer.disconnect();\n  }\n  if (type === 'resize') {\n    unlistenDevicePixelRatioChanges(chart);\n  }\n}\nfunction createProxyAndListen(chart, type, listener) {\n  const canvas = chart.canvas;\n  const proxy = throttled((event) => {\n    if (chart.ctx !== null) {\n      listener(fromNativeEvent(event, chart));\n    }\n  }, chart, (args) => {\n    const event = args[0];\n    return [event, event.offsetX, event.offsetY];\n  });\n  addListener(canvas, type, proxy);\n  return proxy;\n}\nclass DomPlatform extends BasePlatform {\n  acquireContext(canvas, aspectRatio) {\n    const context = canvas && canvas.getContext && canvas.getContext('2d');\n    if (context && context.canvas === canvas) {\n      initCanvas(canvas, aspectRatio);\n      return context;\n    }\n    return null;\n  }\n  releaseContext(context) {\n    const canvas = context.canvas;\n    if (!canvas[EXPANDO_KEY]) {\n      return false;\n    }\n    const initial = canvas[EXPANDO_KEY].initial;\n    ['height', 'width'].forEach((prop) => {\n      const value = initial[prop];\n      if (isNullOrUndef(value)) {\n        canvas.removeAttribute(prop);\n      } else {\n        canvas.setAttribute(prop, value);\n      }\n    });\n    const style = initial.style || {};\n    Object.keys(style).forEach((key) => {\n      canvas.style[key] = style[key];\n    });\n    canvas.width = canvas.width;\n    delete canvas[EXPANDO_KEY];\n    return true;\n  }\n  addEventListener(chart, type, listener) {\n    this.removeEventListener(chart, type);\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const handlers = {\n      attach: createAttachObserver,\n      detach: createDetachObserver,\n      resize: createResizeObserver\n    };\n    const handler = handlers[type] || createProxyAndListen;\n    proxies[type] = handler(chart, type, listener);\n  }\n  removeEventListener(chart, type) {\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const proxy = proxies[type];\n    if (!proxy) {\n      return;\n    }\n    const handlers = {\n      attach: releaseObserver,\n      detach: releaseObserver,\n      resize: releaseObserver\n    };\n    const handler = handlers[type] || removeListener;\n    handler(chart, type, proxy);\n    proxies[type] = undefined;\n  }\n  getDevicePixelRatio() {\n    return window.devicePixelRatio;\n  }\n  getMaximumSize(canvas, width, height, aspectRatio) {\n    return getMaximumSize(canvas, width, height, aspectRatio);\n  }\n  isAttached(canvas) {\n    const container = _getParentNode(canvas);\n    return !!(container && container.isConnected);\n  }\n}\n\nfunction _detectPlatform(canvas) {\n  if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n    return BasicPlatform;\n  }\n  return DomPlatform;\n}\n\nclass PluginService {\n  constructor() {\n    this._init = [];\n  }\n  notify(chart, hook, args, filter) {\n    if (hook === 'beforeInit') {\n      this._init = this._createDescriptors(chart, true);\n      this._notify(this._init, chart, 'install');\n    }\n    const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n    const result = this._notify(descriptors, chart, hook, args);\n    if (hook === 'afterDestroy') {\n      this._notify(descriptors, chart, 'stop');\n      this._notify(this._init, chart, 'uninstall');\n    }\n    return result;\n  }\n  _notify(descriptors, chart, hook, args) {\n    args = args || {};\n    for (const descriptor of descriptors) {\n      const plugin = descriptor.plugin;\n      const method = plugin[hook];\n      const params = [chart, args, descriptor.options];\n      if (callback(method, params, plugin) === false && args.cancelable) {\n        return false;\n      }\n    }\n    return true;\n  }\n  invalidate() {\n    if (!isNullOrUndef(this._cache)) {\n      this._oldCache = this._cache;\n      this._cache = undefined;\n    }\n  }\n  _descriptors(chart) {\n    if (this._cache) {\n      return this._cache;\n    }\n    const descriptors = this._cache = this._createDescriptors(chart);\n    this._notifyStateChanges(chart);\n    return descriptors;\n  }\n  _createDescriptors(chart, all) {\n    const config = chart && chart.config;\n    const options = valueOrDefault(config.options && config.options.plugins, {});\n    const plugins = allPlugins(config);\n    return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n  }\n  _notifyStateChanges(chart) {\n    const previousDescriptors = this._oldCache || [];\n    const descriptors = this._cache;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n    this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n    this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n  }\n}\nfunction allPlugins(config) {\n  const localIds = {};\n  const plugins = [];\n  const keys = Object.keys(registry.plugins.items);\n  for (let i = 0; i < keys.length; i++) {\n    plugins.push(registry.getPlugin(keys[i]));\n  }\n  const local = config.plugins || [];\n  for (let i = 0; i < local.length; i++) {\n    const plugin = local[i];\n    if (plugins.indexOf(plugin) === -1) {\n      plugins.push(plugin);\n      localIds[plugin.id] = true;\n    }\n  }\n  return {plugins, localIds};\n}\nfunction getOpts(options, all) {\n  if (!all && options === false) {\n    return null;\n  }\n  if (options === true) {\n    return {};\n  }\n  return options;\n}\nfunction createDescriptors(chart, {plugins, localIds}, options, all) {\n  const result = [];\n  const context = chart.getContext();\n  for (const plugin of plugins) {\n    const id = plugin.id;\n    const opts = getOpts(options[id], all);\n    if (opts === null) {\n      continue;\n    }\n    result.push({\n      plugin,\n      options: pluginOpts(chart.config, {plugin, local: localIds[id]}, opts, context)\n    });\n  }\n  return result;\n}\nfunction pluginOpts(config, {plugin, local}, opts, context) {\n  const keys = config.pluginScopeKeys(plugin);\n  const scopes = config.getOptionScopes(opts, keys);\n  if (local && plugin.defaults) {\n    scopes.push(plugin.defaults);\n  }\n  return config.createResolver(scopes, context, [''], {\n    scriptable: false,\n    indexable: false,\n    allKeys: true\n  });\n}\n\nfunction getIndexAxis(type, options) {\n  const datasetDefaults = defaults.datasets[type] || {};\n  const datasetOptions = (options.datasets || {})[type] || {};\n  return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n  let axis = id;\n  if (id === '_index_') {\n    axis = indexAxis;\n  } else if (id === '_value_') {\n    axis = indexAxis === 'x' ? 'y' : 'x';\n  }\n  return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n  return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction axisFromPosition(position) {\n  if (position === 'top' || position === 'bottom') {\n    return 'x';\n  }\n  if (position === 'left' || position === 'right') {\n    return 'y';\n  }\n}\nfunction determineAxis(id, scaleOptions) {\n  if (id === 'x' || id === 'y') {\n    return id;\n  }\n  return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase();\n}\nfunction mergeScaleConfig(config, options) {\n  const chartDefaults = overrides[config.type] || {scales: {}};\n  const configScales = options.scales || {};\n  const chartIndexAxis = getIndexAxis(config.type, options);\n  const firstIDs = Object.create(null);\n  const scales = Object.create(null);\n  Object.keys(configScales).forEach(id => {\n    const scaleConf = configScales[id];\n    if (!isObject(scaleConf)) {\n      return console.error(`Invalid scale configuration for scale: ${id}`);\n    }\n    if (scaleConf._proxy) {\n      return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n    }\n    const axis = determineAxis(id, scaleConf);\n    const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n    const defaultScaleOptions = chartDefaults.scales || {};\n    firstIDs[axis] = firstIDs[axis] || id;\n    scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n  });\n  config.data.datasets.forEach(dataset => {\n    const type = dataset.type || config.type;\n    const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n    const datasetDefaults = overrides[type] || {};\n    const defaultScaleOptions = datasetDefaults.scales || {};\n    Object.keys(defaultScaleOptions).forEach(defaultID => {\n      const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n      const id = dataset[axis + 'AxisID'] || firstIDs[axis] || axis;\n      scales[id] = scales[id] || Object.create(null);\n      mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n    });\n  });\n  Object.keys(scales).forEach(key => {\n    const scale = scales[key];\n    mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n  });\n  return scales;\n}\nfunction initOptions(config) {\n  const options = config.options || (config.options = {});\n  options.plugins = valueOrDefault(options.plugins, {});\n  options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n  data = data || {};\n  data.datasets = data.datasets || [];\n  data.labels = data.labels || [];\n  return data;\n}\nfunction initConfig(config) {\n  config = config || {};\n  config.data = initData(config.data);\n  initOptions(config);\n  return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n  let keys = keyCache.get(cacheKey);\n  if (!keys) {\n    keys = generate();\n    keyCache.set(cacheKey, keys);\n    keysCached.add(keys);\n  }\n  return keys;\n}\nconst addIfFound = (set, obj, key) => {\n  const opts = resolveObjectKey(obj, key);\n  if (opts !== undefined) {\n    set.add(opts);\n  }\n};\nclass Config {\n  constructor(config) {\n    this._config = initConfig(config);\n    this._scopeCache = new Map();\n    this._resolverCache = new Map();\n  }\n  get platform() {\n    return this._config.platform;\n  }\n  get type() {\n    return this._config.type;\n  }\n  set type(type) {\n    this._config.type = type;\n  }\n  get data() {\n    return this._config.data;\n  }\n  set data(data) {\n    this._config.data = initData(data);\n  }\n  get options() {\n    return this._config.options;\n  }\n  set options(options) {\n    this._config.options = options;\n  }\n  get plugins() {\n    return this._config.plugins;\n  }\n  update() {\n    const config = this._config;\n    this.clearCache();\n    initOptions(config);\n  }\n  clearCache() {\n    this._scopeCache.clear();\n    this._resolverCache.clear();\n  }\n  datasetScopeKeys(datasetType) {\n    return cachedKeys(datasetType,\n      () => [[\n        `datasets.${datasetType}`,\n        ''\n      ]]);\n  }\n  datasetAnimationScopeKeys(datasetType, transition) {\n    return cachedKeys(`${datasetType}.transition.${transition}`,\n      () => [\n        [\n          `datasets.${datasetType}.transitions.${transition}`,\n          `transitions.${transition}`,\n        ],\n        [\n          `datasets.${datasetType}`,\n          ''\n        ]\n      ]);\n  }\n  datasetElementScopeKeys(datasetType, elementType) {\n    return cachedKeys(`${datasetType}-${elementType}`,\n      () => [[\n        `datasets.${datasetType}.elements.${elementType}`,\n        `datasets.${datasetType}`,\n        `elements.${elementType}`,\n        ''\n      ]]);\n  }\n  pluginScopeKeys(plugin) {\n    const id = plugin.id;\n    const type = this.type;\n    return cachedKeys(`${type}-plugin-${id}`,\n      () => [[\n        `plugins.${id}`,\n        ...plugin.additionalOptionScopes || [],\n      ]]);\n  }\n  _cachedScopes(mainScope, resetCache) {\n    const _scopeCache = this._scopeCache;\n    let cache = _scopeCache.get(mainScope);\n    if (!cache || resetCache) {\n      cache = new Map();\n      _scopeCache.set(mainScope, cache);\n    }\n    return cache;\n  }\n  getOptionScopes(mainScope, keyLists, resetCache) {\n    const {options, type} = this;\n    const cache = this._cachedScopes(mainScope, resetCache);\n    const cached = cache.get(keyLists);\n    if (cached) {\n      return cached;\n    }\n    const scopes = new Set();\n    keyLists.forEach(keys => {\n      if (mainScope) {\n        scopes.add(mainScope);\n        keys.forEach(key => addIfFound(scopes, mainScope, key));\n      }\n      keys.forEach(key => addIfFound(scopes, options, key));\n      keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n      keys.forEach(key => addIfFound(scopes, defaults, key));\n      keys.forEach(key => addIfFound(scopes, descriptors, key));\n    });\n    const array = Array.from(scopes);\n    if (array.length === 0) {\n      array.push(Object.create(null));\n    }\n    if (keysCached.has(keyLists)) {\n      cache.set(keyLists, array);\n    }\n    return array;\n  }\n  chartOptionScopes() {\n    const {options, type} = this;\n    return [\n      options,\n      overrides[type] || {},\n      defaults.datasets[type] || {},\n      {type},\n      defaults,\n      descriptors\n    ];\n  }\n  resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n    const result = {$shared: true};\n    const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n    let options = resolver;\n    if (needContext(resolver, names)) {\n      result.$shared = false;\n      context = isFunction(context) ? context() : context;\n      const subResolver = this.createResolver(scopes, context, subPrefixes);\n      options = _attachContext(resolver, context, subResolver);\n    }\n    for (const prop of names) {\n      result[prop] = options[prop];\n    }\n    return result;\n  }\n  createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n    const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n    return isObject(context)\n      ? _attachContext(resolver, context, undefined, descriptorDefaults)\n      : resolver;\n  }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n  let cache = resolverCache.get(scopes);\n  if (!cache) {\n    cache = new Map();\n    resolverCache.set(scopes, cache);\n  }\n  const cacheKey = prefixes.join();\n  let cached = cache.get(cacheKey);\n  if (!cached) {\n    const resolver = _createResolver(scopes, prefixes);\n    cached = {\n      resolver,\n      subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n    };\n    cache.set(cacheKey, cached);\n  }\n  return cached;\n}\nconst hasFunction = value => isObject(value)\n  && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || isFunction(value[key]), false);\nfunction needContext(proxy, names) {\n  const {isScriptable, isIndexable} = _descriptors(proxy);\n  for (const prop of names) {\n    const scriptable = isScriptable(prop);\n    const indexable = isIndexable(prop);\n    const value = (indexable || scriptable) && proxy[prop];\n    if ((scriptable && (isFunction(value) || hasFunction(value)))\n      || (indexable && isArray(value))) {\n      return true;\n    }\n  }\n  return false;\n}\n\nvar version = \"3.9.1\";\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n  return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\nfunction compare2Level(l1, l2) {\n  return function(a, b) {\n    return a[l1] === b[l1]\n      ? a[l2] - b[l2]\n      : a[l1] - b[l1];\n  };\n}\nfunction onAnimationsComplete(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  chart.notifyPlugins('afterRender');\n  callback(animationOptions && animationOptions.onComplete, [context], chart);\n}\nfunction onAnimationProgress(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  callback(animationOptions && animationOptions.onProgress, [context], chart);\n}\nfunction getCanvas(item) {\n  if (_isDomSupported() && typeof item === 'string') {\n    item = document.getElementById(item);\n  } else if (item && item.length) {\n    item = item[0];\n  }\n  if (item && item.canvas) {\n    item = item.canvas;\n  }\n  return item;\n}\nconst instances = {};\nconst getChart = (key) => {\n  const canvas = getCanvas(key);\n  return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n  const keys = Object.keys(obj);\n  for (const key of keys) {\n    const intKey = +key;\n    if (intKey >= start) {\n      const value = obj[key];\n      delete obj[key];\n      if (move > 0 || intKey > start) {\n        obj[intKey + move] = value;\n      }\n    }\n  }\n}\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n  if (!inChartArea || e.type === 'mouseout') {\n    return null;\n  }\n  if (isClick) {\n    return lastEvent;\n  }\n  return e;\n}\nclass Chart {\n  constructor(item, userConfig) {\n    const config = this.config = new Config(userConfig);\n    const initialCanvas = getCanvas(item);\n    const existingChart = getChart(initialCanvas);\n    if (existingChart) {\n      throw new Error(\n        'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.'\n      );\n    }\n    const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n    this.platform.updateConfig(config);\n    const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n    const canvas = context && context.canvas;\n    const height = canvas && canvas.height;\n    const width = canvas && canvas.width;\n    this.id = uid();\n    this.ctx = context;\n    this.canvas = canvas;\n    this.width = width;\n    this.height = height;\n    this._options = options;\n    this._aspectRatio = this.aspectRatio;\n    this._layers = [];\n    this._metasets = [];\n    this._stacks = undefined;\n    this.boxes = [];\n    this.currentDevicePixelRatio = undefined;\n    this.chartArea = undefined;\n    this._active = [];\n    this._lastEvent = undefined;\n    this._listeners = {};\n    this._responsiveListeners = undefined;\n    this._sortedMetasets = [];\n    this.scales = {};\n    this._plugins = new PluginService();\n    this.$proxies = {};\n    this._hiddenIndices = {};\n    this.attached = false;\n    this._animationsDisabled = undefined;\n    this.$context = undefined;\n    this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n    this._dataChanges = [];\n    instances[this.id] = this;\n    if (!context || !canvas) {\n      console.error(\"Failed to create chart: can't acquire context from the given item\");\n      return;\n    }\n    animator.listen(this, 'complete', onAnimationsComplete);\n    animator.listen(this, 'progress', onAnimationProgress);\n    this._initialize();\n    if (this.attached) {\n      this.update();\n    }\n  }\n  get aspectRatio() {\n    const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n    if (!isNullOrUndef(aspectRatio)) {\n      return aspectRatio;\n    }\n    if (maintainAspectRatio && _aspectRatio) {\n      return _aspectRatio;\n    }\n    return height ? width / height : null;\n  }\n  get data() {\n    return this.config.data;\n  }\n  set data(data) {\n    this.config.data = data;\n  }\n  get options() {\n    return this._options;\n  }\n  set options(options) {\n    this.config.options = options;\n  }\n  _initialize() {\n    this.notifyPlugins('beforeInit');\n    if (this.options.responsive) {\n      this.resize();\n    } else {\n      retinaScale(this, this.options.devicePixelRatio);\n    }\n    this.bindEvents();\n    this.notifyPlugins('afterInit');\n    return this;\n  }\n  clear() {\n    clearCanvas(this.canvas, this.ctx);\n    return this;\n  }\n  stop() {\n    animator.stop(this);\n    return this;\n  }\n  resize(width, height) {\n    if (!animator.running(this)) {\n      this._resize(width, height);\n    } else {\n      this._resizeBeforeDraw = {width, height};\n    }\n  }\n  _resize(width, height) {\n    const options = this.options;\n    const canvas = this.canvas;\n    const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n    const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n    const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n    const mode = this.width ? 'resize' : 'attach';\n    this.width = newSize.width;\n    this.height = newSize.height;\n    this._aspectRatio = this.aspectRatio;\n    if (!retinaScale(this, newRatio, true)) {\n      return;\n    }\n    this.notifyPlugins('resize', {size: newSize});\n    callback(options.onResize, [this, newSize], this);\n    if (this.attached) {\n      if (this._doResize(mode)) {\n        this.render();\n      }\n    }\n  }\n  ensureScalesHaveIDs() {\n    const options = this.options;\n    const scalesOptions = options.scales || {};\n    each(scalesOptions, (axisOptions, axisID) => {\n      axisOptions.id = axisID;\n    });\n  }\n  buildOrUpdateScales() {\n    const options = this.options;\n    const scaleOpts = options.scales;\n    const scales = this.scales;\n    const updated = Object.keys(scales).reduce((obj, id) => {\n      obj[id] = false;\n      return obj;\n    }, {});\n    let items = [];\n    if (scaleOpts) {\n      items = items.concat(\n        Object.keys(scaleOpts).map((id) => {\n          const scaleOptions = scaleOpts[id];\n          const axis = determineAxis(id, scaleOptions);\n          const isRadial = axis === 'r';\n          const isHorizontal = axis === 'x';\n          return {\n            options: scaleOptions,\n            dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n            dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n          };\n        })\n      );\n    }\n    each(items, (item) => {\n      const scaleOptions = item.options;\n      const id = scaleOptions.id;\n      const axis = determineAxis(id, scaleOptions);\n      const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n      if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n        scaleOptions.position = item.dposition;\n      }\n      updated[id] = true;\n      let scale = null;\n      if (id in scales && scales[id].type === scaleType) {\n        scale = scales[id];\n      } else {\n        const scaleClass = registry.getScale(scaleType);\n        scale = new scaleClass({\n          id,\n          type: scaleType,\n          ctx: this.ctx,\n          chart: this\n        });\n        scales[scale.id] = scale;\n      }\n      scale.init(scaleOptions, options);\n    });\n    each(updated, (hasUpdated, id) => {\n      if (!hasUpdated) {\n        delete scales[id];\n      }\n    });\n    each(scales, (scale) => {\n      layouts.configure(this, scale, scale.options);\n      layouts.addBox(this, scale);\n    });\n  }\n  _updateMetasets() {\n    const metasets = this._metasets;\n    const numData = this.data.datasets.length;\n    const numMeta = metasets.length;\n    metasets.sort((a, b) => a.index - b.index);\n    if (numMeta > numData) {\n      for (let i = numData; i < numMeta; ++i) {\n        this._destroyDatasetMeta(i);\n      }\n      metasets.splice(numData, numMeta - numData);\n    }\n    this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n  }\n  _removeUnreferencedMetasets() {\n    const {_metasets: metasets, data: {datasets}} = this;\n    if (metasets.length > datasets.length) {\n      delete this._stacks;\n    }\n    metasets.forEach((meta, index) => {\n      if (datasets.filter(x => x === meta._dataset).length === 0) {\n        this._destroyDatasetMeta(index);\n      }\n    });\n  }\n  buildOrUpdateControllers() {\n    const newControllers = [];\n    const datasets = this.data.datasets;\n    let i, ilen;\n    this._removeUnreferencedMetasets();\n    for (i = 0, ilen = datasets.length; i < ilen; i++) {\n      const dataset = datasets[i];\n      let meta = this.getDatasetMeta(i);\n      const type = dataset.type || this.config.type;\n      if (meta.type && meta.type !== type) {\n        this._destroyDatasetMeta(i);\n        meta = this.getDatasetMeta(i);\n      }\n      meta.type = type;\n      meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n      meta.order = dataset.order || 0;\n      meta.index = i;\n      meta.label = '' + dataset.label;\n      meta.visible = this.isDatasetVisible(i);\n      if (meta.controller) {\n        meta.controller.updateIndex(i);\n        meta.controller.linkScales();\n      } else {\n        const ControllerClass = registry.getController(type);\n        const {datasetElementType, dataElementType} = defaults.datasets[type];\n        Object.assign(ControllerClass.prototype, {\n          dataElementType: registry.getElement(dataElementType),\n          datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n        });\n        meta.controller = new ControllerClass(this, i);\n        newControllers.push(meta.controller);\n      }\n    }\n    this._updateMetasets();\n    return newControllers;\n  }\n  _resetElements() {\n    each(this.data.datasets, (dataset, datasetIndex) => {\n      this.getDatasetMeta(datasetIndex).controller.reset();\n    }, this);\n  }\n  reset() {\n    this._resetElements();\n    this.notifyPlugins('reset');\n  }\n  update(mode) {\n    const config = this.config;\n    config.update();\n    const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    const animsDisabled = this._animationsDisabled = !options.animation;\n    this._updateScales();\n    this._checkEventBindings();\n    this._updateHiddenIndices();\n    this._plugins.invalidate();\n    if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n    const newControllers = this.buildOrUpdateControllers();\n    this.notifyPlugins('beforeElementsUpdate');\n    let minPadding = 0;\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n      const {controller} = this.getDatasetMeta(i);\n      const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n      controller.buildOrUpdateElements(reset);\n      minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n    }\n    minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n    this._updateLayout(minPadding);\n    if (!animsDisabled) {\n      each(newControllers, (controller) => {\n        controller.reset();\n      });\n    }\n    this._updateDatasets(mode);\n    this.notifyPlugins('afterUpdate', {mode});\n    this._layers.sort(compare2Level('z', '_idx'));\n    const {_active, _lastEvent} = this;\n    if (_lastEvent) {\n      this._eventHandler(_lastEvent, true);\n    } else if (_active.length) {\n      this._updateHoverStyles(_active, _active, true);\n    }\n    this.render();\n  }\n  _updateScales() {\n    each(this.scales, (scale) => {\n      layouts.removeBox(this, scale);\n    });\n    this.ensureScalesHaveIDs();\n    this.buildOrUpdateScales();\n  }\n  _checkEventBindings() {\n    const options = this.options;\n    const existingEvents = new Set(Object.keys(this._listeners));\n    const newEvents = new Set(options.events);\n    if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n      this.unbindEvents();\n      this.bindEvents();\n    }\n  }\n  _updateHiddenIndices() {\n    const {_hiddenIndices} = this;\n    const changes = this._getUniformDataChanges() || [];\n    for (const {method, start, count} of changes) {\n      const move = method === '_removeElements' ? -count : count;\n      moveNumericKeys(_hiddenIndices, start, move);\n    }\n  }\n  _getUniformDataChanges() {\n    const _dataChanges = this._dataChanges;\n    if (!_dataChanges || !_dataChanges.length) {\n      return;\n    }\n    this._dataChanges = [];\n    const datasetCount = this.data.datasets.length;\n    const makeSet = (idx) => new Set(\n      _dataChanges\n        .filter(c => c[0] === idx)\n        .map((c, i) => i + ',' + c.splice(1).join(','))\n    );\n    const changeSet = makeSet(0);\n    for (let i = 1; i < datasetCount; i++) {\n      if (!setsEqual(changeSet, makeSet(i))) {\n        return;\n      }\n    }\n    return Array.from(changeSet)\n      .map(c => c.split(','))\n      .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n  }\n  _updateLayout(minPadding) {\n    if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n      return;\n    }\n    layouts.update(this, this.width, this.height, minPadding);\n    const area = this.chartArea;\n    const noArea = area.width <= 0 || area.height <= 0;\n    this._layers = [];\n    each(this.boxes, (box) => {\n      if (noArea && box.position === 'chartArea') {\n        return;\n      }\n      if (box.configure) {\n        box.configure();\n      }\n      this._layers.push(...box._layers());\n    }, this);\n    this._layers.forEach((item, index) => {\n      item._idx = index;\n    });\n    this.notifyPlugins('afterLayout');\n  }\n  _updateDatasets(mode) {\n    if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this.getDatasetMeta(i).controller.configure();\n    }\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n    }\n    this.notifyPlugins('afterDatasetsUpdate', {mode});\n  }\n  _updateDataset(index, mode) {\n    const meta = this.getDatasetMeta(index);\n    const args = {meta, index, mode, cancelable: true};\n    if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n      return;\n    }\n    meta.controller._update(mode);\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetUpdate', args);\n  }\n  render() {\n    if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n      return;\n    }\n    if (animator.has(this)) {\n      if (this.attached && !animator.running(this)) {\n        animator.start(this);\n      }\n    } else {\n      this.draw();\n      onAnimationsComplete({chart: this});\n    }\n  }\n  draw() {\n    let i;\n    if (this._resizeBeforeDraw) {\n      const {width, height} = this._resizeBeforeDraw;\n      this._resize(width, height);\n      this._resizeBeforeDraw = null;\n    }\n    this.clear();\n    if (this.width <= 0 || this.height <= 0) {\n      return;\n    }\n    if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n      return;\n    }\n    const layers = this._layers;\n    for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n    this._drawDatasets();\n    for (; i < layers.length; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n    this.notifyPlugins('afterDraw');\n  }\n  _getSortedDatasetMetas(filterVisible) {\n    const metasets = this._sortedMetasets;\n    const result = [];\n    let i, ilen;\n    for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n      const meta = metasets[i];\n      if (!filterVisible || meta.visible) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n  getSortedVisibleDatasetMetas() {\n    return this._getSortedDatasetMetas(true);\n  }\n  _drawDatasets() {\n    if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n      return;\n    }\n    const metasets = this.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      this._drawDataset(metasets[i]);\n    }\n    this.notifyPlugins('afterDatasetsDraw');\n  }\n  _drawDataset(meta) {\n    const ctx = this.ctx;\n    const clip = meta._clip;\n    const useClip = !clip.disabled;\n    const area = this.chartArea;\n    const args = {\n      meta,\n      index: meta.index,\n      cancelable: true\n    };\n    if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n      return;\n    }\n    if (useClip) {\n      clipArea(ctx, {\n        left: clip.left === false ? 0 : area.left - clip.left,\n        right: clip.right === false ? this.width : area.right + clip.right,\n        top: clip.top === false ? 0 : area.top - clip.top,\n        bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n      });\n    }\n    meta.controller.draw();\n    if (useClip) {\n      unclipArea(ctx);\n    }\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetDraw', args);\n  }\n  isPointInArea(point) {\n    return _isPointInArea(point, this.chartArea, this._minPadding);\n  }\n  getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n    const method = Interaction.modes[mode];\n    if (typeof method === 'function') {\n      return method(this, e, options, useFinalPosition);\n    }\n    return [];\n  }\n  getDatasetMeta(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    const metasets = this._metasets;\n    let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n    if (!meta) {\n      meta = {\n        type: null,\n        data: [],\n        dataset: null,\n        controller: null,\n        hidden: null,\n        xAxisID: null,\n        yAxisID: null,\n        order: dataset && dataset.order || 0,\n        index: datasetIndex,\n        _dataset: dataset,\n        _parsed: [],\n        _sorted: false\n      };\n      metasets.push(meta);\n    }\n    return meta;\n  }\n  getContext() {\n    return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n  }\n  getVisibleDatasetCount() {\n    return this.getSortedVisibleDatasetMetas().length;\n  }\n  isDatasetVisible(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    if (!dataset) {\n      return false;\n    }\n    const meta = this.getDatasetMeta(datasetIndex);\n    return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n  }\n  setDatasetVisibility(datasetIndex, visible) {\n    const meta = this.getDatasetMeta(datasetIndex);\n    meta.hidden = !visible;\n  }\n  toggleDataVisibility(index) {\n    this._hiddenIndices[index] = !this._hiddenIndices[index];\n  }\n  getDataVisibility(index) {\n    return !this._hiddenIndices[index];\n  }\n  _updateVisibility(datasetIndex, dataIndex, visible) {\n    const mode = visible ? 'show' : 'hide';\n    const meta = this.getDatasetMeta(datasetIndex);\n    const anims = meta.controller._resolveAnimations(undefined, mode);\n    if (defined(dataIndex)) {\n      meta.data[dataIndex].hidden = !visible;\n      this.update();\n    } else {\n      this.setDatasetVisibility(datasetIndex, visible);\n      anims.update(meta, {visible});\n      this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n    }\n  }\n  hide(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, false);\n  }\n  show(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, true);\n  }\n  _destroyDatasetMeta(datasetIndex) {\n    const meta = this._metasets[datasetIndex];\n    if (meta && meta.controller) {\n      meta.controller._destroy();\n    }\n    delete this._metasets[datasetIndex];\n  }\n  _stop() {\n    let i, ilen;\n    this.stop();\n    animator.remove(this);\n    for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._destroyDatasetMeta(i);\n    }\n  }\n  destroy() {\n    this.notifyPlugins('beforeDestroy');\n    const {canvas, ctx} = this;\n    this._stop();\n    this.config.clearCache();\n    if (canvas) {\n      this.unbindEvents();\n      clearCanvas(canvas, ctx);\n      this.platform.releaseContext(ctx);\n      this.canvas = null;\n      this.ctx = null;\n    }\n    this.notifyPlugins('destroy');\n    delete instances[this.id];\n    this.notifyPlugins('afterDestroy');\n  }\n  toBase64Image(...args) {\n    return this.canvas.toDataURL(...args);\n  }\n  bindEvents() {\n    this.bindUserEvents();\n    if (this.options.responsive) {\n      this.bindResponsiveEvents();\n    } else {\n      this.attached = true;\n    }\n  }\n  bindUserEvents() {\n    const listeners = this._listeners;\n    const platform = this.platform;\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n    const listener = (e, x, y) => {\n      e.offsetX = x;\n      e.offsetY = y;\n      this._eventHandler(e);\n    };\n    each(this.options.events, (type) => _add(type, listener));\n  }\n  bindResponsiveEvents() {\n    if (!this._responsiveListeners) {\n      this._responsiveListeners = {};\n    }\n    const listeners = this._responsiveListeners;\n    const platform = this.platform;\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n    const _remove = (type, listener) => {\n      if (listeners[type]) {\n        platform.removeEventListener(this, type, listener);\n        delete listeners[type];\n      }\n    };\n    const listener = (width, height) => {\n      if (this.canvas) {\n        this.resize(width, height);\n      }\n    };\n    let detached;\n    const attached = () => {\n      _remove('attach', attached);\n      this.attached = true;\n      this.resize();\n      _add('resize', listener);\n      _add('detach', detached);\n    };\n    detached = () => {\n      this.attached = false;\n      _remove('resize', listener);\n      this._stop();\n      this._resize(0, 0);\n      _add('attach', attached);\n    };\n    if (platform.isAttached(this.canvas)) {\n      attached();\n    } else {\n      detached();\n    }\n  }\n  unbindEvents() {\n    each(this._listeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._listeners = {};\n    each(this._responsiveListeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._responsiveListeners = undefined;\n  }\n  updateHoverStyle(items, mode, enabled) {\n    const prefix = enabled ? 'set' : 'remove';\n    let meta, item, i, ilen;\n    if (mode === 'dataset') {\n      meta = this.getDatasetMeta(items[0].datasetIndex);\n      meta.controller['_' + prefix + 'DatasetHoverStyle']();\n    }\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      item = items[i];\n      const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n      if (controller) {\n        controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n      }\n    }\n  }\n  getActiveElements() {\n    return this._active || [];\n  }\n  setActiveElements(activeElements) {\n    const lastActive = this._active || [];\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('No dataset found at index ' + datasetIndex);\n      }\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed) {\n      this._active = active;\n      this._lastEvent = null;\n      this._updateHoverStyles(active, lastActive);\n    }\n  }\n  notifyPlugins(hook, args, filter) {\n    return this._plugins.notify(this, hook, args, filter);\n  }\n  _updateHoverStyles(active, lastActive, replay) {\n    const hoverOptions = this.options.hover;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n    const deactivated = diff(lastActive, active);\n    const activated = replay ? active : diff(active, lastActive);\n    if (deactivated.length) {\n      this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n    }\n    if (activated.length && hoverOptions.mode) {\n      this.updateHoverStyle(activated, hoverOptions.mode, true);\n    }\n  }\n  _eventHandler(e, replay) {\n    const args = {\n      event: e,\n      replay,\n      cancelable: true,\n      inChartArea: this.isPointInArea(e)\n    };\n    const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n    if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n      return;\n    }\n    const changed = this._handleEvent(e, replay, args.inChartArea);\n    args.cancelable = false;\n    this.notifyPlugins('afterEvent', args, eventFilter);\n    if (changed || args.changed) {\n      this.render();\n    }\n    return this;\n  }\n  _handleEvent(e, replay, inChartArea) {\n    const {_active: lastActive = [], options} = this;\n    const useFinalPosition = replay;\n    const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n    const isClick = _isClickEvent(e);\n    const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n    if (inChartArea) {\n      this._lastEvent = null;\n      callback(options.onHover, [e, active, this], this);\n      if (isClick) {\n        callback(options.onClick, [e, active, this], this);\n      }\n    }\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed || replay) {\n      this._active = active;\n      this._updateHoverStyles(active, lastActive, replay);\n    }\n    this._lastEvent = lastEvent;\n    return changed;\n  }\n  _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n    if (e.type === 'mouseout') {\n      return [];\n    }\n    if (!inChartArea) {\n      return lastActive;\n    }\n    const hoverOptions = this.options.hover;\n    return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n  }\n}\nconst invalidatePlugins = () => each(Chart.instances, (chart) => chart._plugins.invalidate());\nconst enumerable = true;\nObject.defineProperties(Chart, {\n  defaults: {\n    enumerable,\n    value: defaults\n  },\n  instances: {\n    enumerable,\n    value: instances\n  },\n  overrides: {\n    enumerable,\n    value: overrides\n  },\n  registry: {\n    enumerable,\n    value: registry\n  },\n  version: {\n    enumerable,\n    value: version\n  },\n  getChart: {\n    enumerable,\n    value: getChart\n  },\n  register: {\n    enumerable,\n    value: (...items) => {\n      registry.add(...items);\n      invalidatePlugins();\n    }\n  },\n  unregister: {\n    enumerable,\n    value: (...items) => {\n      registry.remove(...items);\n      invalidatePlugins();\n    }\n  }\n});\n\nfunction clipArc(ctx, element, endAngle) {\n  const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n  let angleMargin = pixelMargin / outerRadius;\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n  if (innerRadius > pixelMargin) {\n    angleMargin = pixelMargin / innerRadius;\n    ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n  } else {\n    ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n  }\n  ctx.closePath();\n  ctx.clip();\n}\nfunction toRadiusCorners(value) {\n  return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n  const o = toRadiusCorners(arc.options.borderRadius);\n  const halfThickness = (outerRadius - innerRadius) / 2;\n  const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n  const computeOuterLimit = (val) => {\n    const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n    return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n  };\n  return {\n    outerStart: computeOuterLimit(o.outerStart),\n    outerEnd: computeOuterLimit(o.outerEnd),\n    innerStart: _limitValue(o.innerStart, 0, innerLimit),\n    innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n  };\n}\nfunction rThetaToXY(r, theta, x, y) {\n  return {\n    x: x + r * Math.cos(theta),\n    y: y + r * Math.sin(theta),\n  };\n}\nfunction pathArc(ctx, element, offset, spacing, end, circular) {\n  const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n  const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n  const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n  let spacingOffset = 0;\n  const alpha = end - start;\n  if (spacing) {\n    const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n    const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n    const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n    const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n    spacingOffset = (alpha - adjustedAngle) / 2;\n  }\n  const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n  const angleOffset = (alpha - beta) / 2;\n  const startAngle = start + angleOffset + spacingOffset;\n  const endAngle = end - angleOffset - spacingOffset;\n  const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n  const outerStartAdjustedRadius = outerRadius - outerStart;\n  const outerEndAdjustedRadius = outerRadius - outerEnd;\n  const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n  const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n  const innerStartAdjustedRadius = innerRadius + innerStart;\n  const innerEndAdjustedRadius = innerRadius + innerEnd;\n  const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n  const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n  ctx.beginPath();\n  if (circular) {\n    ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle);\n    if (outerEnd > 0) {\n      const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n    }\n    const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n    ctx.lineTo(p4.x, p4.y);\n    if (innerEnd > 0) {\n      const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n    }\n    ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), startAngle + (innerStart / innerRadius), true);\n    if (innerStart > 0) {\n      const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n    }\n    const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n    ctx.lineTo(p8.x, p8.y);\n    if (outerStart > 0) {\n      const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n    }\n  } else {\n    ctx.moveTo(x, y);\n    const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n    const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerStartX, outerStartY);\n    const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n    const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerEndX, outerEndY);\n  }\n  ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n  const {fullCircles, startAngle, circumference} = element;\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, startAngle + TAU, circular);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.fill();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + circumference % TAU;\n      if (circumference % TAU === 0) {\n        endAngle += TAU;\n      }\n    }\n  }\n  pathArc(ctx, element, offset, spacing, endAngle, circular);\n  ctx.fill();\n  return endAngle;\n}\nfunction drawFullCircleBorders(ctx, element, inner) {\n  const {x, y, startAngle, pixelMargin, fullCircles} = element;\n  const outerRadius = Math.max(element.outerRadius - pixelMargin, 0);\n  const innerRadius = element.innerRadius + pixelMargin;\n  let i;\n  if (inner) {\n    clipArc(ctx, element, startAngle + TAU);\n  }\n  ctx.beginPath();\n  ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true);\n  for (i = 0; i < fullCircles; ++i) {\n    ctx.stroke();\n  }\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU);\n  for (i = 0; i < fullCircles; ++i) {\n    ctx.stroke();\n  }\n}\nfunction drawBorder(ctx, element, offset, spacing, endAngle, circular) {\n  const {options} = element;\n  const {borderWidth, borderJoinStyle} = options;\n  const inner = options.borderAlign === 'inner';\n  if (!borderWidth) {\n    return;\n  }\n  if (inner) {\n    ctx.lineWidth = borderWidth * 2;\n    ctx.lineJoin = borderJoinStyle || 'round';\n  } else {\n    ctx.lineWidth = borderWidth;\n    ctx.lineJoin = borderJoinStyle || 'bevel';\n  }\n  if (element.fullCircles) {\n    drawFullCircleBorders(ctx, element, inner);\n  }\n  if (inner) {\n    clipArc(ctx, element, endAngle);\n  }\n  pathArc(ctx, element, offset, spacing, endAngle, circular);\n  ctx.stroke();\n}\nclass ArcElement extends Element {\n  constructor(cfg) {\n    super();\n    this.options = undefined;\n    this.circumference = undefined;\n    this.startAngle = undefined;\n    this.endAngle = undefined;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.pixelMargin = 0;\n    this.fullCircles = 0;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  inRange(chartX, chartY, useFinalPosition) {\n    const point = this.getProps(['x', 'y'], useFinalPosition);\n    const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n    const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius',\n      'circumference'\n    ], useFinalPosition);\n    const rAdjust = this.options.spacing / 2;\n    const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n    const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n    const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n    return (betweenAngles && withinRadius);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n      'x',\n      'y',\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius',\n      'circumference',\n    ], useFinalPosition);\n    const {offset, spacing} = this.options;\n    const halfAngle = (startAngle + endAngle) / 2;\n    const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n    return {\n      x: x + Math.cos(halfAngle) * halfRadius,\n      y: y + Math.sin(halfAngle) * halfRadius\n    };\n  }\n  tooltipPosition(useFinalPosition) {\n    return this.getCenterPoint(useFinalPosition);\n  }\n  draw(ctx) {\n    const {options, circumference} = this;\n    const offset = (options.offset || 0) / 2;\n    const spacing = (options.spacing || 0) / 2;\n    const circular = options.circular;\n    this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n    this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n    if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n      return;\n    }\n    ctx.save();\n    let radiusOffset = 0;\n    if (offset) {\n      radiusOffset = offset / 2;\n      const halfAngle = (this.startAngle + this.endAngle) / 2;\n      ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset);\n      if (this.circumference >= PI) {\n        radiusOffset = offset;\n      }\n    }\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    const endAngle = drawArc(ctx, this, radiusOffset, spacing, circular);\n    drawBorder(ctx, this, radiusOffset, spacing, endAngle, circular);\n    ctx.restore();\n  }\n}\nArcElement.id = 'arc';\nArcElement.defaults = {\n  borderAlign: 'center',\n  borderColor: '#fff',\n  borderJoinStyle: undefined,\n  borderRadius: 0,\n  borderWidth: 2,\n  offset: 0,\n  spacing: 0,\n  angle: undefined,\n  circular: true,\n};\nArcElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor'\n};\n\nfunction setStyle(ctx, options, style = options) {\n  ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n  ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n  ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n  ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n  ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n  ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n  ctx.lineTo(target.x, target.y);\n}\nfunction getLineMethod(options) {\n  if (options.stepped) {\n    return _steppedLineTo;\n  }\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierCurveTo;\n  }\n  return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n  const count = points.length;\n  const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n  const {start: segmentStart, end: segmentEnd} = segment;\n  const start = Math.max(paramsStart, segmentStart);\n  const end = Math.min(paramsEnd, segmentEnd);\n  const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n  return {\n    count,\n    start,\n    loop: segment.loop,\n    ilen: end < start && !outside ? count + end - start : end - start\n  };\n}\nfunction pathSegment(ctx, line, segment, params) {\n  const {points, options} = line;\n  const {count, start, loop, ilen} = pathVars(points, segment, params);\n  const lineMethod = getLineMethod(options);\n  let {move = true, reverse} = params || {};\n  let i, point, prev;\n  for (i = 0; i <= ilen; ++i) {\n    point = points[(start + (reverse ? ilen - i : i)) % count];\n    if (point.skip) {\n      continue;\n    } else if (move) {\n      ctx.moveTo(point.x, point.y);\n      move = false;\n    } else {\n      lineMethod(ctx, prev, point, reverse, options.stepped);\n    }\n    prev = point;\n  }\n  if (loop) {\n    point = points[(start + (reverse ? ilen : 0)) % count];\n    lineMethod(ctx, prev, point, reverse, options.stepped);\n  }\n  return !!loop;\n}\nfunction fastPathSegment(ctx, line, segment, params) {\n  const points = line.points;\n  const {count, start, ilen} = pathVars(points, segment, params);\n  const {move = true, reverse} = params || {};\n  let avgX = 0;\n  let countX = 0;\n  let i, point, prevX, minY, maxY, lastY;\n  const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n  const drawX = () => {\n    if (minY !== maxY) {\n      ctx.lineTo(avgX, maxY);\n      ctx.lineTo(avgX, minY);\n      ctx.lineTo(avgX, lastY);\n    }\n  };\n  if (move) {\n    point = points[pointIndex(0)];\n    ctx.moveTo(point.x, point.y);\n  }\n  for (i = 0; i <= ilen; ++i) {\n    point = points[pointIndex(i)];\n    if (point.skip) {\n      continue;\n    }\n    const x = point.x;\n    const y = point.y;\n    const truncX = x | 0;\n    if (truncX === prevX) {\n      if (y < minY) {\n        minY = y;\n      } else if (y > maxY) {\n        maxY = y;\n      }\n      avgX = (countX * avgX + x) / ++countX;\n    } else {\n      drawX();\n      ctx.lineTo(x, y);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n    }\n    lastY = y;\n  }\n  drawX();\n}\nfunction _getSegmentMethod(line) {\n  const opts = line.options;\n  const borderDash = opts.borderDash && opts.borderDash.length;\n  const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n  return useFastPath ? fastPathSegment : pathSegment;\n}\nfunction _getInterpolationMethod(options) {\n  if (options.stepped) {\n    return _steppedInterpolation;\n  }\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierInterpolation;\n  }\n  return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n  let path = line._path;\n  if (!path) {\n    path = line._path = new Path2D();\n    if (line.path(path, start, count)) {\n      path.closePath();\n    }\n  }\n  setStyle(ctx, line.options);\n  ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n  const {segments, options} = line;\n  const segmentMethod = _getSegmentMethod(line);\n  for (const segment of segments) {\n    setStyle(ctx, options, segment.style);\n    ctx.beginPath();\n    if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n      ctx.closePath();\n    }\n    ctx.stroke();\n  }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n  if (usePath2D && !line.options.segment) {\n    strokePathWithCache(ctx, line, start, count);\n  } else {\n    strokePathDirect(ctx, line, start, count);\n  }\n}\nclass LineElement extends Element {\n  constructor(cfg) {\n    super();\n    this.animated = true;\n    this.options = undefined;\n    this._chart = undefined;\n    this._loop = undefined;\n    this._fullLoop = undefined;\n    this._path = undefined;\n    this._points = undefined;\n    this._segments = undefined;\n    this._decimated = false;\n    this._pointsUpdated = false;\n    this._datasetIndex = undefined;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  updateControlPoints(chartArea, indexAxis) {\n    const options = this.options;\n    if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n      const loop = options.spanGaps ? this._loop : this._fullLoop;\n      _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n      this._pointsUpdated = true;\n    }\n  }\n  set points(points) {\n    this._points = points;\n    delete this._segments;\n    delete this._path;\n    this._pointsUpdated = false;\n  }\n  get points() {\n    return this._points;\n  }\n  get segments() {\n    return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n  }\n  first() {\n    const segments = this.segments;\n    const points = this.points;\n    return segments.length && points[segments[0].start];\n  }\n  last() {\n    const segments = this.segments;\n    const points = this.points;\n    const count = segments.length;\n    return count && points[segments[count - 1].end];\n  }\n  interpolate(point, property) {\n    const options = this.options;\n    const value = point[property];\n    const points = this.points;\n    const segments = _boundSegments(this, {property, start: value, end: value});\n    if (!segments.length) {\n      return;\n    }\n    const result = [];\n    const _interpolate = _getInterpolationMethod(options);\n    let i, ilen;\n    for (i = 0, ilen = segments.length; i < ilen; ++i) {\n      const {start, end} = segments[i];\n      const p1 = points[start];\n      const p2 = points[end];\n      if (p1 === p2) {\n        result.push(p1);\n        continue;\n      }\n      const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n      const interpolated = _interpolate(p1, p2, t, options.stepped);\n      interpolated[property] = point[property];\n      result.push(interpolated);\n    }\n    return result.length === 1 ? result[0] : result;\n  }\n  pathSegment(ctx, segment, params) {\n    const segmentMethod = _getSegmentMethod(this);\n    return segmentMethod(ctx, this, segment, params);\n  }\n  path(ctx, start, count) {\n    const segments = this.segments;\n    const segmentMethod = _getSegmentMethod(this);\n    let loop = this._loop;\n    start = start || 0;\n    count = count || (this.points.length - start);\n    for (const segment of segments) {\n      loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n    }\n    return !!loop;\n  }\n  draw(ctx, chartArea, start, count) {\n    const options = this.options || {};\n    const points = this.points || [];\n    if (points.length && options.borderWidth) {\n      ctx.save();\n      draw(ctx, this, start, count);\n      ctx.restore();\n    }\n    if (this.animated) {\n      this._pointsUpdated = false;\n      this._path = undefined;\n    }\n  }\n}\nLineElement.id = 'line';\nLineElement.defaults = {\n  borderCapStyle: 'butt',\n  borderDash: [],\n  borderDashOffset: 0,\n  borderJoinStyle: 'miter',\n  borderWidth: 3,\n  capBezierPoints: true,\n  cubicInterpolationMode: 'default',\n  fill: false,\n  spanGaps: false,\n  stepped: false,\n  tension: 0,\n};\nLineElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\nLineElement.descriptors = {\n  _scriptable: true,\n  _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n};\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n  const options = el.options;\n  const {[axis]: value} = el.getProps([axis], useFinalPosition);\n  return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\nclass PointElement extends Element {\n  constructor(cfg) {\n    super();\n    this.options = undefined;\n    this.parsed = undefined;\n    this.skip = undefined;\n    this.stop = undefined;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  inRange(mouseX, mouseY, useFinalPosition) {\n    const options = this.options;\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n  }\n  inXRange(mouseX, useFinalPosition) {\n    return inRange$1(this, mouseX, 'x', useFinalPosition);\n  }\n  inYRange(mouseY, useFinalPosition) {\n    return inRange$1(this, mouseY, 'y', useFinalPosition);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n  size(options) {\n    options = options || this.options || {};\n    let radius = options.radius || 0;\n    radius = Math.max(radius, radius && options.hoverRadius || 0);\n    const borderWidth = radius && options.borderWidth || 0;\n    return (radius + borderWidth) * 2;\n  }\n  draw(ctx, area) {\n    const options = this.options;\n    if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n      return;\n    }\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.fillStyle = options.backgroundColor;\n    drawPoint(ctx, options, this.x, this.y);\n  }\n  getRange() {\n    const options = this.options || {};\n    return options.radius + options.hitRadius;\n  }\n}\nPointElement.id = 'point';\nPointElement.defaults = {\n  borderWidth: 1,\n  hitRadius: 1,\n  hoverBorderWidth: 1,\n  hoverRadius: 4,\n  pointStyle: 'circle',\n  radius: 3,\n  rotation: 0\n};\nPointElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\n\nfunction getBarBounds(bar, useFinalPosition) {\n  const {x, y, base, width, height} = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition);\n  let left, right, top, bottom, half;\n  if (bar.horizontal) {\n    half = height / 2;\n    left = Math.min(x, base);\n    right = Math.max(x, base);\n    top = y - half;\n    bottom = y + half;\n  } else {\n    half = width / 2;\n    left = x - half;\n    right = x + half;\n    top = Math.min(y, base);\n    bottom = Math.max(y, base);\n  }\n  return {left, top, right, bottom};\n}\nfunction skipOrLimit(skip, value, min, max) {\n  return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n  const value = bar.options.borderWidth;\n  const skip = bar.borderSkipped;\n  const o = toTRBL(value);\n  return {\n    t: skipOrLimit(skip.top, o.top, 0, maxH),\n    r: skipOrLimit(skip.right, o.right, 0, maxW),\n    b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n    l: skipOrLimit(skip.left, o.left, 0, maxW)\n  };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n  const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n  const value = bar.options.borderRadius;\n  const o = toTRBLCorners(value);\n  const maxR = Math.min(maxW, maxH);\n  const skip = bar.borderSkipped;\n  const enableBorder = enableBorderRadius || isObject(value);\n  return {\n    topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n    topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n    bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n    bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n  };\n}\nfunction boundingRects(bar) {\n  const bounds = getBarBounds(bar);\n  const width = bounds.right - bounds.left;\n  const height = bounds.bottom - bounds.top;\n  const border = parseBorderWidth(bar, width / 2, height / 2);\n  const radius = parseBorderRadius(bar, width / 2, height / 2);\n  return {\n    outer: {\n      x: bounds.left,\n      y: bounds.top,\n      w: width,\n      h: height,\n      radius\n    },\n    inner: {\n      x: bounds.left + border.l,\n      y: bounds.top + border.t,\n      w: width - border.l - border.r,\n      h: height - border.t - border.b,\n      radius: {\n        topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n        topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n        bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n        bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n      }\n    }\n  };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n  const skipX = x === null;\n  const skipY = y === null;\n  const skipBoth = skipX && skipY;\n  const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n  return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n  return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\nfunction addNormalRectPath(ctx, rect) {\n  ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n  const x = rect.x !== refRect.x ? -amount : 0;\n  const y = rect.y !== refRect.y ? -amount : 0;\n  const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n  const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n  return {\n    x: rect.x + x,\n    y: rect.y + y,\n    w: rect.w + w,\n    h: rect.h + h,\n    radius: rect.radius\n  };\n}\nclass BarElement extends Element {\n  constructor(cfg) {\n    super();\n    this.options = undefined;\n    this.horizontal = undefined;\n    this.base = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.inflateAmount = undefined;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  draw(ctx) {\n    const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n    const {inner, outer} = boundingRects(this);\n    const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n    ctx.save();\n    if (outer.w !== inner.w || outer.h !== inner.h) {\n      ctx.beginPath();\n      addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n      ctx.clip();\n      addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n      ctx.fillStyle = borderColor;\n      ctx.fill('evenodd');\n    }\n    ctx.beginPath();\n    addRectPath(ctx, inflateRect(inner, inflateAmount));\n    ctx.fillStyle = backgroundColor;\n    ctx.fill();\n    ctx.restore();\n  }\n  inRange(mouseX, mouseY, useFinalPosition) {\n    return inRange(this, mouseX, mouseY, useFinalPosition);\n  }\n  inXRange(mouseX, useFinalPosition) {\n    return inRange(this, mouseX, null, useFinalPosition);\n  }\n  inYRange(mouseY, useFinalPosition) {\n    return inRange(this, null, mouseY, useFinalPosition);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y, base, horizontal} = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition);\n    return {\n      x: horizontal ? (x + base) / 2 : x,\n      y: horizontal ? y : (y + base) / 2\n    };\n  }\n  getRange(axis) {\n    return axis === 'x' ? this.width / 2 : this.height / 2;\n  }\n}\nBarElement.id = 'bar';\nBarElement.defaults = {\n  borderSkipped: 'start',\n  borderWidth: 0,\n  borderRadius: 0,\n  inflateAmount: 'auto',\n  pointStyle: undefined\n};\nBarElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nLineElement: LineElement,\nPointElement: PointElement,\nBarElement: BarElement\n});\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n  const samples = options.samples || availableWidth;\n  if (samples >= count) {\n    return data.slice(start, start + count);\n  }\n  const decimated = [];\n  const bucketWidth = (count - 2) / (samples - 2);\n  let sampledIndex = 0;\n  const endIndex = start + count - 1;\n  let a = start;\n  let i, maxAreaPoint, maxArea, area, nextA;\n  decimated[sampledIndex++] = data[a];\n  for (i = 0; i < samples - 2; i++) {\n    let avgX = 0;\n    let avgY = 0;\n    let j;\n    const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n    const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n    const avgRangeLength = avgRangeEnd - avgRangeStart;\n    for (j = avgRangeStart; j < avgRangeEnd; j++) {\n      avgX += data[j].x;\n      avgY += data[j].y;\n    }\n    avgX /= avgRangeLength;\n    avgY /= avgRangeLength;\n    const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n    const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n    const {x: pointAx, y: pointAy} = data[a];\n    maxArea = area = -1;\n    for (j = rangeOffs; j < rangeTo; j++) {\n      area = 0.5 * Math.abs(\n        (pointAx - avgX) * (data[j].y - pointAy) -\n        (pointAx - data[j].x) * (avgY - pointAy)\n      );\n      if (area > maxArea) {\n        maxArea = area;\n        maxAreaPoint = data[j];\n        nextA = j;\n      }\n    }\n    decimated[sampledIndex++] = maxAreaPoint;\n    a = nextA;\n  }\n  decimated[sampledIndex++] = data[endIndex];\n  return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n  let avgX = 0;\n  let countX = 0;\n  let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n  const decimated = [];\n  const endIndex = start + count - 1;\n  const xMin = data[start].x;\n  const xMax = data[endIndex].x;\n  const dx = xMax - xMin;\n  for (i = start; i < start + count; ++i) {\n    point = data[i];\n    x = (point.x - xMin) / dx * availableWidth;\n    y = point.y;\n    const truncX = x | 0;\n    if (truncX === prevX) {\n      if (y < minY) {\n        minY = y;\n        minIndex = i;\n      } else if (y > maxY) {\n        maxY = y;\n        maxIndex = i;\n      }\n      avgX = (countX * avgX + point.x) / ++countX;\n    } else {\n      const lastIndex = i - 1;\n      if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n        const intermediateIndex1 = Math.min(minIndex, maxIndex);\n        const intermediateIndex2 = Math.max(minIndex, maxIndex);\n        if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex1],\n            x: avgX,\n          });\n        }\n        if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex2],\n            x: avgX\n          });\n        }\n      }\n      if (i > 0 && lastIndex !== startIndex) {\n        decimated.push(data[lastIndex]);\n      }\n      decimated.push(point);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n      minIndex = maxIndex = startIndex = i;\n    }\n  }\n  return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n  if (dataset._decimated) {\n    const data = dataset._data;\n    delete dataset._decimated;\n    delete dataset._data;\n    Object.defineProperty(dataset, 'data', {value: data});\n  }\n}\nfunction cleanDecimatedData(chart) {\n  chart.data.datasets.forEach((dataset) => {\n    cleanDecimatedDataset(dataset);\n  });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n  const pointCount = points.length;\n  let start = 0;\n  let count;\n  const {iScale} = meta;\n  const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n  if (minDefined) {\n    start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n  }\n  if (maxDefined) {\n    count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n  } else {\n    count = pointCount - start;\n  }\n  return {start, count};\n}\nvar plugin_decimation = {\n  id: 'decimation',\n  defaults: {\n    algorithm: 'min-max',\n    enabled: false,\n  },\n  beforeElementsUpdate: (chart, args, options) => {\n    if (!options.enabled) {\n      cleanDecimatedData(chart);\n      return;\n    }\n    const availableWidth = chart.width;\n    chart.data.datasets.forEach((dataset, datasetIndex) => {\n      const {_data, indexAxis} = dataset;\n      const meta = chart.getDatasetMeta(datasetIndex);\n      const data = _data || dataset.data;\n      if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n        return;\n      }\n      if (!meta.controller.supportsDecimation) {\n        return;\n      }\n      const xAxis = chart.scales[meta.xAxisID];\n      if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n        return;\n      }\n      if (chart.options.parsing) {\n        return;\n      }\n      let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n      const threshold = options.threshold || 4 * availableWidth;\n      if (count <= threshold) {\n        cleanDecimatedDataset(dataset);\n        return;\n      }\n      if (isNullOrUndef(_data)) {\n        dataset._data = data;\n        delete dataset.data;\n        Object.defineProperty(dataset, 'data', {\n          configurable: true,\n          enumerable: true,\n          get: function() {\n            return this._decimated;\n          },\n          set: function(d) {\n            this._data = d;\n          }\n        });\n      }\n      let decimated;\n      switch (options.algorithm) {\n      case 'lttb':\n        decimated = lttbDecimation(data, start, count, availableWidth, options);\n        break;\n      case 'min-max':\n        decimated = minMaxDecimation(data, start, count, availableWidth);\n        break;\n      default:\n        throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n      }\n      dataset._decimated = decimated;\n    });\n  },\n  destroy(chart) {\n    cleanDecimatedData(chart);\n  }\n};\n\nfunction _segments(line, target, property) {\n  const segments = line.segments;\n  const points = line.points;\n  const tpoints = target.points;\n  const parts = [];\n  for (const segment of segments) {\n    let {start, end} = segment;\n    end = _findSegmentEnd(start, end, points);\n    const bounds = _getBounds(property, points[start], points[end], segment.loop);\n    if (!target.segments) {\n      parts.push({\n        source: segment,\n        target: bounds,\n        start: points[start],\n        end: points[end]\n      });\n      continue;\n    }\n    const targetSegments = _boundSegments(target, bounds);\n    for (const tgt of targetSegments) {\n      const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n      const fillSources = _boundSegment(segment, points, subBounds);\n      for (const fillSource of fillSources) {\n        parts.push({\n          source: fillSource,\n          target: tgt,\n          start: {\n            [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n          },\n          end: {\n            [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n          }\n        });\n      }\n    }\n  }\n  return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n  if (loop) {\n    return;\n  }\n  let start = first[property];\n  let end = last[property];\n  if (property === 'angle') {\n    start = _normalizeAngle(start);\n    end = _normalizeAngle(end);\n  }\n  return {property, start, end};\n}\nfunction _pointsFromSegments(boundary, line) {\n  const {x = null, y = null} = boundary || {};\n  const linePoints = line.points;\n  const points = [];\n  line.segments.forEach(({start, end}) => {\n    end = _findSegmentEnd(start, end, linePoints);\n    const first = linePoints[start];\n    const last = linePoints[end];\n    if (y !== null) {\n      points.push({x: first.x, y});\n      points.push({x: last.x, y});\n    } else if (x !== null) {\n      points.push({x, y: first.y});\n      points.push({x, y: last.y});\n    }\n  });\n  return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n  for (;end > start; end--) {\n    const point = points[end];\n    if (!isNaN(point.x) && !isNaN(point.y)) {\n      break;\n    }\n  }\n  return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n  if (a && b) {\n    return fn(a[prop], b[prop]);\n  }\n  return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n  let points = [];\n  let _loop = false;\n  if (isArray(boundary)) {\n    _loop = true;\n    points = boundary;\n  } else {\n    points = _pointsFromSegments(boundary, line);\n  }\n  return points.length ? new LineElement({\n    points,\n    options: {tension: 0},\n    _loop,\n    _fullLoop: _loop\n  }) : null;\n}\nfunction _shouldApplyFill(source) {\n  return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n  const source = sources[index];\n  let fill = source.fill;\n  const visited = [index];\n  let target;\n  if (!propagate) {\n    return fill;\n  }\n  while (fill !== false && visited.indexOf(fill) === -1) {\n    if (!isNumberFinite(fill)) {\n      return fill;\n    }\n    target = sources[fill];\n    if (!target) {\n      return false;\n    }\n    if (target.visible) {\n      return fill;\n    }\n    visited.push(fill);\n    fill = target.fill;\n  }\n  return false;\n}\nfunction _decodeFill(line, index, count) {\n  const fill = parseFillOption(line);\n  if (isObject(fill)) {\n    return isNaN(fill.value) ? false : fill;\n  }\n  let target = parseFloat(fill);\n  if (isNumberFinite(target) && Math.floor(target) === target) {\n    return decodeTargetIndex(fill[0], index, target, count);\n  }\n  return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n  if (firstCh === '-' || firstCh === '+') {\n    target = index + target;\n  }\n  if (target === index || target < 0 || target >= count) {\n    return false;\n  }\n  return target;\n}\nfunction _getTargetPixel(fill, scale) {\n  let pixel = null;\n  if (fill === 'start') {\n    pixel = scale.bottom;\n  } else if (fill === 'end') {\n    pixel = scale.top;\n  } else if (isObject(fill)) {\n    pixel = scale.getPixelForValue(fill.value);\n  } else if (scale.getBasePixel) {\n    pixel = scale.getBasePixel();\n  }\n  return pixel;\n}\nfunction _getTargetValue(fill, scale, startValue) {\n  let value;\n  if (fill === 'start') {\n    value = startValue;\n  } else if (fill === 'end') {\n    value = scale.options.reverse ? scale.min : scale.max;\n  } else if (isObject(fill)) {\n    value = fill.value;\n  } else {\n    value = scale.getBaseValue();\n  }\n  return value;\n}\nfunction parseFillOption(line) {\n  const options = line.options;\n  const fillOption = options.fill;\n  let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n  if (fill === undefined) {\n    fill = !!options.backgroundColor;\n  }\n  if (fill === false || fill === null) {\n    return false;\n  }\n  if (fill === true) {\n    return 'origin';\n  }\n  return fill;\n}\n\nfunction _buildStackLine(source) {\n  const {scale, index, line} = source;\n  const points = [];\n  const segments = line.segments;\n  const sourcePoints = line.points;\n  const linesBelow = getLinesBelow(scale, index);\n  linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    for (let j = segment.start; j <= segment.end; j++) {\n      addPointsBelow(points, sourcePoints[j], linesBelow);\n    }\n  }\n  return new LineElement({points, options: {}});\n}\nfunction getLinesBelow(scale, index) {\n  const below = [];\n  const metas = scale.getMatchingVisibleMetas('line');\n  for (let i = 0; i < metas.length; i++) {\n    const meta = metas[i];\n    if (meta.index === index) {\n      break;\n    }\n    if (!meta.hidden) {\n      below.unshift(meta.dataset);\n    }\n  }\n  return below;\n}\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n  const postponed = [];\n  for (let j = 0; j < linesBelow.length; j++) {\n    const line = linesBelow[j];\n    const {first, last, point} = findPoint(line, sourcePoint, 'x');\n    if (!point || (first && last)) {\n      continue;\n    }\n    if (first) {\n      postponed.unshift(point);\n    } else {\n      points.push(point);\n      if (!last) {\n        break;\n      }\n    }\n  }\n  points.push(...postponed);\n}\nfunction findPoint(line, sourcePoint, property) {\n  const point = line.interpolate(sourcePoint, property);\n  if (!point) {\n    return {};\n  }\n  const pointValue = point[property];\n  const segments = line.segments;\n  const linePoints = line.points;\n  let first = false;\n  let last = false;\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    const firstValue = linePoints[segment.start][property];\n    const lastValue = linePoints[segment.end][property];\n    if (_isBetween(pointValue, firstValue, lastValue)) {\n      first = pointValue === firstValue;\n      last = pointValue === lastValue;\n      break;\n    }\n  }\n  return {first, last, point};\n}\n\nclass simpleArc {\n  constructor(opts) {\n    this.x = opts.x;\n    this.y = opts.y;\n    this.radius = opts.radius;\n  }\n  pathSegment(ctx, bounds, opts) {\n    const {x, y, radius} = this;\n    bounds = bounds || {start: 0, end: TAU};\n    ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n    return !opts.bounds;\n  }\n  interpolate(point) {\n    const {x, y, radius} = this;\n    const angle = point.angle;\n    return {\n      x: x + Math.cos(angle) * radius,\n      y: y + Math.sin(angle) * radius,\n      angle\n    };\n  }\n}\n\nfunction _getTarget(source) {\n  const {chart, fill, line} = source;\n  if (isNumberFinite(fill)) {\n    return getLineByIndex(chart, fill);\n  }\n  if (fill === 'stack') {\n    return _buildStackLine(source);\n  }\n  if (fill === 'shape') {\n    return true;\n  }\n  const boundary = computeBoundary(source);\n  if (boundary instanceof simpleArc) {\n    return boundary;\n  }\n  return _createBoundaryLine(boundary, line);\n}\nfunction getLineByIndex(chart, index) {\n  const meta = chart.getDatasetMeta(index);\n  const visible = meta && chart.isDatasetVisible(index);\n  return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n  const scale = source.scale || {};\n  if (scale.getPointPositionForValue) {\n    return computeCircularBoundary(source);\n  }\n  return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n  const {scale = {}, fill} = source;\n  const pixel = _getTargetPixel(fill, scale);\n  if (isNumberFinite(pixel)) {\n    const horizontal = scale.isHorizontal();\n    return {\n      x: horizontal ? pixel : null,\n      y: horizontal ? null : pixel\n    };\n  }\n  return null;\n}\nfunction computeCircularBoundary(source) {\n  const {scale, fill} = source;\n  const options = scale.options;\n  const length = scale.getLabels().length;\n  const start = options.reverse ? scale.max : scale.min;\n  const value = _getTargetValue(fill, scale, start);\n  const target = [];\n  if (options.grid.circular) {\n    const center = scale.getPointPositionForValue(0, start);\n    return new simpleArc({\n      x: center.x,\n      y: center.y,\n      radius: scale.getDistanceFromCenterForValue(value)\n    });\n  }\n  for (let i = 0; i < length; ++i) {\n    target.push(scale.getPointPositionForValue(i, value));\n  }\n  return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n  const target = _getTarget(source);\n  const {line, scale, axis} = source;\n  const lineOpts = line.options;\n  const fillOption = lineOpts.fill;\n  const color = lineOpts.backgroundColor;\n  const {above = color, below = color} = fillOption || {};\n  if (target && line.points.length) {\n    clipArea(ctx, area);\n    doFill(ctx, {line, target, above, below, area, scale, axis});\n    unclipArea(ctx);\n  }\n}\nfunction doFill(ctx, cfg) {\n  const {line, target, above, below, area, scale} = cfg;\n  const property = line._loop ? 'angle' : cfg.axis;\n  ctx.save();\n  if (property === 'x' && below !== above) {\n    clipVertical(ctx, target, area.top);\n    fill(ctx, {line, target, color: above, scale, property});\n    ctx.restore();\n    ctx.save();\n    clipVertical(ctx, target, area.bottom);\n  }\n  fill(ctx, {line, target, color: below, scale, property});\n  ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n  const {segments, points} = target;\n  let first = true;\n  let lineLoop = false;\n  ctx.beginPath();\n  for (const segment of segments) {\n    const {start, end} = segment;\n    const firstPoint = points[start];\n    const lastPoint = points[_findSegmentEnd(start, end, points)];\n    if (first) {\n      ctx.moveTo(firstPoint.x, firstPoint.y);\n      first = false;\n    } else {\n      ctx.lineTo(firstPoint.x, clipY);\n      ctx.lineTo(firstPoint.x, firstPoint.y);\n    }\n    lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n    if (lineLoop) {\n      ctx.closePath();\n    } else {\n      ctx.lineTo(lastPoint.x, clipY);\n    }\n  }\n  ctx.lineTo(target.first().x, clipY);\n  ctx.closePath();\n  ctx.clip();\n}\nfunction fill(ctx, cfg) {\n  const {line, target, property, color, scale} = cfg;\n  const segments = _segments(line, target, property);\n  for (const {source: src, target: tgt, start, end} of segments) {\n    const {style: {backgroundColor = color} = {}} = src;\n    const notShape = target !== true;\n    ctx.save();\n    ctx.fillStyle = backgroundColor;\n    clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n    ctx.beginPath();\n    const lineLoop = !!line.pathSegment(ctx, src);\n    let loop;\n    if (notShape) {\n      if (lineLoop) {\n        ctx.closePath();\n      } else {\n        interpolatedLineTo(ctx, target, end, property);\n      }\n      const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n      loop = lineLoop && targetLoop;\n      if (!loop) {\n        interpolatedLineTo(ctx, target, start, property);\n      }\n    }\n    ctx.closePath();\n    ctx.fill(loop ? 'evenodd' : 'nonzero');\n    ctx.restore();\n  }\n}\nfunction clipBounds(ctx, scale, bounds) {\n  const {top, bottom} = scale.chart.chartArea;\n  const {property, start, end} = bounds || {};\n  if (property === 'x') {\n    ctx.beginPath();\n    ctx.rect(start, top, end - start, bottom - top);\n    ctx.clip();\n  }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n  const interpolatedPoint = target.interpolate(point, property);\n  if (interpolatedPoint) {\n    ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n  }\n}\n\nvar index = {\n  id: 'filler',\n  afterDatasetsUpdate(chart, _args, options) {\n    const count = (chart.data.datasets || []).length;\n    const sources = [];\n    let meta, i, line, source;\n    for (i = 0; i < count; ++i) {\n      meta = chart.getDatasetMeta(i);\n      line = meta.dataset;\n      source = null;\n      if (line && line.options && line instanceof LineElement) {\n        source = {\n          visible: chart.isDatasetVisible(i),\n          index: i,\n          fill: _decodeFill(line, i, count),\n          chart,\n          axis: meta.controller.options.indexAxis,\n          scale: meta.vScale,\n          line,\n        };\n      }\n      meta.$filler = source;\n      sources.push(source);\n    }\n    for (i = 0; i < count; ++i) {\n      source = sources[i];\n      if (!source || source.fill === false) {\n        continue;\n      }\n      source.fill = _resolveTarget(sources, i, options.propagate);\n    }\n  },\n  beforeDraw(chart, _args, options) {\n    const draw = options.drawTime === 'beforeDraw';\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    const area = chart.chartArea;\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (!source) {\n        continue;\n      }\n      source.line.updateControlPoints(area, source.axis);\n      if (draw && source.fill) {\n        _drawfill(chart.ctx, source, area);\n      }\n    }\n  },\n  beforeDatasetsDraw(chart, _args, options) {\n    if (options.drawTime !== 'beforeDatasetsDraw') {\n      return;\n    }\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (_shouldApplyFill(source)) {\n        _drawfill(chart.ctx, source, chart.chartArea);\n      }\n    }\n  },\n  beforeDatasetDraw(chart, args, options) {\n    const source = args.meta.$filler;\n    if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n      return;\n    }\n    _drawfill(chart.ctx, source, chart.chartArea);\n  },\n  defaults: {\n    propagate: true,\n    drawTime: 'beforeDatasetDraw'\n  }\n};\n\nconst getBoxSize = (labelOpts, fontSize) => {\n  let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n  if (labelOpts.usePointStyle) {\n    boxHeight = Math.min(boxHeight, fontSize);\n    boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n  }\n  return {\n    boxWidth,\n    boxHeight,\n    itemHeight: Math.max(fontSize, boxHeight)\n  };\n};\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n  constructor(config) {\n    super();\n    this._added = false;\n    this.legendHitBoxes = [];\n    this._hoveredItem = null;\n    this.doughnutMode = false;\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this.legendItems = undefined;\n    this.columnSizes = undefined;\n    this.lineWidths = undefined;\n    this.maxHeight = undefined;\n    this.maxWidth = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this._margins = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n  update(maxWidth, maxHeight, margins) {\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins;\n    this.setDimensions();\n    this.buildLabels();\n    this.fit();\n  }\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = this._margins.left;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = this._margins.top;\n      this.bottom = this.height;\n    }\n  }\n  buildLabels() {\n    const labelOpts = this.options.labels || {};\n    let legendItems = callback(labelOpts.generateLabels, [this.chart], this) || [];\n    if (labelOpts.filter) {\n      legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n    }\n    if (labelOpts.sort) {\n      legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n    }\n    if (this.options.reverse) {\n      legendItems.reverse();\n    }\n    this.legendItems = legendItems;\n  }\n  fit() {\n    const {options, ctx} = this;\n    if (!options.display) {\n      this.width = this.height = 0;\n      return;\n    }\n    const labelOpts = options.labels;\n    const labelFont = toFont(labelOpts.font);\n    const fontSize = labelFont.size;\n    const titleHeight = this._computeTitleHeight();\n    const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n    let width, height;\n    ctx.font = labelFont.string;\n    if (this.isHorizontal()) {\n      width = this.maxWidth;\n      height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    } else {\n      height = this.maxHeight;\n      width = this._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    }\n    this.width = Math.min(width, options.maxWidth || this.maxWidth);\n    this.height = Math.min(height, options.maxHeight || this.maxHeight);\n  }\n  _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n    const {ctx, maxWidth, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    const lineWidths = this.lineWidths = [0];\n    const lineHeight = itemHeight + padding;\n    let totalHeight = titleHeight;\n    ctx.textAlign = 'left';\n    ctx.textBaseline = 'middle';\n    let row = -1;\n    let top = -lineHeight;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n      if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n        totalHeight += lineHeight;\n        lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n        top += lineHeight;\n        row++;\n      }\n      hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n      lineWidths[lineWidths.length - 1] += itemWidth + padding;\n    });\n    return totalHeight;\n  }\n  _fitCols(titleHeight, fontSize, boxWidth, itemHeight) {\n    const {ctx, maxHeight, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    const columnSizes = this.columnSizes = [];\n    const heightLimit = maxHeight - titleHeight;\n    let totalWidth = padding;\n    let currentColWidth = 0;\n    let currentColHeight = 0;\n    let left = 0;\n    let col = 0;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n      if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n        totalWidth += currentColWidth + padding;\n        columnSizes.push({width: currentColWidth, height: currentColHeight});\n        left += currentColWidth + padding;\n        col++;\n        currentColWidth = currentColHeight = 0;\n      }\n      hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n      currentColWidth = Math.max(currentColWidth, itemWidth);\n      currentColHeight += itemHeight + padding;\n    });\n    totalWidth += currentColWidth;\n    columnSizes.push({width: currentColWidth, height: currentColHeight});\n    return totalWidth;\n  }\n  adjustHitBoxes() {\n    if (!this.options.display) {\n      return;\n    }\n    const titleHeight = this._computeTitleHeight();\n    const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n    const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n    if (this.isHorizontal()) {\n      let row = 0;\n      let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n      for (const hitbox of hitboxes) {\n        if (row !== hitbox.row) {\n          row = hitbox.row;\n          left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n        }\n        hitbox.top += this.top + titleHeight + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n        left += hitbox.width + padding;\n      }\n    } else {\n      let col = 0;\n      let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n      for (const hitbox of hitboxes) {\n        if (hitbox.col !== col) {\n          col = hitbox.col;\n          top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n        }\n        hitbox.top = top;\n        hitbox.left += this.left + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n        top += hitbox.height + padding;\n      }\n    }\n  }\n  isHorizontal() {\n    return this.options.position === 'top' || this.options.position === 'bottom';\n  }\n  draw() {\n    if (this.options.display) {\n      const ctx = this.ctx;\n      clipArea(ctx, this);\n      this._draw();\n      unclipArea(ctx);\n    }\n  }\n  _draw() {\n    const {options: opts, columnSizes, lineWidths, ctx} = this;\n    const {align, labels: labelOpts} = opts;\n    const defaultColor = defaults.color;\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const labelFont = toFont(labelOpts.font);\n    const {color: fontColor, padding} = labelOpts;\n    const fontSize = labelFont.size;\n    const halfFontSize = fontSize / 2;\n    let cursor;\n    this.drawTitle();\n    ctx.textAlign = rtlHelper.textAlign('left');\n    ctx.textBaseline = 'middle';\n    ctx.lineWidth = 0.5;\n    ctx.font = labelFont.string;\n    const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n    const drawLegendBox = function(x, y, legendItem) {\n      if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n        return;\n      }\n      ctx.save();\n      const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n      ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n      ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n      ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n      ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n      ctx.lineWidth = lineWidth;\n      ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n      ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n      if (labelOpts.usePointStyle) {\n        const drawOptions = {\n          radius: boxHeight * Math.SQRT2 / 2,\n          pointStyle: legendItem.pointStyle,\n          rotation: legendItem.rotation,\n          borderWidth: lineWidth\n        };\n        const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n        const centerY = y + halfFontSize;\n        drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n      } else {\n        const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n        const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n        const borderRadius = toTRBLCorners(legendItem.borderRadius);\n        ctx.beginPath();\n        if (Object.values(borderRadius).some(v => v !== 0)) {\n          addRoundedRectPath(ctx, {\n            x: xBoxLeft,\n            y: yBoxTop,\n            w: boxWidth,\n            h: boxHeight,\n            radius: borderRadius,\n          });\n        } else {\n          ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n        }\n        ctx.fill();\n        if (lineWidth !== 0) {\n          ctx.stroke();\n        }\n      }\n      ctx.restore();\n    };\n    const fillText = function(x, y, legendItem) {\n      renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n        strikethrough: legendItem.hidden,\n        textAlign: rtlHelper.textAlign(legendItem.textAlign)\n      });\n    };\n    const isHorizontal = this.isHorizontal();\n    const titleHeight = this._computeTitleHeight();\n    if (isHorizontal) {\n      cursor = {\n        x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n        y: this.top + padding + titleHeight,\n        line: 0\n      };\n    } else {\n      cursor = {\n        x: this.left + padding,\n        y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n        line: 0\n      };\n    }\n    overrideTextDirection(this.ctx, opts.textDirection);\n    const lineHeight = itemHeight + padding;\n    this.legendItems.forEach((legendItem, i) => {\n      ctx.strokeStyle = legendItem.fontColor || fontColor;\n      ctx.fillStyle = legendItem.fontColor || fontColor;\n      const textWidth = ctx.measureText(legendItem.text).width;\n      const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n      const width = boxWidth + halfFontSize + textWidth;\n      let x = cursor.x;\n      let y = cursor.y;\n      rtlHelper.setWidth(this.width);\n      if (isHorizontal) {\n        if (i > 0 && x + width + padding > this.right) {\n          y = cursor.y += lineHeight;\n          cursor.line++;\n          x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n        }\n      } else if (i > 0 && y + lineHeight > this.bottom) {\n        x = cursor.x = x + columnSizes[cursor.line].width + padding;\n        cursor.line++;\n        y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n      }\n      const realX = rtlHelper.x(x);\n      drawLegendBox(realX, y, legendItem);\n      x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n      fillText(rtlHelper.x(x), y, legendItem);\n      if (isHorizontal) {\n        cursor.x += width + padding;\n      } else {\n        cursor.y += lineHeight;\n      }\n    });\n    restoreTextDirection(this.ctx, opts.textDirection);\n  }\n  drawTitle() {\n    const opts = this.options;\n    const titleOpts = opts.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    if (!titleOpts.display) {\n      return;\n    }\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const ctx = this.ctx;\n    const position = titleOpts.position;\n    const halfFontSize = titleFont.size / 2;\n    const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n    let y;\n    let left = this.left;\n    let maxWidth = this.width;\n    if (this.isHorizontal()) {\n      maxWidth = Math.max(...this.lineWidths);\n      y = this.top + topPaddingPlusHalfFontSize;\n      left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n    } else {\n      const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n      y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n    }\n    const x = _alignStartEnd(position, left, left + maxWidth);\n    ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n    ctx.textBaseline = 'middle';\n    ctx.strokeStyle = titleOpts.color;\n    ctx.fillStyle = titleOpts.color;\n    ctx.font = titleFont.string;\n    renderText(ctx, titleOpts.text, x, y, titleFont);\n  }\n  _computeTitleHeight() {\n    const titleOpts = this.options.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n  }\n  _getLegendItemAt(x, y) {\n    let i, hitBox, lh;\n    if (_isBetween(x, this.left, this.right)\n      && _isBetween(y, this.top, this.bottom)) {\n      lh = this.legendHitBoxes;\n      for (i = 0; i < lh.length; ++i) {\n        hitBox = lh[i];\n        if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n          && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n          return this.legendItems[i];\n        }\n      }\n    }\n    return null;\n  }\n  handleEvent(e) {\n    const opts = this.options;\n    if (!isListened(e.type, opts)) {\n      return;\n    }\n    const hoveredItem = this._getLegendItemAt(e.x, e.y);\n    if (e.type === 'mousemove' || e.type === 'mouseout') {\n      const previous = this._hoveredItem;\n      const sameItem = itemsEqual(previous, hoveredItem);\n      if (previous && !sameItem) {\n        callback(opts.onLeave, [e, previous, this], this);\n      }\n      this._hoveredItem = hoveredItem;\n      if (hoveredItem && !sameItem) {\n        callback(opts.onHover, [e, hoveredItem, this], this);\n      }\n    } else if (hoveredItem) {\n      callback(opts.onClick, [e, hoveredItem, this], this);\n    }\n  }\n}\nfunction isListened(type, opts) {\n  if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n    return true;\n  }\n  if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n    return true;\n  }\n  return false;\n}\nvar plugin_legend = {\n  id: 'legend',\n  _element: Legend,\n  start(chart, _args, options) {\n    const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n    layouts.configure(chart, legend, options);\n    layouts.addBox(chart, legend);\n  },\n  stop(chart) {\n    layouts.removeBox(chart, chart.legend);\n    delete chart.legend;\n  },\n  beforeUpdate(chart, _args, options) {\n    const legend = chart.legend;\n    layouts.configure(chart, legend, options);\n    legend.options = options;\n  },\n  afterUpdate(chart) {\n    const legend = chart.legend;\n    legend.buildLabels();\n    legend.adjustHitBoxes();\n  },\n  afterEvent(chart, args) {\n    if (!args.replay) {\n      chart.legend.handleEvent(args.event);\n    }\n  },\n  defaults: {\n    display: true,\n    position: 'top',\n    align: 'center',\n    fullSize: true,\n    reverse: false,\n    weight: 1000,\n    onClick(e, legendItem, legend) {\n      const index = legendItem.datasetIndex;\n      const ci = legend.chart;\n      if (ci.isDatasetVisible(index)) {\n        ci.hide(index);\n        legendItem.hidden = true;\n      } else {\n        ci.show(index);\n        legendItem.hidden = false;\n      }\n    },\n    onHover: null,\n    onLeave: null,\n    labels: {\n      color: (ctx) => ctx.chart.options.color,\n      boxWidth: 40,\n      padding: 10,\n      generateLabels(chart) {\n        const datasets = chart.data.datasets;\n        const {labels: {usePointStyle, pointStyle, textAlign, color}} = chart.legend.options;\n        return chart._getSortedDatasetMetas().map((meta) => {\n          const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n          const borderWidth = toPadding(style.borderWidth);\n          return {\n            text: datasets[meta.index].label,\n            fillStyle: style.backgroundColor,\n            fontColor: color,\n            hidden: !meta.visible,\n            lineCap: style.borderCapStyle,\n            lineDash: style.borderDash,\n            lineDashOffset: style.borderDashOffset,\n            lineJoin: style.borderJoinStyle,\n            lineWidth: (borderWidth.width + borderWidth.height) / 4,\n            strokeStyle: style.borderColor,\n            pointStyle: pointStyle || style.pointStyle,\n            rotation: style.rotation,\n            textAlign: textAlign || style.textAlign,\n            borderRadius: 0,\n            datasetIndex: meta.index\n          };\n        }, this);\n      }\n    },\n    title: {\n      color: (ctx) => ctx.chart.options.color,\n      display: false,\n      position: 'center',\n      text: '',\n    }\n  },\n  descriptors: {\n    _scriptable: (name) => !name.startsWith('on'),\n    labels: {\n      _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n    }\n  },\n};\n\nclass Title extends Element {\n  constructor(config) {\n    super();\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this._padding = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n  update(maxWidth, maxHeight) {\n    const opts = this.options;\n    this.left = 0;\n    this.top = 0;\n    if (!opts.display) {\n      this.width = this.height = this.right = this.bottom = 0;\n      return;\n    }\n    this.width = this.right = maxWidth;\n    this.height = this.bottom = maxHeight;\n    const lineCount = isArray(opts.text) ? opts.text.length : 1;\n    this._padding = toPadding(opts.padding);\n    const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n    if (this.isHorizontal()) {\n      this.height = textSize;\n    } else {\n      this.width = textSize;\n    }\n  }\n  isHorizontal() {\n    const pos = this.options.position;\n    return pos === 'top' || pos === 'bottom';\n  }\n  _drawArgs(offset) {\n    const {top, left, bottom, right, options} = this;\n    const align = options.align;\n    let rotation = 0;\n    let maxWidth, titleX, titleY;\n    if (this.isHorizontal()) {\n      titleX = _alignStartEnd(align, left, right);\n      titleY = top + offset;\n      maxWidth = right - left;\n    } else {\n      if (options.position === 'left') {\n        titleX = left + offset;\n        titleY = _alignStartEnd(align, bottom, top);\n        rotation = PI * -0.5;\n      } else {\n        titleX = right - offset;\n        titleY = _alignStartEnd(align, top, bottom);\n        rotation = PI * 0.5;\n      }\n      maxWidth = bottom - top;\n    }\n    return {titleX, titleY, maxWidth, rotation};\n  }\n  draw() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    if (!opts.display) {\n      return;\n    }\n    const fontOpts = toFont(opts.font);\n    const lineHeight = fontOpts.lineHeight;\n    const offset = lineHeight / 2 + this._padding.top;\n    const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n    renderText(ctx, opts.text, 0, 0, fontOpts, {\n      color: opts.color,\n      maxWidth,\n      rotation,\n      textAlign: _toLeftRightCenter(opts.align),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n}\nfunction createTitle(chart, titleOpts) {\n  const title = new Title({\n    ctx: chart.ctx,\n    options: titleOpts,\n    chart\n  });\n  layouts.configure(chart, title, titleOpts);\n  layouts.addBox(chart, title);\n  chart.titleBlock = title;\n}\nvar plugin_title = {\n  id: 'title',\n  _element: Title,\n  start(chart, _args, options) {\n    createTitle(chart, options);\n  },\n  stop(chart) {\n    const titleBlock = chart.titleBlock;\n    layouts.removeBox(chart, titleBlock);\n    delete chart.titleBlock;\n  },\n  beforeUpdate(chart, _args, options) {\n    const title = chart.titleBlock;\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'bold',\n    },\n    fullSize: true,\n    padding: 10,\n    position: 'top',\n    text: '',\n    weight: 2000\n  },\n  defaultRoutes: {\n    color: 'color'\n  },\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n  id: 'subtitle',\n  start(chart, _args, options) {\n    const title = new Title({\n      ctx: chart.ctx,\n      options,\n      chart\n    });\n    layouts.configure(chart, title, options);\n    layouts.addBox(chart, title);\n    map.set(chart, title);\n  },\n  stop(chart) {\n    layouts.removeBox(chart, map.get(chart));\n    map.delete(chart);\n  },\n  beforeUpdate(chart, _args, options) {\n    const title = map.get(chart);\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'normal',\n    },\n    fullSize: true,\n    padding: 0,\n    position: 'top',\n    text: '',\n    weight: 1500\n  },\n  defaultRoutes: {\n    color: 'color'\n  },\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n\nconst positioners = {\n  average(items) {\n    if (!items.length) {\n      return false;\n    }\n    let i, len;\n    let x = 0;\n    let y = 0;\n    let count = 0;\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const pos = el.tooltipPosition();\n        x += pos.x;\n        y += pos.y;\n        ++count;\n      }\n    }\n    return {\n      x: x / count,\n      y: y / count\n    };\n  },\n  nearest(items, eventPosition) {\n    if (!items.length) {\n      return false;\n    }\n    let x = eventPosition.x;\n    let y = eventPosition.y;\n    let minDistance = Number.POSITIVE_INFINITY;\n    let i, len, nearestElement;\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const center = el.getCenterPoint();\n        const d = distanceBetweenPoints(eventPosition, center);\n        if (d < minDistance) {\n          minDistance = d;\n          nearestElement = el;\n        }\n      }\n    }\n    if (nearestElement) {\n      const tp = nearestElement.tooltipPosition();\n      x = tp.x;\n      y = tp.y;\n    }\n    return {\n      x,\n      y\n    };\n  }\n};\nfunction pushOrConcat(base, toPush) {\n  if (toPush) {\n    if (isArray(toPush)) {\n      Array.prototype.push.apply(base, toPush);\n    } else {\n      base.push(toPush);\n    }\n  }\n  return base;\n}\nfunction splitNewlines(str) {\n  if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n    return str.split('\\n');\n  }\n  return str;\n}\nfunction createTooltipItem(chart, item) {\n  const {element, datasetIndex, index} = item;\n  const controller = chart.getDatasetMeta(datasetIndex).controller;\n  const {label, value} = controller.getLabelAndValue(index);\n  return {\n    chart,\n    label,\n    parsed: controller.getParsed(index),\n    raw: chart.data.datasets[datasetIndex].data[index],\n    formattedValue: value,\n    dataset: controller.getDataset(),\n    dataIndex: index,\n    datasetIndex,\n    element\n  };\n}\nfunction getTooltipSize(tooltip, options) {\n  const ctx = tooltip.chart.ctx;\n  const {body, footer, title} = tooltip;\n  const {boxWidth, boxHeight} = options;\n  const bodyFont = toFont(options.bodyFont);\n  const titleFont = toFont(options.titleFont);\n  const footerFont = toFont(options.footerFont);\n  const titleLineCount = title.length;\n  const footerLineCount = footer.length;\n  const bodyLineItemCount = body.length;\n  const padding = toPadding(options.padding);\n  let height = padding.height;\n  let width = 0;\n  let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n  combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n  if (titleLineCount) {\n    height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n  }\n  if (combinedBodyLength) {\n    const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n    height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n  }\n  if (footerLineCount) {\n    height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n  }\n  let widthPadding = 0;\n  const maxLineWidth = function(line) {\n    width = Math.max(width, ctx.measureText(line).width + widthPadding);\n  };\n  ctx.save();\n  ctx.font = titleFont.string;\n  each(tooltip.title, maxLineWidth);\n  ctx.font = bodyFont.string;\n  each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n  widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n  each(body, (bodyItem) => {\n    each(bodyItem.before, maxLineWidth);\n    each(bodyItem.lines, maxLineWidth);\n    each(bodyItem.after, maxLineWidth);\n  });\n  widthPadding = 0;\n  ctx.font = footerFont.string;\n  each(tooltip.footer, maxLineWidth);\n  ctx.restore();\n  width += padding.width;\n  return {width, height};\n}\nfunction determineYAlign(chart, size) {\n  const {y, height} = size;\n  if (y < height / 2) {\n    return 'top';\n  } else if (y > (chart.height - height / 2)) {\n    return 'bottom';\n  }\n  return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n  const {x, width} = size;\n  const caret = options.caretSize + options.caretPadding;\n  if (xAlign === 'left' && x + width + caret > chart.width) {\n    return true;\n  }\n  if (xAlign === 'right' && x - width - caret < 0) {\n    return true;\n  }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n  const {x, width} = size;\n  const {width: chartWidth, chartArea: {left, right}} = chart;\n  let xAlign = 'center';\n  if (yAlign === 'center') {\n    xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n  } else if (x <= width / 2) {\n    xAlign = 'left';\n  } else if (x >= chartWidth - width / 2) {\n    xAlign = 'right';\n  }\n  if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n    xAlign = 'center';\n  }\n  return xAlign;\n}\nfunction determineAlignment(chart, options, size) {\n  const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n  return {\n    xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n    yAlign\n  };\n}\nfunction alignX(size, xAlign) {\n  let {x, width} = size;\n  if (xAlign === 'right') {\n    x -= width;\n  } else if (xAlign === 'center') {\n    x -= (width / 2);\n  }\n  return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n  let {y, height} = size;\n  if (yAlign === 'top') {\n    y += paddingAndSize;\n  } else if (yAlign === 'bottom') {\n    y -= height + paddingAndSize;\n  } else {\n    y -= (height / 2);\n  }\n  return y;\n}\nfunction getBackgroundPoint(options, size, alignment, chart) {\n  const {caretSize, caretPadding, cornerRadius} = options;\n  const {xAlign, yAlign} = alignment;\n  const paddingAndSize = caretSize + caretPadding;\n  const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n  let x = alignX(size, xAlign);\n  const y = alignY(size, yAlign, paddingAndSize);\n  if (yAlign === 'center') {\n    if (xAlign === 'left') {\n      x += paddingAndSize;\n    } else if (xAlign === 'right') {\n      x -= paddingAndSize;\n    }\n  } else if (xAlign === 'left') {\n    x -= Math.max(topLeft, bottomLeft) + caretSize;\n  } else if (xAlign === 'right') {\n    x += Math.max(topRight, bottomRight) + caretSize;\n  }\n  return {\n    x: _limitValue(x, 0, chart.width - size.width),\n    y: _limitValue(y, 0, chart.height - size.height)\n  };\n}\nfunction getAlignedX(tooltip, align, options) {\n  const padding = toPadding(options.padding);\n  return align === 'center'\n    ? tooltip.x + tooltip.width / 2\n    : align === 'right'\n      ? tooltip.x + tooltip.width - padding.right\n      : tooltip.x + padding.left;\n}\nfunction getBeforeAfterBodyLines(callback) {\n  return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n  return createContext(parent, {\n    tooltip,\n    tooltipItems,\n    type: 'tooltip'\n  });\n}\nfunction overrideCallbacks(callbacks, context) {\n  const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n  return override ? callbacks.override(override) : callbacks;\n}\nclass Tooltip extends Element {\n  constructor(config) {\n    super();\n    this.opacity = 0;\n    this._active = [];\n    this._eventPosition = undefined;\n    this._size = undefined;\n    this._cachedAnimations = undefined;\n    this._tooltipItems = [];\n    this.$animations = undefined;\n    this.$context = undefined;\n    this.chart = config.chart || config._chart;\n    this._chart = this.chart;\n    this.options = config.options;\n    this.dataPoints = undefined;\n    this.title = undefined;\n    this.beforeBody = undefined;\n    this.body = undefined;\n    this.afterBody = undefined;\n    this.footer = undefined;\n    this.xAlign = undefined;\n    this.yAlign = undefined;\n    this.x = undefined;\n    this.y = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this.caretX = undefined;\n    this.caretY = undefined;\n    this.labelColors = undefined;\n    this.labelPointStyles = undefined;\n    this.labelTextColors = undefined;\n  }\n  initialize(options) {\n    this.options = options;\n    this._cachedAnimations = undefined;\n    this.$context = undefined;\n  }\n  _resolveAnimations() {\n    const cached = this._cachedAnimations;\n    if (cached) {\n      return cached;\n    }\n    const chart = this.chart;\n    const options = this.options.setContext(this.getContext());\n    const opts = options.enabled && chart.options.animation && options.animations;\n    const animations = new Animations(this.chart, opts);\n    if (opts._cacheable) {\n      this._cachedAnimations = Object.freeze(animations);\n    }\n    return animations;\n  }\n  getContext() {\n    return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n  }\n  getTitle(context, options) {\n    const {callbacks} = options;\n    const beforeTitle = callbacks.beforeTitle.apply(this, [context]);\n    const title = callbacks.title.apply(this, [context]);\n    const afterTitle = callbacks.afterTitle.apply(this, [context]);\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n    lines = pushOrConcat(lines, splitNewlines(title));\n    lines = pushOrConcat(lines, splitNewlines(afterTitle));\n    return lines;\n  }\n  getBeforeBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems]));\n  }\n  getBody(tooltipItems, options) {\n    const {callbacks} = options;\n    const bodyItems = [];\n    each(tooltipItems, (context) => {\n      const bodyItem = {\n        before: [],\n        lines: [],\n        after: []\n      };\n      const scoped = overrideCallbacks(callbacks, context);\n      pushOrConcat(bodyItem.before, splitNewlines(scoped.beforeLabel.call(this, context)));\n      pushOrConcat(bodyItem.lines, scoped.label.call(this, context));\n      pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(this, context)));\n      bodyItems.push(bodyItem);\n    });\n    return bodyItems;\n  }\n  getAfterBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems]));\n  }\n  getFooter(tooltipItems, options) {\n    const {callbacks} = options;\n    const beforeFooter = callbacks.beforeFooter.apply(this, [tooltipItems]);\n    const footer = callbacks.footer.apply(this, [tooltipItems]);\n    const afterFooter = callbacks.afterFooter.apply(this, [tooltipItems]);\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n    lines = pushOrConcat(lines, splitNewlines(footer));\n    lines = pushOrConcat(lines, splitNewlines(afterFooter));\n    return lines;\n  }\n  _createItems(options) {\n    const active = this._active;\n    const data = this.chart.data;\n    const labelColors = [];\n    const labelPointStyles = [];\n    const labelTextColors = [];\n    let tooltipItems = [];\n    let i, len;\n    for (i = 0, len = active.length; i < len; ++i) {\n      tooltipItems.push(createTooltipItem(this.chart, active[i]));\n    }\n    if (options.filter) {\n      tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n    }\n    if (options.itemSort) {\n      tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n    }\n    each(tooltipItems, (context) => {\n      const scoped = overrideCallbacks(options.callbacks, context);\n      labelColors.push(scoped.labelColor.call(this, context));\n      labelPointStyles.push(scoped.labelPointStyle.call(this, context));\n      labelTextColors.push(scoped.labelTextColor.call(this, context));\n    });\n    this.labelColors = labelColors;\n    this.labelPointStyles = labelPointStyles;\n    this.labelTextColors = labelTextColors;\n    this.dataPoints = tooltipItems;\n    return tooltipItems;\n  }\n  update(changed, replay) {\n    const options = this.options.setContext(this.getContext());\n    const active = this._active;\n    let properties;\n    let tooltipItems = [];\n    if (!active.length) {\n      if (this.opacity !== 0) {\n        properties = {\n          opacity: 0\n        };\n      }\n    } else {\n      const position = positioners[options.position].call(this, active, this._eventPosition);\n      tooltipItems = this._createItems(options);\n      this.title = this.getTitle(tooltipItems, options);\n      this.beforeBody = this.getBeforeBody(tooltipItems, options);\n      this.body = this.getBody(tooltipItems, options);\n      this.afterBody = this.getAfterBody(tooltipItems, options);\n      this.footer = this.getFooter(tooltipItems, options);\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, size);\n      const alignment = determineAlignment(this.chart, options, positionAndSize);\n      const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n      this.xAlign = alignment.xAlign;\n      this.yAlign = alignment.yAlign;\n      properties = {\n        opacity: 1,\n        x: backgroundPoint.x,\n        y: backgroundPoint.y,\n        width: size.width,\n        height: size.height,\n        caretX: position.x,\n        caretY: position.y\n      };\n    }\n    this._tooltipItems = tooltipItems;\n    this.$context = undefined;\n    if (properties) {\n      this._resolveAnimations().update(this, properties);\n    }\n    if (changed && options.external) {\n      options.external.call(this, {chart: this.chart, tooltip: this, replay});\n    }\n  }\n  drawCaret(tooltipPoint, ctx, size, options) {\n    const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n    ctx.lineTo(caretPosition.x1, caretPosition.y1);\n    ctx.lineTo(caretPosition.x2, caretPosition.y2);\n    ctx.lineTo(caretPosition.x3, caretPosition.y3);\n  }\n  getCaretPosition(tooltipPoint, size, options) {\n    const {xAlign, yAlign} = this;\n    const {caretSize, cornerRadius} = options;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n    const {x: ptX, y: ptY} = tooltipPoint;\n    const {width, height} = size;\n    let x1, x2, x3, y1, y2, y3;\n    if (yAlign === 'center') {\n      y2 = ptY + (height / 2);\n      if (xAlign === 'left') {\n        x1 = ptX;\n        x2 = x1 - caretSize;\n        y1 = y2 + caretSize;\n        y3 = y2 - caretSize;\n      } else {\n        x1 = ptX + width;\n        x2 = x1 + caretSize;\n        y1 = y2 - caretSize;\n        y3 = y2 + caretSize;\n      }\n      x3 = x1;\n    } else {\n      if (xAlign === 'left') {\n        x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n      } else if (xAlign === 'right') {\n        x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n      } else {\n        x2 = this.caretX;\n      }\n      if (yAlign === 'top') {\n        y1 = ptY;\n        y2 = y1 - caretSize;\n        x1 = x2 - caretSize;\n        x3 = x2 + caretSize;\n      } else {\n        y1 = ptY + height;\n        y2 = y1 + caretSize;\n        x1 = x2 + caretSize;\n        x3 = x2 - caretSize;\n      }\n      y3 = y1;\n    }\n    return {x1, x2, x3, y1, y2, y3};\n  }\n  drawTitle(pt, ctx, options) {\n    const title = this.title;\n    const length = title.length;\n    let titleFont, titleSpacing, i;\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n      pt.x = getAlignedX(this, options.titleAlign, options);\n      ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n      ctx.textBaseline = 'middle';\n      titleFont = toFont(options.titleFont);\n      titleSpacing = options.titleSpacing;\n      ctx.fillStyle = options.titleColor;\n      ctx.font = titleFont.string;\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n        pt.y += titleFont.lineHeight + titleSpacing;\n        if (i + 1 === length) {\n          pt.y += options.titleMarginBottom - titleSpacing;\n        }\n      }\n    }\n  }\n  _drawColorBox(ctx, pt, i, rtlHelper, options) {\n    const labelColors = this.labelColors[i];\n    const labelPointStyle = this.labelPointStyles[i];\n    const {boxHeight, boxWidth, boxPadding} = options;\n    const bodyFont = toFont(options.bodyFont);\n    const colorX = getAlignedX(this, 'left', options);\n    const rtlColorX = rtlHelper.x(colorX);\n    const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n    const colorY = pt.y + yOffSet;\n    if (options.usePointStyle) {\n      const drawOptions = {\n        radius: Math.min(boxWidth, boxHeight) / 2,\n        pointStyle: labelPointStyle.pointStyle,\n        rotation: labelPointStyle.rotation,\n        borderWidth: 1\n      };\n      const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n      const centerY = colorY + boxHeight / 2;\n      ctx.strokeStyle = options.multiKeyBackground;\n      ctx.fillStyle = options.multiKeyBackground;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n      ctx.strokeStyle = labelColors.borderColor;\n      ctx.fillStyle = labelColors.backgroundColor;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n    } else {\n      ctx.lineWidth = isObject(labelColors.borderWidth) ? Math.max(...Object.values(labelColors.borderWidth)) : (labelColors.borderWidth || 1);\n      ctx.strokeStyle = labelColors.borderColor;\n      ctx.setLineDash(labelColors.borderDash || []);\n      ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n      const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding);\n      const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2);\n      const borderRadius = toTRBLCorners(labelColors.borderRadius);\n      if (Object.values(borderRadius).some(v => v !== 0)) {\n        ctx.beginPath();\n        ctx.fillStyle = options.multiKeyBackground;\n        addRoundedRectPath(ctx, {\n          x: outerX,\n          y: colorY,\n          w: boxWidth,\n          h: boxHeight,\n          radius: borderRadius,\n        });\n        ctx.fill();\n        ctx.stroke();\n        ctx.fillStyle = labelColors.backgroundColor;\n        ctx.beginPath();\n        addRoundedRectPath(ctx, {\n          x: innerX,\n          y: colorY + 1,\n          w: boxWidth - 2,\n          h: boxHeight - 2,\n          radius: borderRadius,\n        });\n        ctx.fill();\n      } else {\n        ctx.fillStyle = options.multiKeyBackground;\n        ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.fillStyle = labelColors.backgroundColor;\n        ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n      }\n    }\n    ctx.fillStyle = this.labelTextColors[i];\n  }\n  drawBody(pt, ctx, options) {\n    const {body} = this;\n    const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n    const bodyFont = toFont(options.bodyFont);\n    let bodyLineHeight = bodyFont.lineHeight;\n    let xLinePadding = 0;\n    const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n    const fillLineOfText = function(line) {\n      ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n      pt.y += bodyLineHeight + bodySpacing;\n    };\n    const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n    let bodyItem, textColor, lines, i, j, ilen, jlen;\n    ctx.textAlign = bodyAlign;\n    ctx.textBaseline = 'middle';\n    ctx.font = bodyFont.string;\n    pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n    ctx.fillStyle = options.bodyColor;\n    each(this.beforeBody, fillLineOfText);\n    xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n      ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n      : 0;\n    for (i = 0, ilen = body.length; i < ilen; ++i) {\n      bodyItem = body[i];\n      textColor = this.labelTextColors[i];\n      ctx.fillStyle = textColor;\n      each(bodyItem.before, fillLineOfText);\n      lines = bodyItem.lines;\n      if (displayColors && lines.length) {\n        this._drawColorBox(ctx, pt, i, rtlHelper, options);\n        bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n      }\n      for (j = 0, jlen = lines.length; j < jlen; ++j) {\n        fillLineOfText(lines[j]);\n        bodyLineHeight = bodyFont.lineHeight;\n      }\n      each(bodyItem.after, fillLineOfText);\n    }\n    xLinePadding = 0;\n    bodyLineHeight = bodyFont.lineHeight;\n    each(this.afterBody, fillLineOfText);\n    pt.y -= bodySpacing;\n  }\n  drawFooter(pt, ctx, options) {\n    const footer = this.footer;\n    const length = footer.length;\n    let footerFont, i;\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n      pt.x = getAlignedX(this, options.footerAlign, options);\n      pt.y += options.footerMarginTop;\n      ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n      ctx.textBaseline = 'middle';\n      footerFont = toFont(options.footerFont);\n      ctx.fillStyle = options.footerColor;\n      ctx.font = footerFont.string;\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n        pt.y += footerFont.lineHeight + options.footerSpacing;\n      }\n    }\n  }\n  drawBackground(pt, ctx, tooltipSize, options) {\n    const {xAlign, yAlign} = this;\n    const {x, y} = pt;\n    const {width, height} = tooltipSize;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.beginPath();\n    ctx.moveTo(x + topLeft, y);\n    if (yAlign === 'top') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width - topRight, y);\n    ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n    if (yAlign === 'center' && xAlign === 'right') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width, y + height - bottomRight);\n    ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n    if (yAlign === 'bottom') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + bottomLeft, y + height);\n    ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n    if (yAlign === 'center' && xAlign === 'left') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x, y + topLeft);\n    ctx.quadraticCurveTo(x, y, x + topLeft, y);\n    ctx.closePath();\n    ctx.fill();\n    if (options.borderWidth > 0) {\n      ctx.stroke();\n    }\n  }\n  _updateAnimationTarget(options) {\n    const chart = this.chart;\n    const anims = this.$animations;\n    const animX = anims && anims.x;\n    const animY = anims && anims.y;\n    if (animX || animY) {\n      const position = positioners[options.position].call(this, this._active, this._eventPosition);\n      if (!position) {\n        return;\n      }\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, this._size);\n      const alignment = determineAlignment(chart, options, positionAndSize);\n      const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n      if (animX._to !== point.x || animY._to !== point.y) {\n        this.xAlign = alignment.xAlign;\n        this.yAlign = alignment.yAlign;\n        this.width = size.width;\n        this.height = size.height;\n        this.caretX = position.x;\n        this.caretY = position.y;\n        this._resolveAnimations().update(this, point);\n      }\n    }\n  }\n  _willRender() {\n    return !!this.opacity;\n  }\n  draw(ctx) {\n    const options = this.options.setContext(this.getContext());\n    let opacity = this.opacity;\n    if (!opacity) {\n      return;\n    }\n    this._updateAnimationTarget(options);\n    const tooltipSize = {\n      width: this.width,\n      height: this.height\n    };\n    const pt = {\n      x: this.x,\n      y: this.y\n    };\n    opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n    const padding = toPadding(options.padding);\n    const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n    if (options.enabled && hasTooltipContent) {\n      ctx.save();\n      ctx.globalAlpha = opacity;\n      this.drawBackground(pt, ctx, tooltipSize, options);\n      overrideTextDirection(ctx, options.textDirection);\n      pt.y += padding.top;\n      this.drawTitle(pt, ctx, options);\n      this.drawBody(pt, ctx, options);\n      this.drawFooter(pt, ctx, options);\n      restoreTextDirection(ctx, options.textDirection);\n      ctx.restore();\n    }\n  }\n  getActiveElements() {\n    return this._active || [];\n  }\n  setActiveElements(activeElements, eventPosition) {\n    const lastActive = this._active;\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.chart.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('Cannot find a dataset at index ' + datasetIndex);\n      }\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(lastActive, active);\n    const positionChanged = this._positionChanged(active, eventPosition);\n    if (changed || positionChanged) {\n      this._active = active;\n      this._eventPosition = eventPosition;\n      this._ignoreReplayEvents = true;\n      this.update(true);\n    }\n  }\n  handleEvent(e, replay, inChartArea = true) {\n    if (replay && this._ignoreReplayEvents) {\n      return false;\n    }\n    this._ignoreReplayEvents = false;\n    const options = this.options;\n    const lastActive = this._active || [];\n    const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n    const positionChanged = this._positionChanged(active, e);\n    const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n    if (changed) {\n      this._active = active;\n      if (options.enabled || options.external) {\n        this._eventPosition = {\n          x: e.x,\n          y: e.y\n        };\n        this.update(true, replay);\n      }\n    }\n    return changed;\n  }\n  _getActiveElements(e, lastActive, replay, inChartArea) {\n    const options = this.options;\n    if (e.type === 'mouseout') {\n      return [];\n    }\n    if (!inChartArea) {\n      return lastActive;\n    }\n    const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n    if (options.reverse) {\n      active.reverse();\n    }\n    return active;\n  }\n  _positionChanged(active, e) {\n    const {caretX, caretY, options} = this;\n    const position = positioners[options.position].call(this, active, e);\n    return position !== false && (caretX !== position.x || caretY !== position.y);\n  }\n}\nTooltip.positioners = positioners;\nvar plugin_tooltip = {\n  id: 'tooltip',\n  _element: Tooltip,\n  positioners,\n  afterInit(chart, _args, options) {\n    if (options) {\n      chart.tooltip = new Tooltip({chart, options});\n    }\n  },\n  beforeUpdate(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n  reset(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n  afterDraw(chart) {\n    const tooltip = chart.tooltip;\n    if (tooltip && tooltip._willRender()) {\n      const args = {\n        tooltip\n      };\n      if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {\n        return;\n      }\n      tooltip.draw(chart.ctx);\n      chart.notifyPlugins('afterTooltipDraw', args);\n    }\n  },\n  afterEvent(chart, args) {\n    if (chart.tooltip) {\n      const useFinalPosition = args.replay;\n      if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n        args.changed = true;\n      }\n    }\n  },\n  defaults: {\n    enabled: true,\n    external: null,\n    position: 'average',\n    backgroundColor: 'rgba(0,0,0,0.8)',\n    titleColor: '#fff',\n    titleFont: {\n      weight: 'bold',\n    },\n    titleSpacing: 2,\n    titleMarginBottom: 6,\n    titleAlign: 'left',\n    bodyColor: '#fff',\n    bodySpacing: 2,\n    bodyFont: {\n    },\n    bodyAlign: 'left',\n    footerColor: '#fff',\n    footerSpacing: 2,\n    footerMarginTop: 6,\n    footerFont: {\n      weight: 'bold',\n    },\n    footerAlign: 'left',\n    padding: 6,\n    caretPadding: 2,\n    caretSize: 5,\n    cornerRadius: 6,\n    boxHeight: (ctx, opts) => opts.bodyFont.size,\n    boxWidth: (ctx, opts) => opts.bodyFont.size,\n    multiKeyBackground: '#fff',\n    displayColors: true,\n    boxPadding: 0,\n    borderColor: 'rgba(0,0,0,0)',\n    borderWidth: 0,\n    animation: {\n      duration: 400,\n      easing: 'easeOutQuart',\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n      },\n      opacity: {\n        easing: 'linear',\n        duration: 200\n      }\n    },\n    callbacks: {\n      beforeTitle: noop,\n      title(tooltipItems) {\n        if (tooltipItems.length > 0) {\n          const item = tooltipItems[0];\n          const labels = item.chart.data.labels;\n          const labelCount = labels ? labels.length : 0;\n          if (this && this.options && this.options.mode === 'dataset') {\n            return item.dataset.label || '';\n          } else if (item.label) {\n            return item.label;\n          } else if (labelCount > 0 && item.dataIndex < labelCount) {\n            return labels[item.dataIndex];\n          }\n        }\n        return '';\n      },\n      afterTitle: noop,\n      beforeBody: noop,\n      beforeLabel: noop,\n      label(tooltipItem) {\n        if (this && this.options && this.options.mode === 'dataset') {\n          return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n        }\n        let label = tooltipItem.dataset.label || '';\n        if (label) {\n          label += ': ';\n        }\n        const value = tooltipItem.formattedValue;\n        if (!isNullOrUndef(value)) {\n          label += value;\n        }\n        return label;\n      },\n      labelColor(tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n          borderColor: options.borderColor,\n          backgroundColor: options.backgroundColor,\n          borderWidth: options.borderWidth,\n          borderDash: options.borderDash,\n          borderDashOffset: options.borderDashOffset,\n          borderRadius: 0,\n        };\n      },\n      labelTextColor() {\n        return this.options.bodyColor;\n      },\n      labelPointStyle(tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n          pointStyle: options.pointStyle,\n          rotation: options.rotation,\n        };\n      },\n      afterLabel: noop,\n      afterBody: noop,\n      beforeFooter: noop,\n      footer: noop,\n      afterFooter: noop\n    }\n  },\n  defaultRoutes: {\n    bodyFont: 'font',\n    footerFont: 'font',\n    titleFont: 'font'\n  },\n  descriptors: {\n    _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n    _indexable: false,\n    callbacks: {\n      _scriptable: false,\n      _indexable: false,\n    },\n    animation: {\n      _fallback: false\n    },\n    animations: {\n      _fallback: 'animation'\n    }\n  },\n  additionalOptionScopes: ['interaction']\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n  if (typeof raw === 'string') {\n    index = labels.push(raw) - 1;\n    addedLabels.unshift({index, label: raw});\n  } else if (isNaN(raw)) {\n    index = null;\n  }\n  return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n  const first = labels.indexOf(raw);\n  if (first === -1) {\n    return addIfString(labels, raw, index, addedLabels);\n  }\n  const last = labels.lastIndexOf(raw);\n  return first !== last ? index : first;\n}\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\nclass CategoryScale extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this._startValue = undefined;\n    this._valueRange = 0;\n    this._addedLabels = [];\n  }\n  init(scaleOptions) {\n    const added = this._addedLabels;\n    if (added.length) {\n      const labels = this.getLabels();\n      for (const {index, label} of added) {\n        if (labels[index] === label) {\n          labels.splice(index, 1);\n        }\n      }\n      this._addedLabels = [];\n    }\n    super.init(scaleOptions);\n  }\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    const labels = this.getLabels();\n    index = isFinite(index) && labels[index] === raw ? index\n      : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n    return validIndex(index, labels.length - 1);\n  }\n  determineDataLimits() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this.getMinMax(true);\n    if (this.options.bounds === 'ticks') {\n      if (!minDefined) {\n        min = 0;\n      }\n      if (!maxDefined) {\n        max = this.getLabels().length - 1;\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n  buildTicks() {\n    const min = this.min;\n    const max = this.max;\n    const offset = this.options.offset;\n    const ticks = [];\n    let labels = this.getLabels();\n    labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n    this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n    this._startValue = this.min - (offset ? 0.5 : 0);\n    for (let value = min; value <= max; value++) {\n      ticks.push({value});\n    }\n    return ticks;\n  }\n  getLabelForValue(value) {\n    const labels = this.getLabels();\n    if (value >= 0 && value < labels.length) {\n      return labels[value];\n    }\n    return value;\n  }\n  configure() {\n    super.configure();\n    if (!this.isHorizontal()) {\n      this._reversePixels = !this._reversePixels;\n    }\n  }\n  getPixelForValue(value) {\n    if (typeof value !== 'number') {\n      value = this.parse(value);\n    }\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n  getValueForPixel(pixel) {\n    return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n  }\n  getBasePixel() {\n    return this.bottom;\n  }\n}\nCategoryScale.id = 'category';\nCategoryScale.defaults = {\n  ticks: {\n    callback: CategoryScale.prototype.getLabelForValue\n  }\n};\n\nfunction generateTicks$1(generationOptions, dataRange) {\n  const ticks = [];\n  const MIN_SPACING = 1e-14;\n  const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n  const unit = step || 1;\n  const maxSpaces = maxTicks - 1;\n  const {min: rmin, max: rmax} = dataRange;\n  const minDefined = !isNullOrUndef(min);\n  const maxDefined = !isNullOrUndef(max);\n  const countDefined = !isNullOrUndef(count);\n  const minSpacing = (rmax - rmin) / (maxDigits + 1);\n  let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n  let factor, niceMin, niceMax, numSpaces;\n  if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n    return [{value: rmin}, {value: rmax}];\n  }\n  numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n  if (numSpaces > maxSpaces) {\n    spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n  }\n  if (!isNullOrUndef(precision)) {\n    factor = Math.pow(10, precision);\n    spacing = Math.ceil(spacing * factor) / factor;\n  }\n  if (bounds === 'ticks') {\n    niceMin = Math.floor(rmin / spacing) * spacing;\n    niceMax = Math.ceil(rmax / spacing) * spacing;\n  } else {\n    niceMin = rmin;\n    niceMax = rmax;\n  }\n  if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n    numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n    spacing = (max - min) / numSpaces;\n    niceMin = min;\n    niceMax = max;\n  } else if (countDefined) {\n    niceMin = minDefined ? min : niceMin;\n    niceMax = maxDefined ? max : niceMax;\n    numSpaces = count - 1;\n    spacing = (niceMax - niceMin) / numSpaces;\n  } else {\n    numSpaces = (niceMax - niceMin) / spacing;\n    if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n      numSpaces = Math.round(numSpaces);\n    } else {\n      numSpaces = Math.ceil(numSpaces);\n    }\n  }\n  const decimalPlaces = Math.max(\n    _decimalPlaces(spacing),\n    _decimalPlaces(niceMin)\n  );\n  factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n  niceMin = Math.round(niceMin * factor) / factor;\n  niceMax = Math.round(niceMax * factor) / factor;\n  let j = 0;\n  if (minDefined) {\n    if (includeBounds && niceMin !== min) {\n      ticks.push({value: min});\n      if (niceMin < min) {\n        j++;\n      }\n      if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n        j++;\n      }\n    } else if (niceMin < min) {\n      j++;\n    }\n  }\n  for (; j < numSpaces; ++j) {\n    ticks.push({value: Math.round((niceMin + j * spacing) * factor) / factor});\n  }\n  if (maxDefined && includeBounds && niceMax !== max) {\n    if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n      ticks[ticks.length - 1].value = max;\n    } else {\n      ticks.push({value: max});\n    }\n  } else if (!maxDefined || niceMax === max) {\n    ticks.push({value: niceMax});\n  }\n  return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n  const rad = toRadians(minRotation);\n  const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n  const length = 0.75 * minSpacing * ('' + value).length;\n  return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this.start = undefined;\n    this.end = undefined;\n    this._startValue = undefined;\n    this._endValue = undefined;\n    this._valueRange = 0;\n  }\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n      return null;\n    }\n    return +raw;\n  }\n  handleTickRangeOptions() {\n    const {beginAtZero} = this.options;\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this;\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n    if (beginAtZero) {\n      const minSign = sign(min);\n      const maxSign = sign(max);\n      if (minSign < 0 && maxSign < 0) {\n        setMax(0);\n      } else if (minSign > 0 && maxSign > 0) {\n        setMin(0);\n      }\n    }\n    if (min === max) {\n      let offset = 1;\n      if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) {\n        offset = Math.abs(max * 0.05);\n      }\n      setMax(max + offset);\n      if (!beginAtZero) {\n        setMin(min - offset);\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n  getTickLimit() {\n    const tickOpts = this.options.ticks;\n    let {maxTicksLimit, stepSize} = tickOpts;\n    let maxTicks;\n    if (stepSize) {\n      maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n      if (maxTicks > 1000) {\n        console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n        maxTicks = 1000;\n      }\n    } else {\n      maxTicks = this.computeTickLimit();\n      maxTicksLimit = maxTicksLimit || 11;\n    }\n    if (maxTicksLimit) {\n      maxTicks = Math.min(maxTicksLimit, maxTicks);\n    }\n    return maxTicks;\n  }\n  computeTickLimit() {\n    return Number.POSITIVE_INFINITY;\n  }\n  buildTicks() {\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n    let maxTicks = this.getTickLimit();\n    maxTicks = Math.max(2, maxTicks);\n    const numericGeneratorOptions = {\n      maxTicks,\n      bounds: opts.bounds,\n      min: opts.min,\n      max: opts.max,\n      precision: tickOpts.precision,\n      step: tickOpts.stepSize,\n      count: tickOpts.count,\n      maxDigits: this._maxDigits(),\n      horizontal: this.isHorizontal(),\n      minRotation: tickOpts.minRotation || 0,\n      includeBounds: tickOpts.includeBounds !== false\n    };\n    const dataRange = this._range || this;\n    const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n    if (opts.reverse) {\n      ticks.reverse();\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n    return ticks;\n  }\n  configure() {\n    const ticks = this.ticks;\n    let start = this.min;\n    let end = this.max;\n    super.configure();\n    if (this.options.offset && ticks.length) {\n      const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n      start -= offset;\n      end += offset;\n    }\n    this._startValue = start;\n    this._endValue = end;\n    this._valueRange = end - start;\n  }\n  getLabelForValue(value) {\n    return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n}\n\nclass LinearScale extends LinearScaleBase {\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n    this.min = isNumberFinite(min) ? min : 0;\n    this.max = isNumberFinite(max) ? max : 1;\n    this.handleTickRangeOptions();\n  }\n  computeTickLimit() {\n    const horizontal = this.isHorizontal();\n    const length = horizontal ? this.width : this.height;\n    const minRotation = toRadians(this.options.ticks.minRotation);\n    const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n    const tickFont = this._resolveTickFontOptions(0);\n    return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n  }\n  getPixelForValue(value) {\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n  getValueForPixel(pixel) {\n    return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n  }\n}\nLinearScale.id = 'linear';\nLinearScale.defaults = {\n  ticks: {\n    callback: Ticks.formatters.numeric\n  }\n};\n\nfunction isMajor(tickVal) {\n  const remain = tickVal / (Math.pow(10, Math.floor(log10(tickVal))));\n  return remain === 1;\n}\nfunction generateTicks(generationOptions, dataRange) {\n  const endExp = Math.floor(log10(dataRange.max));\n  const endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n  const ticks = [];\n  let tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\n  let exp = Math.floor(log10(tickVal));\n  let significand = Math.floor(tickVal / Math.pow(10, exp));\n  let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n  do {\n    ticks.push({value: tickVal, major: isMajor(tickVal)});\n    ++significand;\n    if (significand === 10) {\n      significand = 1;\n      ++exp;\n      precision = exp >= 0 ? 1 : precision;\n    }\n    tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n  } while (exp < endExp || (exp === endExp && significand < endSignificand));\n  const lastTick = finiteOrDefault(generationOptions.max, tickVal);\n  ticks.push({value: lastTick, major: isMajor(tickVal)});\n  return ticks;\n}\nclass LogarithmicScale extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this.start = undefined;\n    this.end = undefined;\n    this._startValue = undefined;\n    this._valueRange = 0;\n  }\n  parse(raw, index) {\n    const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n    if (value === 0) {\n      this._zero = true;\n      return undefined;\n    }\n    return isNumberFinite(value) && value > 0 ? value : null;\n  }\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n    this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n    this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n    if (this.options.beginAtZero) {\n      this._zero = true;\n    }\n    this.handleTickRangeOptions();\n  }\n  handleTickRangeOptions() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let min = this.min;\n    let max = this.max;\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n    const exp = (v, m) => Math.pow(10, Math.floor(log10(v)) + m);\n    if (min === max) {\n      if (min <= 0) {\n        setMin(1);\n        setMax(10);\n      } else {\n        setMin(exp(min, -1));\n        setMax(exp(max, +1));\n      }\n    }\n    if (min <= 0) {\n      setMin(exp(max, -1));\n    }\n    if (max <= 0) {\n      setMax(exp(min, +1));\n    }\n    if (this._zero && this.min !== this._suggestedMin && min === exp(this.min, 0)) {\n      setMin(exp(min, -1));\n    }\n    this.min = min;\n    this.max = max;\n  }\n  buildTicks() {\n    const opts = this.options;\n    const generationOptions = {\n      min: this._userMin,\n      max: this._userMax\n    };\n    const ticks = generateTicks(generationOptions, this);\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n    if (opts.reverse) {\n      ticks.reverse();\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n    return ticks;\n  }\n  getLabelForValue(value) {\n    return value === undefined\n      ? '0'\n      : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n  configure() {\n    const start = this.min;\n    super.configure();\n    this._startValue = log10(start);\n    this._valueRange = log10(this.max) - log10(start);\n  }\n  getPixelForValue(value) {\n    if (value === undefined || value === 0) {\n      value = this.min;\n    }\n    if (value === null || isNaN(value)) {\n      return NaN;\n    }\n    return this.getPixelForDecimal(value === this.min\n      ? 0\n      : (log10(value) - this._startValue) / this._valueRange);\n  }\n  getValueForPixel(pixel) {\n    const decimal = this.getDecimalForPixel(pixel);\n    return Math.pow(10, this._startValue + decimal * this._valueRange);\n  }\n}\nLogarithmicScale.id = 'logarithmic';\nLogarithmicScale.defaults = {\n  ticks: {\n    callback: Ticks.formatters.logarithmic,\n    major: {\n      enabled: true\n    }\n  }\n};\n\nfunction getTickBackdropHeight(opts) {\n  const tickOpts = opts.ticks;\n  if (tickOpts.display && opts.display) {\n    const padding = toPadding(tickOpts.backdropPadding);\n    return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n  }\n  return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n  label = isArray(label) ? label : [label];\n  return {\n    w: _longestText(ctx, font.string, label),\n    h: label.length * font.lineHeight\n  };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n  if (angle === min || angle === max) {\n    return {\n      start: pos - (size / 2),\n      end: pos + (size / 2)\n    };\n  } else if (angle < min || angle > max) {\n    return {\n      start: pos - size,\n      end: pos\n    };\n  }\n  return {\n    start: pos,\n    end: pos + size\n  };\n}\nfunction fitWithPointLabels(scale) {\n  const orig = {\n    l: scale.left + scale._padding.left,\n    r: scale.right - scale._padding.right,\n    t: scale.top + scale._padding.top,\n    b: scale.bottom - scale._padding.bottom\n  };\n  const limits = Object.assign({}, orig);\n  const labelSizes = [];\n  const padding = [];\n  const valueCount = scale._pointLabels.length;\n  const pointLabelOpts = scale.options.pointLabels;\n  const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n  for (let i = 0; i < valueCount; i++) {\n    const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n    padding[i] = opts.padding;\n    const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n    const plFont = toFont(opts.font);\n    const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n    labelSizes[i] = textSize;\n    const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n    const angle = Math.round(toDegrees(angleRadians));\n    const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n    const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n    updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n  }\n  scale.setCenterPoint(\n    orig.l - limits.l,\n    limits.r - orig.r,\n    orig.t - limits.t,\n    limits.b - orig.b\n  );\n  scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n  const sin = Math.abs(Math.sin(angle));\n  const cos = Math.abs(Math.cos(angle));\n  let x = 0;\n  let y = 0;\n  if (hLimits.start < orig.l) {\n    x = (orig.l - hLimits.start) / sin;\n    limits.l = Math.min(limits.l, orig.l - x);\n  } else if (hLimits.end > orig.r) {\n    x = (hLimits.end - orig.r) / sin;\n    limits.r = Math.max(limits.r, orig.r + x);\n  }\n  if (vLimits.start < orig.t) {\n    y = (orig.t - vLimits.start) / cos;\n    limits.t = Math.min(limits.t, orig.t - y);\n  } else if (vLimits.end > orig.b) {\n    y = (vLimits.end - orig.b) / cos;\n    limits.b = Math.max(limits.b, orig.b + y);\n  }\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n  const items = [];\n  const valueCount = scale._pointLabels.length;\n  const opts = scale.options;\n  const extra = getTickBackdropHeight(opts) / 2;\n  const outerDistance = scale.drawingArea;\n  const additionalAngle = opts.pointLabels.centerPointLabels ? PI / valueCount : 0;\n  for (let i = 0; i < valueCount; i++) {\n    const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle);\n    const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n    const size = labelSizes[i];\n    const y = yForAngle(pointLabelPosition.y, size.h, angle);\n    const textAlign = getTextAlignForAngle(angle);\n    const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n    items.push({\n      x: pointLabelPosition.x,\n      y,\n      textAlign,\n      left,\n      top: y,\n      right: left + size.w,\n      bottom: y + size.h\n    });\n  }\n  return items;\n}\nfunction getTextAlignForAngle(angle) {\n  if (angle === 0 || angle === 180) {\n    return 'center';\n  } else if (angle < 180) {\n    return 'left';\n  }\n  return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n  if (align === 'right') {\n    x -= w;\n  } else if (align === 'center') {\n    x -= (w / 2);\n  }\n  return x;\n}\nfunction yForAngle(y, h, angle) {\n  if (angle === 90 || angle === 270) {\n    y -= (h / 2);\n  } else if (angle > 270 || angle < 90) {\n    y -= h;\n  }\n  return y;\n}\nfunction drawPointLabels(scale, labelCount) {\n  const {ctx, options: {pointLabels}} = scale;\n  for (let i = labelCount - 1; i >= 0; i--) {\n    const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n    const plFont = toFont(optsAtIndex.font);\n    const {x, y, textAlign, left, top, right, bottom} = scale._pointLabelItems[i];\n    const {backdropColor} = optsAtIndex;\n    if (!isNullOrUndef(backdropColor)) {\n      const borderRadius = toTRBLCorners(optsAtIndex.borderRadius);\n      const padding = toPadding(optsAtIndex.backdropPadding);\n      ctx.fillStyle = backdropColor;\n      const backdropLeft = left - padding.left;\n      const backdropTop = top - padding.top;\n      const backdropWidth = right - left + padding.width;\n      const backdropHeight = bottom - top + padding.height;\n      if (Object.values(borderRadius).some(v => v !== 0)) {\n        ctx.beginPath();\n        addRoundedRectPath(ctx, {\n          x: backdropLeft,\n          y: backdropTop,\n          w: backdropWidth,\n          h: backdropHeight,\n          radius: borderRadius,\n        });\n        ctx.fill();\n      } else {\n        ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n      }\n    }\n    renderText(\n      ctx,\n      scale._pointLabels[i],\n      x,\n      y + (plFont.lineHeight / 2),\n      plFont,\n      {\n        color: optsAtIndex.color,\n        textAlign: textAlign,\n        textBaseline: 'middle'\n      }\n    );\n  }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n  const {ctx} = scale;\n  if (circular) {\n    ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n  } else {\n    let pointPosition = scale.getPointPosition(0, radius);\n    ctx.moveTo(pointPosition.x, pointPosition.y);\n    for (let i = 1; i < labelCount; i++) {\n      pointPosition = scale.getPointPosition(i, radius);\n      ctx.lineTo(pointPosition.x, pointPosition.y);\n    }\n  }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount) {\n  const ctx = scale.ctx;\n  const circular = gridLineOpts.circular;\n  const {color, lineWidth} = gridLineOpts;\n  if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n    return;\n  }\n  ctx.save();\n  ctx.strokeStyle = color;\n  ctx.lineWidth = lineWidth;\n  ctx.setLineDash(gridLineOpts.borderDash);\n  ctx.lineDashOffset = gridLineOpts.borderDashOffset;\n  ctx.beginPath();\n  pathRadiusLine(scale, radius, circular, labelCount);\n  ctx.closePath();\n  ctx.stroke();\n  ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n  return createContext(parent, {\n    label,\n    index,\n    type: 'pointLabel'\n  });\n}\nclass RadialLinearScale extends LinearScaleBase {\n  constructor(cfg) {\n    super(cfg);\n    this.xCenter = undefined;\n    this.yCenter = undefined;\n    this.drawingArea = undefined;\n    this._pointLabels = [];\n    this._pointLabelItems = [];\n  }\n  setDimensions() {\n    const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n    const w = this.width = this.maxWidth - padding.width;\n    const h = this.height = this.maxHeight - padding.height;\n    this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n    this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n    this.drawingArea = Math.floor(Math.min(w, h) / 2);\n  }\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(false);\n    this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n    this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n    this.handleTickRangeOptions();\n  }\n  computeTickLimit() {\n    return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n  }\n  generateTickLabels(ticks) {\n    LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n    this._pointLabels = this.getLabels()\n      .map((value, index) => {\n        const label = callback(this.options.pointLabels.callback, [value, index], this);\n        return label || label === 0 ? label : '';\n      })\n      .filter((v, i) => this.chart.getDataVisibility(i));\n  }\n  fit() {\n    const opts = this.options;\n    if (opts.display && opts.pointLabels.display) {\n      fitWithPointLabels(this);\n    } else {\n      this.setCenterPoint(0, 0, 0, 0);\n    }\n  }\n  setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n    this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n    this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n    this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n  }\n  getIndexAngle(index) {\n    const angleMultiplier = TAU / (this._pointLabels.length || 1);\n    const startAngle = this.options.startAngle || 0;\n    return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n  }\n  getDistanceFromCenterForValue(value) {\n    if (isNullOrUndef(value)) {\n      return NaN;\n    }\n    const scalingFactor = this.drawingArea / (this.max - this.min);\n    if (this.options.reverse) {\n      return (this.max - value) * scalingFactor;\n    }\n    return (value - this.min) * scalingFactor;\n  }\n  getValueForDistanceFromCenter(distance) {\n    if (isNullOrUndef(distance)) {\n      return NaN;\n    }\n    const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n    return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n  }\n  getPointLabelContext(index) {\n    const pointLabels = this._pointLabels || [];\n    if (index >= 0 && index < pointLabels.length) {\n      const pointLabel = pointLabels[index];\n      return createPointLabelContext(this.getContext(), index, pointLabel);\n    }\n  }\n  getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n    const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n    return {\n      x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n      y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n      angle\n    };\n  }\n  getPointPositionForValue(index, value) {\n    return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n  }\n  getBasePosition(index) {\n    return this.getPointPositionForValue(index || 0, this.getBaseValue());\n  }\n  getPointLabelPosition(index) {\n    const {left, top, right, bottom} = this._pointLabelItems[index];\n    return {\n      left,\n      top,\n      right,\n      bottom,\n    };\n  }\n  drawBackground() {\n    const {backgroundColor, grid: {circular}} = this.options;\n    if (backgroundColor) {\n      const ctx = this.ctx;\n      ctx.save();\n      ctx.beginPath();\n      pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n      ctx.closePath();\n      ctx.fillStyle = backgroundColor;\n      ctx.fill();\n      ctx.restore();\n    }\n  }\n  drawGrid() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const {angleLines, grid} = opts;\n    const labelCount = this._pointLabels.length;\n    let i, offset, position;\n    if (opts.pointLabels.display) {\n      drawPointLabels(this, labelCount);\n    }\n    if (grid.display) {\n      this.ticks.forEach((tick, index) => {\n        if (index !== 0) {\n          offset = this.getDistanceFromCenterForValue(tick.value);\n          const optsAtIndex = grid.setContext(this.getContext(index - 1));\n          drawRadiusLine(this, optsAtIndex, offset, labelCount);\n        }\n      });\n    }\n    if (angleLines.display) {\n      ctx.save();\n      for (i = labelCount - 1; i >= 0; i--) {\n        const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n        const {color, lineWidth} = optsAtIndex;\n        if (!lineWidth || !color) {\n          continue;\n        }\n        ctx.lineWidth = lineWidth;\n        ctx.strokeStyle = color;\n        ctx.setLineDash(optsAtIndex.borderDash);\n        ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n        offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n        position = this.getPointPosition(i, offset);\n        ctx.beginPath();\n        ctx.moveTo(this.xCenter, this.yCenter);\n        ctx.lineTo(position.x, position.y);\n        ctx.stroke();\n      }\n      ctx.restore();\n    }\n  }\n  drawBorder() {}\n  drawLabels() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n    if (!tickOpts.display) {\n      return;\n    }\n    const startAngle = this.getIndexAngle(0);\n    let offset, width;\n    ctx.save();\n    ctx.translate(this.xCenter, this.yCenter);\n    ctx.rotate(startAngle);\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'middle';\n    this.ticks.forEach((tick, index) => {\n      if (index === 0 && !opts.reverse) {\n        return;\n      }\n      const optsAtIndex = tickOpts.setContext(this.getContext(index));\n      const tickFont = toFont(optsAtIndex.font);\n      offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n      if (optsAtIndex.showLabelBackdrop) {\n        ctx.font = tickFont.string;\n        width = ctx.measureText(tick.label).width;\n        ctx.fillStyle = optsAtIndex.backdropColor;\n        const padding = toPadding(optsAtIndex.backdropPadding);\n        ctx.fillRect(\n          -width / 2 - padding.left,\n          -offset - tickFont.size / 2 - padding.top,\n          width + padding.width,\n          tickFont.size + padding.height\n        );\n      }\n      renderText(ctx, tick.label, 0, -offset, tickFont, {\n        color: optsAtIndex.color,\n      });\n    });\n    ctx.restore();\n  }\n  drawTitle() {}\n}\nRadialLinearScale.id = 'radialLinear';\nRadialLinearScale.defaults = {\n  display: true,\n  animate: true,\n  position: 'chartArea',\n  angleLines: {\n    display: true,\n    lineWidth: 1,\n    borderDash: [],\n    borderDashOffset: 0.0\n  },\n  grid: {\n    circular: false\n  },\n  startAngle: 0,\n  ticks: {\n    showLabelBackdrop: true,\n    callback: Ticks.formatters.numeric\n  },\n  pointLabels: {\n    backdropColor: undefined,\n    backdropPadding: 2,\n    display: true,\n    font: {\n      size: 10\n    },\n    callback(label) {\n      return label;\n    },\n    padding: 5,\n    centerPointLabels: false\n  }\n};\nRadialLinearScale.defaultRoutes = {\n  'angleLines.color': 'borderColor',\n  'pointLabels.color': 'color',\n  'ticks.color': 'color'\n};\nRadialLinearScale.descriptors = {\n  angleLines: {\n    _fallback: 'grid'\n  }\n};\n\nconst INTERVALS = {\n  millisecond: {common: true, size: 1, steps: 1000},\n  second: {common: true, size: 1000, steps: 60},\n  minute: {common: true, size: 60000, steps: 60},\n  hour: {common: true, size: 3600000, steps: 24},\n  day: {common: true, size: 86400000, steps: 30},\n  week: {common: false, size: 604800000, steps: 4},\n  month: {common: true, size: 2.628e9, steps: 12},\n  quarter: {common: false, size: 7.884e9, steps: 4},\n  year: {common: true, size: 3.154e10}\n};\nconst UNITS = (Object.keys(INTERVALS));\nfunction sorter(a, b) {\n  return a - b;\n}\nfunction parse(scale, input) {\n  if (isNullOrUndef(input)) {\n    return null;\n  }\n  const adapter = scale._adapter;\n  const {parser, round, isoWeekday} = scale._parseOpts;\n  let value = input;\n  if (typeof parser === 'function') {\n    value = parser(value);\n  }\n  if (!isNumberFinite(value)) {\n    value = typeof parser === 'string'\n      ? adapter.parse(value, parser)\n      : adapter.parse(value);\n  }\n  if (value === null) {\n    return null;\n  }\n  if (round) {\n    value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n      ? adapter.startOf(value, 'isoWeek', isoWeekday)\n      : adapter.startOf(value, round);\n  }\n  return +value;\n}\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n  const ilen = UNITS.length;\n  for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n    const interval = INTERVALS[UNITS[i]];\n    const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n    if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n      return UNITS[i];\n    }\n  }\n  return UNITS[ilen - 1];\n}\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n  for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n    const unit = UNITS[i];\n    if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n      return unit;\n    }\n  }\n  return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\nfunction determineMajorUnit(unit) {\n  for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n    if (INTERVALS[UNITS[i]].common) {\n      return UNITS[i];\n    }\n  }\n}\nfunction addTick(ticks, time, timestamps) {\n  if (!timestamps) {\n    ticks[time] = true;\n  } else if (timestamps.length) {\n    const {lo, hi} = _lookup(timestamps, time);\n    const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n    ticks[timestamp] = true;\n  }\n}\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n  const adapter = scale._adapter;\n  const first = +adapter.startOf(ticks[0].value, majorUnit);\n  const last = ticks[ticks.length - 1].value;\n  let major, index;\n  for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n    index = map[major];\n    if (index >= 0) {\n      ticks[index].major = true;\n    }\n  }\n  return ticks;\n}\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n  const ticks = [];\n  const map = {};\n  const ilen = values.length;\n  let i, value;\n  for (i = 0; i < ilen; ++i) {\n    value = values[i];\n    map[value] = i;\n    ticks.push({\n      value,\n      major: false\n    });\n  }\n  return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n  constructor(props) {\n    super(props);\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n    this._unit = 'day';\n    this._majorUnit = undefined;\n    this._offsets = {};\n    this._normalized = false;\n    this._parseOpts = undefined;\n  }\n  init(scaleOpts, opts) {\n    const time = scaleOpts.time || (scaleOpts.time = {});\n    const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n    adapter.init(opts);\n    mergeIf(time.displayFormats, adapter.formats());\n    this._parseOpts = {\n      parser: time.parser,\n      round: time.round,\n      isoWeekday: time.isoWeekday\n    };\n    super.init(scaleOpts);\n    this._normalized = opts.normalized;\n  }\n  parse(raw, index) {\n    if (raw === undefined) {\n      return null;\n    }\n    return parse(this, raw);\n  }\n  beforeLayout() {\n    super.beforeLayout();\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n  }\n  determineDataLimits() {\n    const options = this.options;\n    const adapter = this._adapter;\n    const unit = options.time.unit || 'day';\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n    function _applyBounds(bounds) {\n      if (!minDefined && !isNaN(bounds.min)) {\n        min = Math.min(min, bounds.min);\n      }\n      if (!maxDefined && !isNaN(bounds.max)) {\n        max = Math.max(max, bounds.max);\n      }\n    }\n    if (!minDefined || !maxDefined) {\n      _applyBounds(this._getLabelBounds());\n      if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n        _applyBounds(this.getMinMax(false));\n      }\n    }\n    min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n    max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n    this.min = Math.min(min, max - 1);\n    this.max = Math.max(min + 1, max);\n  }\n  _getLabelBounds() {\n    const arr = this.getLabelTimestamps();\n    let min = Number.POSITIVE_INFINITY;\n    let max = Number.NEGATIVE_INFINITY;\n    if (arr.length) {\n      min = arr[0];\n      max = arr[arr.length - 1];\n    }\n    return {min, max};\n  }\n  buildTicks() {\n    const options = this.options;\n    const timeOpts = options.time;\n    const tickOpts = options.ticks;\n    const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n    if (options.bounds === 'ticks' && timestamps.length) {\n      this.min = this._userMin || timestamps[0];\n      this.max = this._userMax || timestamps[timestamps.length - 1];\n    }\n    const min = this.min;\n    const max = this.max;\n    const ticks = _filterBetween(timestamps, min, max);\n    this._unit = timeOpts.unit || (tickOpts.autoSkip\n      ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n      : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n    this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n      : determineMajorUnit(this._unit);\n    this.initOffsets(timestamps);\n    if (options.reverse) {\n      ticks.reverse();\n    }\n    return ticksFromTimestamps(this, ticks, this._majorUnit);\n  }\n  afterAutoSkip() {\n    if (this.options.offsetAfterAutoskip) {\n      this.initOffsets(this.ticks.map(tick => +tick.value));\n    }\n  }\n  initOffsets(timestamps) {\n    let start = 0;\n    let end = 0;\n    let first, last;\n    if (this.options.offset && timestamps.length) {\n      first = this.getDecimalForValue(timestamps[0]);\n      if (timestamps.length === 1) {\n        start = 1 - first;\n      } else {\n        start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n      }\n      last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n      if (timestamps.length === 1) {\n        end = last;\n      } else {\n        end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n      }\n    }\n    const limit = timestamps.length < 3 ? 0.5 : 0.25;\n    start = _limitValue(start, 0, limit);\n    end = _limitValue(end, 0, limit);\n    this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n  }\n  _generate() {\n    const adapter = this._adapter;\n    const min = this.min;\n    const max = this.max;\n    const options = this.options;\n    const timeOpts = options.time;\n    const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n    const stepSize = valueOrDefault(timeOpts.stepSize, 1);\n    const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n    const hasWeekday = isNumber(weekday) || weekday === true;\n    const ticks = {};\n    let first = min;\n    let time, count;\n    if (hasWeekday) {\n      first = +adapter.startOf(first, 'isoWeek', weekday);\n    }\n    first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n    if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n      throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n    }\n    const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n    for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n      addTick(ticks, time, timestamps);\n    }\n    if (time === max || options.bounds === 'ticks' || count === 1) {\n      addTick(ticks, time, timestamps);\n    }\n    return Object.keys(ticks).sort((a, b) => a - b).map(x => +x);\n  }\n  getLabelForValue(value) {\n    const adapter = this._adapter;\n    const timeOpts = this.options.time;\n    if (timeOpts.tooltipFormat) {\n      return adapter.format(value, timeOpts.tooltipFormat);\n    }\n    return adapter.format(value, timeOpts.displayFormats.datetime);\n  }\n  _tickFormatFunction(time, index, ticks, format) {\n    const options = this.options;\n    const formats = options.time.displayFormats;\n    const unit = this._unit;\n    const majorUnit = this._majorUnit;\n    const minorFormat = unit && formats[unit];\n    const majorFormat = majorUnit && formats[majorUnit];\n    const tick = ticks[index];\n    const major = majorUnit && majorFormat && tick && tick.major;\n    const label = this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n    const formatter = options.ticks.callback;\n    return formatter ? callback(formatter, [label, index, ticks], this) : label;\n  }\n  generateTickLabels(ticks) {\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      tick.label = this._tickFormatFunction(tick.value, i, ticks);\n    }\n  }\n  getDecimalForValue(value) {\n    return value === null ? NaN : (value - this.min) / (this.max - this.min);\n  }\n  getPixelForValue(value) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForValue(value);\n    return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n  }\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return this.min + pos * (this.max - this.min);\n  }\n  _getLabelSize(label) {\n    const ticksOpts = this.options.ticks;\n    const tickLabelWidth = this.ctx.measureText(label).width;\n    const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n    const cosRotation = Math.cos(angle);\n    const sinRotation = Math.sin(angle);\n    const tickFontSize = this._resolveTickFontOptions(0).size;\n    return {\n      w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n      h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n    };\n  }\n  _getLabelCapacity(exampleTime) {\n    const timeOpts = this.options.time;\n    const displayFormats = timeOpts.displayFormats;\n    const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n    const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n    const size = this._getLabelSize(exampleLabel);\n    const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n    return capacity > 0 ? capacity : 1;\n  }\n  getDataTimestamps() {\n    let timestamps = this._cache.data || [];\n    let i, ilen;\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const metas = this.getMatchingVisibleMetas();\n    if (this._normalized && metas.length) {\n      return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n    }\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n    }\n    return (this._cache.data = this.normalize(timestamps));\n  }\n  getLabelTimestamps() {\n    const timestamps = this._cache.labels || [];\n    let i, ilen;\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const labels = this.getLabels();\n    for (i = 0, ilen = labels.length; i < ilen; ++i) {\n      timestamps.push(parse(this, labels[i]));\n    }\n    return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n  }\n  normalize(values) {\n    return _arrayUnique(values.sort(sorter));\n  }\n}\nTimeScale.id = 'time';\nTimeScale.defaults = {\n  bounds: 'data',\n  adapters: {},\n  time: {\n    parser: false,\n    unit: false,\n    round: false,\n    isoWeekday: false,\n    minUnit: 'millisecond',\n    displayFormats: {}\n  },\n  ticks: {\n    source: 'auto',\n    major: {\n      enabled: false\n    }\n  }\n};\n\nfunction interpolate(table, val, reverse) {\n  let lo = 0;\n  let hi = table.length - 1;\n  let prevSource, nextSource, prevTarget, nextTarget;\n  if (reverse) {\n    if (val >= table[lo].pos && val <= table[hi].pos) {\n      ({lo, hi} = _lookupByKey(table, 'pos', val));\n    }\n    ({pos: prevSource, time: prevTarget} = table[lo]);\n    ({pos: nextSource, time: nextTarget} = table[hi]);\n  } else {\n    if (val >= table[lo].time && val <= table[hi].time) {\n      ({lo, hi} = _lookupByKey(table, 'time', val));\n    }\n    ({time: prevSource, pos: prevTarget} = table[lo]);\n    ({time: nextSource, pos: nextTarget} = table[hi]);\n  }\n  const span = nextSource - prevSource;\n  return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n  constructor(props) {\n    super(props);\n    this._table = [];\n    this._minPos = undefined;\n    this._tableRange = undefined;\n  }\n  initOffsets() {\n    const timestamps = this._getTimestampsForTable();\n    const table = this._table = this.buildLookupTable(timestamps);\n    this._minPos = interpolate(table, this.min);\n    this._tableRange = interpolate(table, this.max) - this._minPos;\n    super.initOffsets(timestamps);\n  }\n  buildLookupTable(timestamps) {\n    const {min, max} = this;\n    const items = [];\n    const table = [];\n    let i, ilen, prev, curr, next;\n    for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n      curr = timestamps[i];\n      if (curr >= min && curr <= max) {\n        items.push(curr);\n      }\n    }\n    if (items.length < 2) {\n      return [\n        {time: min, pos: 0},\n        {time: max, pos: 1}\n      ];\n    }\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      next = items[i + 1];\n      prev = items[i - 1];\n      curr = items[i];\n      if (Math.round((next + prev) / 2) !== curr) {\n        table.push({time: curr, pos: i / (ilen - 1)});\n      }\n    }\n    return table;\n  }\n  _getTimestampsForTable() {\n    let timestamps = this._cache.all || [];\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const data = this.getDataTimestamps();\n    const label = this.getLabelTimestamps();\n    if (data.length && label.length) {\n      timestamps = this.normalize(data.concat(label));\n    } else {\n      timestamps = data.length ? data : label;\n    }\n    timestamps = this._cache.all = timestamps;\n    return timestamps;\n  }\n  getDecimalForValue(value) {\n    return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n  }\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n  }\n}\nTimeSeriesScale.id = 'timeseries';\nTimeSeriesScale.defaults = TimeScale.defaults;\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n  controllers,\n  elements,\n  plugins,\n  scales,\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, elements, layouts, plugins, registerables, registry, scales };\n", "/*!\n * Chart.js v3.9.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nfunction noop() {}\nconst uid = (function() {\n  let id = 0;\n  return function() {\n    return id++;\n  };\n}());\nfunction isNullOrUndef(value) {\n  return value === null || typeof value === 'undefined';\n}\nfunction isArray(value) {\n  if (Array.isArray && Array.isArray(value)) {\n    return true;\n  }\n  const type = Object.prototype.toString.call(value);\n  if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n    return true;\n  }\n  return false;\n}\nfunction isObject(value) {\n  return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\nconst isNumberFinite = (value) => (typeof value === 'number' || value instanceof Number) && isFinite(+value);\nfunction finiteOrDefault(value, defaultValue) {\n  return isNumberFinite(value) ? value : defaultValue;\n}\nfunction valueOrDefault(value, defaultValue) {\n  return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100\n    : value / dimension;\nconst toDimension = (value, dimension) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100 * dimension\n    : +value;\nfunction callback(fn, args, thisArg) {\n  if (fn && typeof fn.call === 'function') {\n    return fn.apply(thisArg, args);\n  }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n  let i, len, keys;\n  if (isArray(loopable)) {\n    len = loopable.length;\n    if (reverse) {\n      for (i = len - 1; i >= 0; i--) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    } else {\n      for (i = 0; i < len; i++) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    }\n  } else if (isObject(loopable)) {\n    keys = Object.keys(loopable);\n    len = keys.length;\n    for (i = 0; i < len; i++) {\n      fn.call(thisArg, loopable[keys[i]], keys[i]);\n    }\n  }\n}\nfunction _elementsEqual(a0, a1) {\n  let i, ilen, v0, v1;\n  if (!a0 || !a1 || a0.length !== a1.length) {\n    return false;\n  }\n  for (i = 0, ilen = a0.length; i < ilen; ++i) {\n    v0 = a0[i];\n    v1 = a1[i];\n    if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction clone$1(source) {\n  if (isArray(source)) {\n    return source.map(clone$1);\n  }\n  if (isObject(source)) {\n    const target = Object.create(null);\n    const keys = Object.keys(source);\n    const klen = keys.length;\n    let k = 0;\n    for (; k < klen; ++k) {\n      target[keys[k]] = clone$1(source[keys[k]]);\n    }\n    return target;\n  }\n  return source;\n}\nfunction isValidKey(key) {\n  return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\nfunction _merger(key, target, source, options) {\n  if (!isValidKey(key)) {\n    return;\n  }\n  const tval = target[key];\n  const sval = source[key];\n  if (isObject(tval) && isObject(sval)) {\n    merge(tval, sval, options);\n  } else {\n    target[key] = clone$1(sval);\n  }\n}\nfunction merge(target, source, options) {\n  const sources = isArray(source) ? source : [source];\n  const ilen = sources.length;\n  if (!isObject(target)) {\n    return target;\n  }\n  options = options || {};\n  const merger = options.merger || _merger;\n  for (let i = 0; i < ilen; ++i) {\n    source = sources[i];\n    if (!isObject(source)) {\n      continue;\n    }\n    const keys = Object.keys(source);\n    for (let k = 0, klen = keys.length; k < klen; ++k) {\n      merger(keys[k], target, source, options);\n    }\n  }\n  return target;\n}\nfunction mergeIf(target, source) {\n  return merge(target, source, {merger: _mergerIf});\n}\nfunction _mergerIf(key, target, source) {\n  if (!isValidKey(key)) {\n    return;\n  }\n  const tval = target[key];\n  const sval = source[key];\n  if (isObject(tval) && isObject(sval)) {\n    mergeIf(tval, sval);\n  } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n    target[key] = clone$1(sval);\n  }\n}\nfunction _deprecated(scope, value, previous, current) {\n  if (value !== undefined) {\n    console.warn(scope + ': \"' + previous +\n\t\t\t'\" is deprecated. Please use \"' + current + '\" instead');\n  }\n}\nconst keyResolvers = {\n  '': v => v,\n  x: o => o.x,\n  y: o => o.y\n};\nfunction resolveObjectKey(obj, key) {\n  const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n  return resolver(obj);\n}\nfunction _getKeyResolver(key) {\n  const keys = _splitKey(key);\n  return obj => {\n    for (const k of keys) {\n      if (k === '') {\n        break;\n      }\n      obj = obj && obj[k];\n    }\n    return obj;\n  };\n}\nfunction _splitKey(key) {\n  const parts = key.split('.');\n  const keys = [];\n  let tmp = '';\n  for (const part of parts) {\n    tmp += part;\n    if (tmp.endsWith('\\\\')) {\n      tmp = tmp.slice(0, -1) + '.';\n    } else {\n      keys.push(tmp);\n      tmp = '';\n    }\n  }\n  return keys;\n}\nfunction _capitalize(str) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value) => typeof value !== 'undefined';\nconst isFunction = (value) => typeof value === 'function';\nconst setsEqual = (a, b) => {\n  if (a.size !== b.size) {\n    return false;\n  }\n  for (const item of a) {\n    if (!b.has(item)) {\n      return false;\n    }\n  }\n  return true;\n};\nfunction _isClickEvent(e) {\n  return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\nconst PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction niceNum(range) {\n  const roundedRange = Math.round(range);\n  range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n  const niceRange = Math.pow(10, Math.floor(log10(range)));\n  const fraction = range / niceRange;\n  const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n  return niceFraction * niceRange;\n}\nfunction _factorize(value) {\n  const result = [];\n  const sqrt = Math.sqrt(value);\n  let i;\n  for (i = 1; i < sqrt; i++) {\n    if (value % i === 0) {\n      result.push(i);\n      result.push(value / i);\n    }\n  }\n  if (sqrt === (sqrt | 0)) {\n    result.push(sqrt);\n  }\n  result.sort((a, b) => a - b).pop();\n  return result;\n}\nfunction isNumber(n) {\n  return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostEquals(x, y, epsilon) {\n  return Math.abs(x - y) < epsilon;\n}\nfunction almostWhole(x, epsilon) {\n  const rounded = Math.round(x);\n  return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\nfunction _setMinAndMaxByKey(array, target, property) {\n  let i, ilen, value;\n  for (i = 0, ilen = array.length; i < ilen; i++) {\n    value = array[i][property];\n    if (!isNaN(value)) {\n      target.min = Math.min(target.min, value);\n      target.max = Math.max(target.max, value);\n    }\n  }\n}\nfunction toRadians(degrees) {\n  return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n  return radians * (180 / PI);\n}\nfunction _decimalPlaces(x) {\n  if (!isNumberFinite(x)) {\n    return;\n  }\n  let e = 1;\n  let p = 0;\n  while (Math.round(x * e) / e !== x) {\n    e *= 10;\n    p++;\n  }\n  return p;\n}\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n  const distanceFromXCenter = anglePoint.x - centrePoint.x;\n  const distanceFromYCenter = anglePoint.y - centrePoint.y;\n  const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n  let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n  if (angle < (-0.5 * PI)) {\n    angle += TAU;\n  }\n  return {\n    angle,\n    distance: radialDistanceFromCenter\n  };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n  return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\nfunction _angleDiff(a, b) {\n  return (a - b + PITAU) % TAU - PI;\n}\nfunction _normalizeAngle(a) {\n  return (a % TAU + TAU) % TAU;\n}\nfunction _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n  const a = _normalizeAngle(angle);\n  const s = _normalizeAngle(start);\n  const e = _normalizeAngle(end);\n  const angleToStart = _normalizeAngle(s - a);\n  const angleToEnd = _normalizeAngle(e - a);\n  const startToAngle = _normalizeAngle(a - s);\n  const endToAngle = _normalizeAngle(a - e);\n  return a === s || a === e || (sameAngleIsFullCircle && s === e)\n    || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\nfunction _limitValue(value, min, max) {\n  return Math.max(min, Math.min(max, value));\n}\nfunction _int16Range(value) {\n  return _limitValue(value, -32768, 32767);\n}\nfunction _isBetween(value, start, end, epsilon = 1e-6) {\n  return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n  cmp = cmp || ((index) => table[index] < value);\n  let hi = table.length - 1;\n  let lo = 0;\n  let mid;\n  while (hi - lo > 1) {\n    mid = (lo + hi) >> 1;\n    if (cmp(mid)) {\n      lo = mid;\n    } else {\n      hi = mid;\n    }\n  }\n  return {lo, hi};\n}\nconst _lookupByKey = (table, key, value, last) =>\n  _lookup(table, value, last\n    ? index => table[index][key] <= value\n    : index => table[index][key] < value);\nconst _rlookupByKey = (table, key, value) =>\n  _lookup(table, value, index => table[index][key] >= value);\nfunction _filterBetween(values, min, max) {\n  let start = 0;\n  let end = values.length;\n  while (start < end && values[start] < min) {\n    start++;\n  }\n  while (end > start && values[end - 1] > max) {\n    end--;\n  }\n  return start > 0 || end < values.length\n    ? values.slice(start, end)\n    : values;\n}\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\nfunction listenArrayEvents(array, listener) {\n  if (array._chartjs) {\n    array._chartjs.listeners.push(listener);\n    return;\n  }\n  Object.defineProperty(array, '_chartjs', {\n    configurable: true,\n    enumerable: false,\n    value: {\n      listeners: [listener]\n    }\n  });\n  arrayEvents.forEach((key) => {\n    const method = '_onData' + _capitalize(key);\n    const base = array[key];\n    Object.defineProperty(array, key, {\n      configurable: true,\n      enumerable: false,\n      value(...args) {\n        const res = base.apply(this, args);\n        array._chartjs.listeners.forEach((object) => {\n          if (typeof object[method] === 'function') {\n            object[method](...args);\n          }\n        });\n        return res;\n      }\n    });\n  });\n}\nfunction unlistenArrayEvents(array, listener) {\n  const stub = array._chartjs;\n  if (!stub) {\n    return;\n  }\n  const listeners = stub.listeners;\n  const index = listeners.indexOf(listener);\n  if (index !== -1) {\n    listeners.splice(index, 1);\n  }\n  if (listeners.length > 0) {\n    return;\n  }\n  arrayEvents.forEach((key) => {\n    delete array[key];\n  });\n  delete array._chartjs;\n}\nfunction _arrayUnique(items) {\n  const set = new Set();\n  let i, ilen;\n  for (i = 0, ilen = items.length; i < ilen; ++i) {\n    set.add(items[i]);\n  }\n  if (set.size === ilen) {\n    return items;\n  }\n  return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n  return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\nconst requestAnimFrame = (function() {\n  if (typeof window === 'undefined') {\n    return function(callback) {\n      return callback();\n    };\n  }\n  return window.requestAnimationFrame;\n}());\nfunction throttled(fn, thisArg, updateFn) {\n  const updateArgs = updateFn || ((args) => Array.prototype.slice.call(args));\n  let ticking = false;\n  let args = [];\n  return function(...rest) {\n    args = updateArgs(rest);\n    if (!ticking) {\n      ticking = true;\n      requestAnimFrame.call(window, () => {\n        ticking = false;\n        fn.apply(thisArg, args);\n      });\n    }\n  };\n}\nfunction debounce(fn, delay) {\n  let timeout;\n  return function(...args) {\n    if (delay) {\n      clearTimeout(timeout);\n      timeout = setTimeout(fn, delay, args);\n    } else {\n      fn.apply(this, args);\n    }\n    return delay;\n  };\n}\nconst _toLeftRightCenter = (align) => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\nconst _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\nconst _textX = (align, left, right, rtl) => {\n  const check = rtl ? 'left' : 'right';\n  return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\nfunction _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n  const pointCount = points.length;\n  let start = 0;\n  let count = pointCount;\n  if (meta._sorted) {\n    const {iScale, _parsed} = meta;\n    const axis = iScale.axis;\n    const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n    if (minDefined) {\n      start = _limitValue(Math.min(\n        _lookupByKey(_parsed, iScale.axis, min).lo,\n        animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo),\n      0, pointCount - 1);\n    }\n    if (maxDefined) {\n      count = _limitValue(Math.max(\n        _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\n        animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1),\n      start, pointCount) - start;\n    } else {\n      count = pointCount - start;\n    }\n  }\n  return {start, count};\n}\nfunction _scaleRangesChanged(meta) {\n  const {xScale, yScale, _scaleRanges} = meta;\n  const newRanges = {\n    xmin: xScale.min,\n    xmax: xScale.max,\n    ymin: yScale.min,\n    ymax: yScale.max\n  };\n  if (!_scaleRanges) {\n    meta._scaleRanges = newRanges;\n    return true;\n  }\n  const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n  Object.assign(_scaleRanges, newRanges);\n  return changed;\n}\n\nconst atEdge = (t) => t === 0 || t === 1;\nconst elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\nconst effects = {\n  linear: t => t,\n  easeInQuad: t => t * t,\n  easeOutQuad: t => -t * (t - 2),\n  easeInOutQuad: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t\n    : -0.5 * ((--t) * (t - 2) - 1),\n  easeInCubic: t => t * t * t,\n  easeOutCubic: t => (t -= 1) * t * t + 1,\n  easeInOutCubic: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t\n    : 0.5 * ((t -= 2) * t * t + 2),\n  easeInQuart: t => t * t * t * t,\n  easeOutQuart: t => -((t -= 1) * t * t * t - 1),\n  easeInOutQuart: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t\n    : -0.5 * ((t -= 2) * t * t * t - 2),\n  easeInQuint: t => t * t * t * t * t,\n  easeOutQuint: t => (t -= 1) * t * t * t * t + 1,\n  easeInOutQuint: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t * t\n    : 0.5 * ((t -= 2) * t * t * t * t + 2),\n  easeInSine: t => -Math.cos(t * HALF_PI) + 1,\n  easeOutSine: t => Math.sin(t * HALF_PI),\n  easeInOutSine: t => -0.5 * (Math.cos(PI * t) - 1),\n  easeInExpo: t => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n  easeOutExpo: t => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n  easeInOutExpo: t => atEdge(t) ? t : t < 0.5\n    ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n    : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n  easeInCirc: t => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n  easeOutCirc: t => Math.sqrt(1 - (t -= 1) * t),\n  easeInOutCirc: t => ((t /= 0.5) < 1)\n    ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n    : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n  easeInElastic: t => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n  easeOutElastic: t => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n  easeInOutElastic(t) {\n    const s = 0.1125;\n    const p = 0.45;\n    return atEdge(t) ? t :\n      t < 0.5\n        ? 0.5 * elasticIn(t * 2, s, p)\n        : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n  },\n  easeInBack(t) {\n    const s = 1.70158;\n    return t * t * ((s + 1) * t - s);\n  },\n  easeOutBack(t) {\n    const s = 1.70158;\n    return (t -= 1) * t * ((s + 1) * t + s) + 1;\n  },\n  easeInOutBack(t) {\n    let s = 1.70158;\n    if ((t /= 0.5) < 1) {\n      return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n    }\n    return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n  },\n  easeInBounce: t => 1 - effects.easeOutBounce(1 - t),\n  easeOutBounce(t) {\n    const m = 7.5625;\n    const d = 2.75;\n    if (t < (1 / d)) {\n      return m * t * t;\n    }\n    if (t < (2 / d)) {\n      return m * (t -= (1.5 / d)) * t + 0.75;\n    }\n    if (t < (2.5 / d)) {\n      return m * (t -= (2.25 / d)) * t + 0.9375;\n    }\n    return m * (t -= (2.625 / d)) * t + 0.984375;\n  },\n  easeInOutBounce: t => (t < 0.5)\n    ? effects.easeInBounce(t * 2) * 0.5\n    : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n};\n\n/*!\n * @kurkle/color v0.2.1\n * https://github.com/kurkle/color#readme\n * (c) 2022 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n  return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n  return lim(round(v * 2.55), 0, 255);\n}\nfunction n2b(v) {\n  return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n  return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n  return lim(round(v * 100), 0, 100);\n}\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n  var len = str.length;\n  var ret;\n  if (str[0] === '#') {\n    if (len === 4 || len === 5) {\n      ret = {\n        r: 255 & map$1[str[1]] * 17,\n        g: 255 & map$1[str[2]] * 17,\n        b: 255 & map$1[str[3]] * 17,\n        a: len === 5 ? map$1[str[4]] * 17 : 255\n      };\n    } else if (len === 7 || len === 9) {\n      ret = {\n        r: map$1[str[1]] << 4 | map$1[str[2]],\n        g: map$1[str[3]] << 4 | map$1[str[4]],\n        b: map$1[str[5]] << 4 | map$1[str[6]],\n        a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n      };\n    }\n  }\n  return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n  var f = isShort(v) ? h1 : h2;\n  return v\n    ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n    : undefined;\n}\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n  const a = s * Math.min(l, 1 - l);\n  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n  const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n  return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n  const rgb = hsl2rgbn(h, 1, 0.5);\n  let i;\n  if (w + b > 1) {\n    i = 1 / (w + b);\n    w *= i;\n    b *= i;\n  }\n  for (i = 0; i < 3; i++) {\n    rgb[i] *= 1 - w - b;\n    rgb[i] += w;\n  }\n  return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n  if (r === max) {\n    return ((g - b) / d) + (g < b ? 6 : 0);\n  }\n  if (g === max) {\n    return (b - r) / d + 2;\n  }\n  return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n  const range = 255;\n  const r = v.r / range;\n  const g = v.g / range;\n  const b = v.b / range;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const l = (max + min) / 2;\n  let h, s, d;\n  if (max !== min) {\n    d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n    h = hueValue(r, g, b, d, max);\n    h = h * 60 + 0.5;\n  }\n  return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n  return (\n    Array.isArray(a)\n      ? f(a[0], a[1], a[2])\n      : f(a, b, c)\n  ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n  return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n  return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n  return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n  return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n  const m = HUE_RE.exec(str);\n  let a = 255;\n  let v;\n  if (!m) {\n    return;\n  }\n  if (m[5] !== v) {\n    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n  }\n  const h = hue(+m[2]);\n  const p1 = +m[3] / 100;\n  const p2 = +m[4] / 100;\n  if (m[1] === 'hwb') {\n    v = hwb2rgb(h, p1, p2);\n  } else if (m[1] === 'hsv') {\n    v = hsv2rgb(h, p1, p2);\n  } else {\n    v = hsl2rgb(h, p1, p2);\n  }\n  return {\n    r: v[0],\n    g: v[1],\n    b: v[2],\n    a: a\n  };\n}\nfunction rotate(v, deg) {\n  var h = rgb2hsl(v);\n  h[0] = hue(h[0] + deg);\n  h = hsl2rgb(h);\n  v.r = h[0];\n  v.g = h[1];\n  v.b = h[2];\n}\nfunction hslString(v) {\n  if (!v) {\n    return;\n  }\n  const a = rgb2hsl(v);\n  const h = a[0];\n  const s = n2p(a[1]);\n  const l = n2p(a[2]);\n  return v.a < 255\n    ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n    : `hsl(${h}, ${s}%, ${l}%)`;\n}\nconst map = {\n  x: 'dark',\n  Z: 'light',\n  Y: 're',\n  X: 'blu',\n  W: 'gr',\n  V: 'medium',\n  U: 'slate',\n  A: 'ee',\n  T: 'ol',\n  S: 'or',\n  B: 'ra',\n  C: 'lateg',\n  D: 'ights',\n  R: 'in',\n  Q: 'turquois',\n  E: 'hi',\n  P: 'ro',\n  O: 'al',\n  N: 'le',\n  M: 'de',\n  L: 'yello',\n  F: 'en',\n  K: 'ch',\n  G: 'arks',\n  H: 'ea',\n  I: 'ightg',\n  J: 'wh'\n};\nconst names$1 = {\n  OiceXe: 'f0f8ff',\n  antiquewEte: 'faebd7',\n  aqua: 'ffff',\n  aquamarRe: '7fffd4',\n  azuY: 'f0ffff',\n  beige: 'f5f5dc',\n  bisque: 'ffe4c4',\n  black: '0',\n  blanKedOmond: 'ffebcd',\n  Xe: 'ff',\n  XeviTet: '8a2be2',\n  bPwn: 'a52a2a',\n  burlywood: 'deb887',\n  caMtXe: '5f9ea0',\n  KartYuse: '7fff00',\n  KocTate: 'd2691e',\n  cSO: 'ff7f50',\n  cSnflowerXe: '6495ed',\n  cSnsilk: 'fff8dc',\n  crimson: 'dc143c',\n  cyan: 'ffff',\n  xXe: '8b',\n  xcyan: '8b8b',\n  xgTMnPd: 'b8860b',\n  xWay: 'a9a9a9',\n  xgYF: '6400',\n  xgYy: 'a9a9a9',\n  xkhaki: 'bdb76b',\n  xmagFta: '8b008b',\n  xTivegYF: '556b2f',\n  xSange: 'ff8c00',\n  xScEd: '9932cc',\n  xYd: '8b0000',\n  xsOmon: 'e9967a',\n  xsHgYF: '8fbc8f',\n  xUXe: '483d8b',\n  xUWay: '2f4f4f',\n  xUgYy: '2f4f4f',\n  xQe: 'ced1',\n  xviTet: '9400d3',\n  dAppRk: 'ff1493',\n  dApskyXe: 'bfff',\n  dimWay: '696969',\n  dimgYy: '696969',\n  dodgerXe: '1e90ff',\n  fiYbrick: 'b22222',\n  flSOwEte: 'fffaf0',\n  foYstWAn: '228b22',\n  fuKsia: 'ff00ff',\n  gaRsbSo: 'dcdcdc',\n  ghostwEte: 'f8f8ff',\n  gTd: 'ffd700',\n  gTMnPd: 'daa520',\n  Way: '808080',\n  gYF: '8000',\n  gYFLw: 'adff2f',\n  gYy: '808080',\n  honeyMw: 'f0fff0',\n  hotpRk: 'ff69b4',\n  RdianYd: 'cd5c5c',\n  Rdigo: '4b0082',\n  ivSy: 'fffff0',\n  khaki: 'f0e68c',\n  lavFMr: 'e6e6fa',\n  lavFMrXsh: 'fff0f5',\n  lawngYF: '7cfc00',\n  NmoncEffon: 'fffacd',\n  ZXe: 'add8e6',\n  ZcSO: 'f08080',\n  Zcyan: 'e0ffff',\n  ZgTMnPdLw: 'fafad2',\n  ZWay: 'd3d3d3',\n  ZgYF: '90ee90',\n  ZgYy: 'd3d3d3',\n  ZpRk: 'ffb6c1',\n  ZsOmon: 'ffa07a',\n  ZsHgYF: '20b2aa',\n  ZskyXe: '87cefa',\n  ZUWay: '778899',\n  ZUgYy: '778899',\n  ZstAlXe: 'b0c4de',\n  ZLw: 'ffffe0',\n  lime: 'ff00',\n  limegYF: '32cd32',\n  lRF: 'faf0e6',\n  magFta: 'ff00ff',\n  maPon: '800000',\n  VaquamarRe: '66cdaa',\n  VXe: 'cd',\n  VScEd: 'ba55d3',\n  VpurpN: '9370db',\n  VsHgYF: '3cb371',\n  VUXe: '7b68ee',\n  VsprRggYF: 'fa9a',\n  VQe: '48d1cc',\n  VviTetYd: 'c71585',\n  midnightXe: '191970',\n  mRtcYam: 'f5fffa',\n  mistyPse: 'ffe4e1',\n  moccasR: 'ffe4b5',\n  navajowEte: 'ffdead',\n  navy: '80',\n  Tdlace: 'fdf5e6',\n  Tive: '808000',\n  TivedBb: '6b8e23',\n  Sange: 'ffa500',\n  SangeYd: 'ff4500',\n  ScEd: 'da70d6',\n  pOegTMnPd: 'eee8aa',\n  pOegYF: '98fb98',\n  pOeQe: 'afeeee',\n  pOeviTetYd: 'db7093',\n  papayawEp: 'ffefd5',\n  pHKpuff: 'ffdab9',\n  peru: 'cd853f',\n  pRk: 'ffc0cb',\n  plum: 'dda0dd',\n  powMrXe: 'b0e0e6',\n  purpN: '800080',\n  YbeccapurpN: '663399',\n  Yd: 'ff0000',\n  Psybrown: 'bc8f8f',\n  PyOXe: '4169e1',\n  saddNbPwn: '8b4513',\n  sOmon: 'fa8072',\n  sandybPwn: 'f4a460',\n  sHgYF: '2e8b57',\n  sHshell: 'fff5ee',\n  siFna: 'a0522d',\n  silver: 'c0c0c0',\n  skyXe: '87ceeb',\n  UXe: '6a5acd',\n  UWay: '708090',\n  UgYy: '708090',\n  snow: 'fffafa',\n  sprRggYF: 'ff7f',\n  stAlXe: '4682b4',\n  tan: 'd2b48c',\n  teO: '8080',\n  tEstN: 'd8bfd8',\n  tomato: 'ff6347',\n  Qe: '40e0d0',\n  viTet: 'ee82ee',\n  JHt: 'f5deb3',\n  wEte: 'ffffff',\n  wEtesmoke: 'f5f5f5',\n  Lw: 'ffff00',\n  LwgYF: '9acd32'\n};\nfunction unpack() {\n  const unpacked = {};\n  const keys = Object.keys(names$1);\n  const tkeys = Object.keys(map);\n  let i, j, k, ok, nk;\n  for (i = 0; i < keys.length; i++) {\n    ok = nk = keys[i];\n    for (j = 0; j < tkeys.length; j++) {\n      k = tkeys[j];\n      nk = nk.replace(k, map[k]);\n    }\n    k = parseInt(names$1[ok], 16);\n    unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n  }\n  return unpacked;\n}\nlet names;\nfunction nameParse(str) {\n  if (!names) {\n    names = unpack();\n    names.transparent = [0, 0, 0, 0];\n  }\n  const a = names[str.toLowerCase()];\n  return a && {\n    r: a[0],\n    g: a[1],\n    b: a[2],\n    a: a.length === 4 ? a[3] : 255\n  };\n}\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n  const m = RGB_RE.exec(str);\n  let a = 255;\n  let r, g, b;\n  if (!m) {\n    return;\n  }\n  if (m[7] !== r) {\n    const v = +m[7];\n    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n  }\n  r = +m[1];\n  g = +m[3];\n  b = +m[5];\n  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n  return {\n    r: r,\n    g: g,\n    b: b,\n    a: a\n  };\n}\nfunction rgbString(v) {\n  return v && (\n    v.a < 255\n      ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n      : `rgb(${v.r}, ${v.g}, ${v.b})`\n  );\n}\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n  const r = from(b2n(rgb1.r));\n  const g = from(b2n(rgb1.g));\n  const b = from(b2n(rgb1.b));\n  return {\n    r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n    g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n    b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n    a: rgb1.a + t * (rgb2.a - rgb1.a)\n  };\n}\nfunction modHSL(v, i, ratio) {\n  if (v) {\n    let tmp = rgb2hsl(v);\n    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n    tmp = hsl2rgb(tmp);\n    v.r = tmp[0];\n    v.g = tmp[1];\n    v.b = tmp[2];\n  }\n}\nfunction clone(v, proto) {\n  return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n  var v = {r: 0, g: 0, b: 0, a: 255};\n  if (Array.isArray(input)) {\n    if (input.length >= 3) {\n      v = {r: input[0], g: input[1], b: input[2], a: 255};\n      if (input.length > 3) {\n        v.a = n2b(input[3]);\n      }\n    }\n  } else {\n    v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n    v.a = n2b(v.a);\n  }\n  return v;\n}\nfunction functionParse(str) {\n  if (str.charAt(0) === 'r') {\n    return rgbParse(str);\n  }\n  return hueParse(str);\n}\nclass Color {\n  constructor(input) {\n    if (input instanceof Color) {\n      return input;\n    }\n    const type = typeof input;\n    let v;\n    if (type === 'object') {\n      v = fromObject(input);\n    } else if (type === 'string') {\n      v = hexParse(input) || nameParse(input) || functionParse(input);\n    }\n    this._rgb = v;\n    this._valid = !!v;\n  }\n  get valid() {\n    return this._valid;\n  }\n  get rgb() {\n    var v = clone(this._rgb);\n    if (v) {\n      v.a = b2n(v.a);\n    }\n    return v;\n  }\n  set rgb(obj) {\n    this._rgb = fromObject(obj);\n  }\n  rgbString() {\n    return this._valid ? rgbString(this._rgb) : undefined;\n  }\n  hexString() {\n    return this._valid ? hexString(this._rgb) : undefined;\n  }\n  hslString() {\n    return this._valid ? hslString(this._rgb) : undefined;\n  }\n  mix(color, weight) {\n    if (color) {\n      const c1 = this.rgb;\n      const c2 = color.rgb;\n      let w2;\n      const p = weight === w2 ? 0.5 : weight;\n      const w = 2 * p - 1;\n      const a = c1.a - c2.a;\n      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n      w2 = 1 - w1;\n      c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n      c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n      c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n      c1.a = p * c1.a + (1 - p) * c2.a;\n      this.rgb = c1;\n    }\n    return this;\n  }\n  interpolate(color, t) {\n    if (color) {\n      this._rgb = interpolate(this._rgb, color._rgb, t);\n    }\n    return this;\n  }\n  clone() {\n    return new Color(this.rgb);\n  }\n  alpha(a) {\n    this._rgb.a = n2b(a);\n    return this;\n  }\n  clearer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 - ratio;\n    return this;\n  }\n  greyscale() {\n    const rgb = this._rgb;\n    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n    rgb.r = rgb.g = rgb.b = val;\n    return this;\n  }\n  opaquer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 + ratio;\n    return this;\n  }\n  negate() {\n    const v = this._rgb;\n    v.r = 255 - v.r;\n    v.g = 255 - v.g;\n    v.b = 255 - v.b;\n    return this;\n  }\n  lighten(ratio) {\n    modHSL(this._rgb, 2, ratio);\n    return this;\n  }\n  darken(ratio) {\n    modHSL(this._rgb, 2, -ratio);\n    return this;\n  }\n  saturate(ratio) {\n    modHSL(this._rgb, 1, ratio);\n    return this;\n  }\n  desaturate(ratio) {\n    modHSL(this._rgb, 1, -ratio);\n    return this;\n  }\n  rotate(deg) {\n    rotate(this._rgb, deg);\n    return this;\n  }\n}\nfunction index_esm(input) {\n  return new Color(input);\n}\n\nfunction isPatternOrGradient(value) {\n  if (value && typeof value === 'object') {\n    const type = value.toString();\n    return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n  }\n  return false;\n}\nfunction color(value) {\n  return isPatternOrGradient(value) ? value : index_esm(value);\n}\nfunction getHoverColor(value) {\n  return isPatternOrGradient(value)\n    ? value\n    : index_esm(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\nfunction getScope$1(node, key) {\n  if (!key) {\n    return node;\n  }\n  const keys = key.split('.');\n  for (let i = 0, n = keys.length; i < n; ++i) {\n    const k = keys[i];\n    node = node[k] || (node[k] = Object.create(null));\n  }\n  return node;\n}\nfunction set(root, scope, values) {\n  if (typeof scope === 'string') {\n    return merge(getScope$1(root, scope), values);\n  }\n  return merge(getScope$1(root, ''), scope);\n}\nclass Defaults {\n  constructor(_descriptors) {\n    this.animation = undefined;\n    this.backgroundColor = 'rgba(0,0,0,0.1)';\n    this.borderColor = 'rgba(0,0,0,0.1)';\n    this.color = '#666';\n    this.datasets = {};\n    this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n    this.elements = {};\n    this.events = [\n      'mousemove',\n      'mouseout',\n      'click',\n      'touchstart',\n      'touchmove'\n    ];\n    this.font = {\n      family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n      size: 12,\n      style: 'normal',\n      lineHeight: 1.2,\n      weight: null\n    };\n    this.hover = {};\n    this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n    this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n    this.hoverColor = (ctx, options) => getHoverColor(options.color);\n    this.indexAxis = 'x';\n    this.interaction = {\n      mode: 'nearest',\n      intersect: true,\n      includeInvisible: false\n    };\n    this.maintainAspectRatio = true;\n    this.onHover = null;\n    this.onClick = null;\n    this.parsing = true;\n    this.plugins = {};\n    this.responsive = true;\n    this.scale = undefined;\n    this.scales = {};\n    this.showLine = true;\n    this.drawActiveElementsOnTop = true;\n    this.describe(_descriptors);\n  }\n  set(scope, values) {\n    return set(this, scope, values);\n  }\n  get(scope) {\n    return getScope$1(this, scope);\n  }\n  describe(scope, values) {\n    return set(descriptors, scope, values);\n  }\n  override(scope, values) {\n    return set(overrides, scope, values);\n  }\n  route(scope, name, targetScope, targetName) {\n    const scopeObject = getScope$1(this, scope);\n    const targetScopeObject = getScope$1(this, targetScope);\n    const privateName = '_' + name;\n    Object.defineProperties(scopeObject, {\n      [privateName]: {\n        value: scopeObject[name],\n        writable: true\n      },\n      [name]: {\n        enumerable: true,\n        get() {\n          const local = this[privateName];\n          const target = targetScopeObject[targetName];\n          if (isObject(local)) {\n            return Object.assign({}, target, local);\n          }\n          return valueOrDefault(local, target);\n        },\n        set(value) {\n          this[privateName] = value;\n        }\n      }\n    });\n  }\n}\nvar defaults = new Defaults({\n  _scriptable: (name) => !name.startsWith('on'),\n  _indexable: (name) => name !== 'events',\n  hover: {\n    _fallback: 'interaction'\n  },\n  interaction: {\n    _scriptable: false,\n    _indexable: false,\n  }\n});\n\nfunction toFontString(font) {\n  if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n    return null;\n  }\n  return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\nfunction _measureText(ctx, data, gc, longest, string) {\n  let textWidth = data[string];\n  if (!textWidth) {\n    textWidth = data[string] = ctx.measureText(string).width;\n    gc.push(string);\n  }\n  if (textWidth > longest) {\n    longest = textWidth;\n  }\n  return longest;\n}\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n  cache = cache || {};\n  let data = cache.data = cache.data || {};\n  let gc = cache.garbageCollect = cache.garbageCollect || [];\n  if (cache.font !== font) {\n    data = cache.data = {};\n    gc = cache.garbageCollect = [];\n    cache.font = font;\n  }\n  ctx.save();\n  ctx.font = font;\n  let longest = 0;\n  const ilen = arrayOfThings.length;\n  let i, j, jlen, thing, nestedThing;\n  for (i = 0; i < ilen; i++) {\n    thing = arrayOfThings[i];\n    if (thing !== undefined && thing !== null && isArray(thing) !== true) {\n      longest = _measureText(ctx, data, gc, longest, thing);\n    } else if (isArray(thing)) {\n      for (j = 0, jlen = thing.length; j < jlen; j++) {\n        nestedThing = thing[j];\n        if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n          longest = _measureText(ctx, data, gc, longest, nestedThing);\n        }\n      }\n    }\n  }\n  ctx.restore();\n  const gcLen = gc.length / 2;\n  if (gcLen > arrayOfThings.length) {\n    for (i = 0; i < gcLen; i++) {\n      delete data[gc[i]];\n    }\n    gc.splice(0, gcLen);\n  }\n  return longest;\n}\nfunction _alignPixel(chart, pixel, width) {\n  const devicePixelRatio = chart.currentDevicePixelRatio;\n  const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n  return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\nfunction clearCanvas(canvas, ctx) {\n  ctx = ctx || canvas.getContext('2d');\n  ctx.save();\n  ctx.resetTransform();\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n  ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n  drawPointLegend(ctx, options, x, y, null);\n}\nfunction drawPointLegend(ctx, options, x, y, w) {\n  let type, xOffset, yOffset, size, cornerRadius, width;\n  const style = options.pointStyle;\n  const rotation = options.rotation;\n  const radius = options.radius;\n  let rad = (rotation || 0) * RAD_PER_DEG;\n  if (style && typeof style === 'object') {\n    type = style.toString();\n    if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n      ctx.save();\n      ctx.translate(x, y);\n      ctx.rotate(rad);\n      ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n      ctx.restore();\n      return;\n    }\n  }\n  if (isNaN(radius) || radius <= 0) {\n    return;\n  }\n  ctx.beginPath();\n  switch (style) {\n  default:\n    if (w) {\n      ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n    } else {\n      ctx.arc(x, y, radius, 0, TAU);\n    }\n    ctx.closePath();\n    break;\n  case 'triangle':\n    ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    rad += TWO_THIRDS_PI;\n    ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    rad += TWO_THIRDS_PI;\n    ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    ctx.closePath();\n    break;\n  case 'rectRounded':\n    cornerRadius = radius * 0.516;\n    size = radius - cornerRadius;\n    xOffset = Math.cos(rad + QUARTER_PI) * size;\n    yOffset = Math.sin(rad + QUARTER_PI) * size;\n    ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n    ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n    ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n    ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n    ctx.closePath();\n    break;\n  case 'rect':\n    if (!rotation) {\n      size = Math.SQRT1_2 * radius;\n      width = w ? w / 2 : size;\n      ctx.rect(x - width, y - size, 2 * width, 2 * size);\n      break;\n    }\n    rad += QUARTER_PI;\n  case 'rectRot':\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    ctx.closePath();\n    break;\n  case 'crossRot':\n    rad += QUARTER_PI;\n  case 'cross':\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    break;\n  case 'star':\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    rad += QUARTER_PI;\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    break;\n  case 'line':\n    xOffset = w ? w / 2 : Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    break;\n  case 'dash':\n    ctx.moveTo(x, y);\n    ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n    break;\n  }\n  ctx.fill();\n  if (options.borderWidth > 0) {\n    ctx.stroke();\n  }\n}\nfunction _isPointInArea(point, area, margin) {\n  margin = margin || 0.5;\n  return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\nfunction clipArea(ctx, area) {\n  ctx.save();\n  ctx.beginPath();\n  ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n  ctx.clip();\n}\nfunction unclipArea(ctx) {\n  ctx.restore();\n}\nfunction _steppedLineTo(ctx, previous, target, flip, mode) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  if (mode === 'middle') {\n    const midpoint = (previous.x + target.x) / 2.0;\n    ctx.lineTo(midpoint, previous.y);\n    ctx.lineTo(midpoint, target.y);\n  } else if (mode === 'after' !== !!flip) {\n    ctx.lineTo(previous.x, target.y);\n  } else {\n    ctx.lineTo(target.x, previous.y);\n  }\n  ctx.lineTo(target.x, target.y);\n}\nfunction _bezierCurveTo(ctx, previous, target, flip) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  ctx.bezierCurveTo(\n    flip ? previous.cp1x : previous.cp2x,\n    flip ? previous.cp1y : previous.cp2y,\n    flip ? target.cp2x : target.cp1x,\n    flip ? target.cp2y : target.cp1y,\n    target.x,\n    target.y);\n}\nfunction renderText(ctx, text, x, y, font, opts = {}) {\n  const lines = isArray(text) ? text : [text];\n  const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n  let i, line;\n  ctx.save();\n  ctx.font = font.string;\n  setRenderOpts(ctx, opts);\n  for (i = 0; i < lines.length; ++i) {\n    line = lines[i];\n    if (stroke) {\n      if (opts.strokeColor) {\n        ctx.strokeStyle = opts.strokeColor;\n      }\n      if (!isNullOrUndef(opts.strokeWidth)) {\n        ctx.lineWidth = opts.strokeWidth;\n      }\n      ctx.strokeText(line, x, y, opts.maxWidth);\n    }\n    ctx.fillText(line, x, y, opts.maxWidth);\n    decorateText(ctx, x, y, line, opts);\n    y += font.lineHeight;\n  }\n  ctx.restore();\n}\nfunction setRenderOpts(ctx, opts) {\n  if (opts.translation) {\n    ctx.translate(opts.translation[0], opts.translation[1]);\n  }\n  if (!isNullOrUndef(opts.rotation)) {\n    ctx.rotate(opts.rotation);\n  }\n  if (opts.color) {\n    ctx.fillStyle = opts.color;\n  }\n  if (opts.textAlign) {\n    ctx.textAlign = opts.textAlign;\n  }\n  if (opts.textBaseline) {\n    ctx.textBaseline = opts.textBaseline;\n  }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n  if (opts.strikethrough || opts.underline) {\n    const metrics = ctx.measureText(line);\n    const left = x - metrics.actualBoundingBoxLeft;\n    const right = x + metrics.actualBoundingBoxRight;\n    const top = y - metrics.actualBoundingBoxAscent;\n    const bottom = y + metrics.actualBoundingBoxDescent;\n    const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n    ctx.strokeStyle = ctx.fillStyle;\n    ctx.beginPath();\n    ctx.lineWidth = opts.decorationWidth || 2;\n    ctx.moveTo(left, yDecoration);\n    ctx.lineTo(right, yDecoration);\n    ctx.stroke();\n  }\n}\nfunction addRoundedRectPath(ctx, rect) {\n  const {x, y, w, h, radius} = rect;\n  ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);\n  ctx.lineTo(x, y + h - radius.bottomLeft);\n  ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n  ctx.lineTo(x + w - radius.bottomRight, y + h);\n  ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n  ctx.lineTo(x + w, y + radius.topRight);\n  ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n  ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = new RegExp(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\nconst FONT_STYLE = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);\nfunction toLineHeight(value, size) {\n  const matches = ('' + value).match(LINE_HEIGHT);\n  if (!matches || matches[1] === 'normal') {\n    return size * 1.2;\n  }\n  value = +matches[2];\n  switch (matches[3]) {\n  case 'px':\n    return value;\n  case '%':\n    value /= 100;\n    break;\n  }\n  return size * value;\n}\nconst numberOrZero = v => +v || 0;\nfunction _readValueToProps(value, props) {\n  const ret = {};\n  const objProps = isObject(props);\n  const keys = objProps ? Object.keys(props) : props;\n  const read = isObject(value)\n    ? objProps\n      ? prop => valueOrDefault(value[prop], value[props[prop]])\n      : prop => value[prop]\n    : () => value;\n  for (const prop of keys) {\n    ret[prop] = numberOrZero(read(prop));\n  }\n  return ret;\n}\nfunction toTRBL(value) {\n  return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\nfunction toTRBLCorners(value) {\n  return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\nfunction toPadding(value) {\n  const obj = toTRBL(value);\n  obj.width = obj.left + obj.right;\n  obj.height = obj.top + obj.bottom;\n  return obj;\n}\nfunction toFont(options, fallback) {\n  options = options || {};\n  fallback = fallback || defaults.font;\n  let size = valueOrDefault(options.size, fallback.size);\n  if (typeof size === 'string') {\n    size = parseInt(size, 10);\n  }\n  let style = valueOrDefault(options.style, fallback.style);\n  if (style && !('' + style).match(FONT_STYLE)) {\n    console.warn('Invalid font style specified: \"' + style + '\"');\n    style = '';\n  }\n  const font = {\n    family: valueOrDefault(options.family, fallback.family),\n    lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n    size,\n    style,\n    weight: valueOrDefault(options.weight, fallback.weight),\n    string: ''\n  };\n  font.string = toFontString(font);\n  return font;\n}\nfunction resolve(inputs, context, index, info) {\n  let cacheable = true;\n  let i, ilen, value;\n  for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n    value = inputs[i];\n    if (value === undefined) {\n      continue;\n    }\n    if (context !== undefined && typeof value === 'function') {\n      value = value(context);\n      cacheable = false;\n    }\n    if (index !== undefined && isArray(value)) {\n      value = value[index % value.length];\n      cacheable = false;\n    }\n    if (value !== undefined) {\n      if (info && !cacheable) {\n        info.cacheable = false;\n      }\n      return value;\n    }\n  }\n}\nfunction _addGrace(minmax, grace, beginAtZero) {\n  const {min, max} = minmax;\n  const change = toDimension(grace, (max - min) / 2);\n  const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add;\n  return {\n    min: keepZero(min, -Math.abs(change)),\n    max: keepZero(max, change)\n  };\n}\nfunction createContext(parentContext, context) {\n  return Object.assign(Object.create(parentContext), context);\n}\n\nfunction _createResolver(scopes, prefixes = [''], rootScopes = scopes, fallback, getTarget = () => scopes[0]) {\n  if (!defined(fallback)) {\n    fallback = _resolve('_fallback', scopes);\n  }\n  const cache = {\n    [Symbol.toStringTag]: 'Object',\n    _cacheable: true,\n    _scopes: scopes,\n    _rootScopes: rootScopes,\n    _fallback: fallback,\n    _getTarget: getTarget,\n    override: (scope) => _createResolver([scope, ...scopes], prefixes, rootScopes, fallback),\n  };\n  return new Proxy(cache, {\n    deleteProperty(target, prop) {\n      delete target[prop];\n      delete target._keys;\n      delete scopes[0][prop];\n      return true;\n    },\n    get(target, prop) {\n      return _cached(target, prop,\n        () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n    },\n    getOwnPropertyDescriptor(target, prop) {\n      return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n    },\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(scopes[0]);\n    },\n    has(target, prop) {\n      return getKeysFromAllScopes(target).includes(prop);\n    },\n    ownKeys(target) {\n      return getKeysFromAllScopes(target);\n    },\n    set(target, prop, value) {\n      const storage = target._storage || (target._storage = getTarget());\n      target[prop] = storage[prop] = value;\n      delete target._keys;\n      return true;\n    }\n  });\n}\nfunction _attachContext(proxy, context, subProxy, descriptorDefaults) {\n  const cache = {\n    _cacheable: false,\n    _proxy: proxy,\n    _context: context,\n    _subProxy: subProxy,\n    _stack: new Set(),\n    _descriptors: _descriptors(proxy, descriptorDefaults),\n    setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n    override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n  };\n  return new Proxy(cache, {\n    deleteProperty(target, prop) {\n      delete target[prop];\n      delete proxy[prop];\n      return true;\n    },\n    get(target, prop, receiver) {\n      return _cached(target, prop,\n        () => _resolveWithContext(target, prop, receiver));\n    },\n    getOwnPropertyDescriptor(target, prop) {\n      return target._descriptors.allKeys\n        ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n        : Reflect.getOwnPropertyDescriptor(proxy, prop);\n    },\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(proxy);\n    },\n    has(target, prop) {\n      return Reflect.has(proxy, prop);\n    },\n    ownKeys() {\n      return Reflect.ownKeys(proxy);\n    },\n    set(target, prop, value) {\n      proxy[prop] = value;\n      delete target[prop];\n      return true;\n    }\n  });\n}\nfunction _descriptors(proxy, defaults = {scriptable: true, indexable: true}) {\n  const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n  return {\n    allKeys: _allKeys,\n    scriptable: _scriptable,\n    indexable: _indexable,\n    isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n    isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n  };\n}\nconst readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters' &&\n  (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n  if (Object.prototype.hasOwnProperty.call(target, prop)) {\n    return target[prop];\n  }\n  const value = resolve();\n  target[prop] = value;\n  return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  let value = _proxy[prop];\n  if (isFunction(value) && descriptors.isScriptable(prop)) {\n    value = _resolveScriptable(prop, value, target, receiver);\n  }\n  if (isArray(value) && value.length) {\n    value = _resolveArray(prop, value, target, descriptors.isIndexable);\n  }\n  if (needsSubResolver(prop, value)) {\n    value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n  }\n  return value;\n}\nfunction _resolveScriptable(prop, value, target, receiver) {\n  const {_proxy, _context, _subProxy, _stack} = target;\n  if (_stack.has(prop)) {\n    throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n  }\n  _stack.add(prop);\n  value = value(_context, _subProxy || receiver);\n  _stack.delete(prop);\n  if (needsSubResolver(prop, value)) {\n    value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n  }\n  return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  if (defined(_context.index) && isIndexable(prop)) {\n    value = value[_context.index % value.length];\n  } else if (isObject(value[0])) {\n    const arr = value;\n    const scopes = _proxy._scopes.filter(s => s !== arr);\n    value = [];\n    for (const item of arr) {\n      const resolver = createSubResolver(scopes, _proxy, prop, item);\n      value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n    }\n  }\n  return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n  return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent) => key === true ? parent\n  : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n  for (const parent of parentScopes) {\n    const scope = getScope(key, parent);\n    if (scope) {\n      set.add(scope);\n      const fallback = resolveFallback(scope._fallback, key, value);\n      if (defined(fallback) && fallback !== key && fallback !== parentFallback) {\n        return fallback;\n      }\n    } else if (scope === false && defined(parentFallback) && key !== parentFallback) {\n      return null;\n    }\n  }\n  return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n  const rootScopes = resolver._rootScopes;\n  const fallback = resolveFallback(resolver._fallback, prop, value);\n  const allScopes = [...parentScopes, ...rootScopes];\n  const set = new Set();\n  set.add(value);\n  let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n  if (key === null) {\n    return false;\n  }\n  if (defined(fallback) && fallback !== prop) {\n    key = addScopesFromKey(set, allScopes, fallback, key, value);\n    if (key === null) {\n      return false;\n    }\n  }\n  return _createResolver(Array.from(set), [''], rootScopes, fallback,\n    () => subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n  while (key) {\n    key = addScopes(set, allScopes, key, fallback, item);\n  }\n  return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n  const parent = resolver._getTarget();\n  if (!(prop in parent)) {\n    parent[prop] = {};\n  }\n  const target = parent[prop];\n  if (isArray(target) && isObject(value)) {\n    return value;\n  }\n  return target;\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n  let value;\n  for (const prefix of prefixes) {\n    value = _resolve(readKey(prefix, prop), scopes);\n    if (defined(value)) {\n      return needsSubResolver(prop, value)\n        ? createSubResolver(scopes, proxy, prop, value)\n        : value;\n    }\n  }\n}\nfunction _resolve(key, scopes) {\n  for (const scope of scopes) {\n    if (!scope) {\n      continue;\n    }\n    const value = scope[key];\n    if (defined(value)) {\n      return value;\n    }\n  }\n}\nfunction getKeysFromAllScopes(target) {\n  let keys = target._keys;\n  if (!keys) {\n    keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n  }\n  return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n  const set = new Set();\n  for (const scope of scopes) {\n    for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n      set.add(key);\n    }\n  }\n  return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n  const {iScale} = meta;\n  const {key = 'r'} = this._parsing;\n  const parsed = new Array(count);\n  let i, ilen, index, item;\n  for (i = 0, ilen = count; i < ilen; ++i) {\n    index = i + start;\n    item = data[index];\n    parsed[i] = {\n      r: iScale.parse(resolveObjectKey(item, key), index)\n    };\n  }\n  return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i) => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis) => indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n  const previous = firstPoint.skip ? middlePoint : firstPoint;\n  const current = middlePoint;\n  const next = afterPoint.skip ? middlePoint : afterPoint;\n  const d01 = distanceBetweenPoints(current, previous);\n  const d12 = distanceBetweenPoints(next, current);\n  let s01 = d01 / (d01 + d12);\n  let s12 = d12 / (d01 + d12);\n  s01 = isNaN(s01) ? 0 : s01;\n  s12 = isNaN(s12) ? 0 : s12;\n  const fa = t * s01;\n  const fb = t * s12;\n  return {\n    previous: {\n      x: current.x - fa * (next.x - previous.x),\n      y: current.y - fa * (next.y - previous.y)\n    },\n    next: {\n      x: current.x + fb * (next.x - previous.x),\n      y: current.y + fb * (next.y - previous.y)\n    }\n  };\n}\nfunction monotoneAdjust(points, deltaK, mK) {\n  const pointsLen = points.length;\n  let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen - 1; ++i) {\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent || !pointAfter) {\n      continue;\n    }\n    if (almostEquals(deltaK[i], 0, EPSILON)) {\n      mK[i] = mK[i + 1] = 0;\n      continue;\n    }\n    alphaK = mK[i] / deltaK[i];\n    betaK = mK[i + 1] / deltaK[i];\n    squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n    if (squaredMagnitude <= 9) {\n      continue;\n    }\n    tauK = 3 / Math.sqrt(squaredMagnitude);\n    mK[i] = alphaK * tauK * deltaK[i];\n    mK[i + 1] = betaK * tauK * deltaK[i];\n  }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  let delta, pointBefore, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n    const iPixel = pointCurrent[indexAxis];\n    const vPixel = pointCurrent[valueAxis];\n    if (pointBefore) {\n      delta = (iPixel - pointBefore[indexAxis]) / 3;\n      pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n      pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n    }\n    if (pointAfter) {\n      delta = (pointAfter[indexAxis] - iPixel) / 3;\n      pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n      pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n    }\n  }\n}\nfunction splineCurveMonotone(points, indexAxis = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  const deltaK = Array(pointsLen).fill(0);\n  const mK = Array(pointsLen);\n  let i, pointBefore, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n    if (pointAfter) {\n      const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n      deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n    }\n    mK[i] = !pointBefore ? deltaK[i]\n      : !pointAfter ? deltaK[i - 1]\n      : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n      : (deltaK[i - 1] + deltaK[i]) / 2;\n  }\n  monotoneAdjust(points, deltaK, mK);\n  monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n  return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n  let i, ilen, point, inArea, inAreaPrev;\n  let inAreaNext = _isPointInArea(points[0], area);\n  for (i = 0, ilen = points.length; i < ilen; ++i) {\n    inAreaPrev = inArea;\n    inArea = inAreaNext;\n    inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n    if (!inArea) {\n      continue;\n    }\n    point = points[i];\n    if (inAreaPrev) {\n      point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n      point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n    }\n    if (inAreaNext) {\n      point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n      point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n    }\n  }\n}\nfunction _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n  let i, ilen, point, controlPoints;\n  if (options.spanGaps) {\n    points = points.filter((pt) => !pt.skip);\n  }\n  if (options.cubicInterpolationMode === 'monotone') {\n    splineCurveMonotone(points, indexAxis);\n  } else {\n    let prev = loop ? points[points.length - 1] : points[0];\n    for (i = 0, ilen = points.length; i < ilen; ++i) {\n      point = points[i];\n      controlPoints = splineCurve(\n        prev,\n        point,\n        points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n        options.tension\n      );\n      point.cp1x = controlPoints.previous.x;\n      point.cp1y = controlPoints.previous.y;\n      point.cp2x = controlPoints.next.x;\n      point.cp2y = controlPoints.next.y;\n      prev = point;\n    }\n  }\n  if (options.capBezierPoints) {\n    capBezierPoints(points, area);\n  }\n}\n\nfunction _isDomSupported() {\n  return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\nfunction _getParentNode(domNode) {\n  let parent = domNode.parentNode;\n  if (parent && parent.toString() === '[object ShadowRoot]') {\n    parent = parent.host;\n  }\n  return parent;\n}\nfunction parseMaxStyle(styleValue, node, parentProperty) {\n  let valueInPixels;\n  if (typeof styleValue === 'string') {\n    valueInPixels = parseInt(styleValue, 10);\n    if (styleValue.indexOf('%') !== -1) {\n      valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n    }\n  } else {\n    valueInPixels = styleValue;\n  }\n  return valueInPixels;\n}\nconst getComputedStyle = (element) => window.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n  return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles, style, suffix) {\n  const result = {};\n  suffix = suffix ? '-' + suffix : '';\n  for (let i = 0; i < 4; i++) {\n    const pos = positions[i];\n    result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n  }\n  result.width = result.left + result.right;\n  result.height = result.top + result.bottom;\n  return result;\n}\nconst useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot);\nfunction getCanvasPosition(e, canvas) {\n  const touches = e.touches;\n  const source = touches && touches.length ? touches[0] : e;\n  const {offsetX, offsetY} = source;\n  let box = false;\n  let x, y;\n  if (useOffsetPos(offsetX, offsetY, e.target)) {\n    x = offsetX;\n    y = offsetY;\n  } else {\n    const rect = canvas.getBoundingClientRect();\n    x = source.clientX - rect.left;\n    y = source.clientY - rect.top;\n    box = true;\n  }\n  return {x, y, box};\n}\nfunction getRelativePosition(evt, chart) {\n  if ('native' in evt) {\n    return evt;\n  }\n  const {canvas, currentDevicePixelRatio} = chart;\n  const style = getComputedStyle(canvas);\n  const borderBox = style.boxSizing === 'border-box';\n  const paddings = getPositionedStyle(style, 'padding');\n  const borders = getPositionedStyle(style, 'border', 'width');\n  const {x, y, box} = getCanvasPosition(evt, canvas);\n  const xOffset = paddings.left + (box && borders.left);\n  const yOffset = paddings.top + (box && borders.top);\n  let {width, height} = chart;\n  if (borderBox) {\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  return {\n    x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n    y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n  };\n}\nfunction getContainerSize(canvas, width, height) {\n  let maxWidth, maxHeight;\n  if (width === undefined || height === undefined) {\n    const container = _getParentNode(canvas);\n    if (!container) {\n      width = canvas.clientWidth;\n      height = canvas.clientHeight;\n    } else {\n      const rect = container.getBoundingClientRect();\n      const containerStyle = getComputedStyle(container);\n      const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n      const containerPadding = getPositionedStyle(containerStyle, 'padding');\n      width = rect.width - containerPadding.width - containerBorder.width;\n      height = rect.height - containerPadding.height - containerBorder.height;\n      maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n      maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n    }\n  }\n  return {\n    width,\n    height,\n    maxWidth: maxWidth || INFINITY,\n    maxHeight: maxHeight || INFINITY\n  };\n}\nconst round1 = v => Math.round(v * 10) / 10;\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n  const style = getComputedStyle(canvas);\n  const margins = getPositionedStyle(style, 'margin');\n  const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n  const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n  const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n  let {width, height} = containerSize;\n  if (style.boxSizing === 'content-box') {\n    const borders = getPositionedStyle(style, 'border', 'width');\n    const paddings = getPositionedStyle(style, 'padding');\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  width = Math.max(0, width - margins.width);\n  height = Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height - margins.height);\n  width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n  height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n  if (width && !height) {\n    height = round1(width / 2);\n  }\n  return {\n    width,\n    height\n  };\n}\nfunction retinaScale(chart, forceRatio, forceStyle) {\n  const pixelRatio = forceRatio || 1;\n  const deviceHeight = Math.floor(chart.height * pixelRatio);\n  const deviceWidth = Math.floor(chart.width * pixelRatio);\n  chart.height = deviceHeight / pixelRatio;\n  chart.width = deviceWidth / pixelRatio;\n  const canvas = chart.canvas;\n  if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n    canvas.style.height = `${chart.height}px`;\n    canvas.style.width = `${chart.width}px`;\n  }\n  if (chart.currentDevicePixelRatio !== pixelRatio\n      || canvas.height !== deviceHeight\n      || canvas.width !== deviceWidth) {\n    chart.currentDevicePixelRatio = pixelRatio;\n    canvas.height = deviceHeight;\n    canvas.width = deviceWidth;\n    chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n    return true;\n  }\n  return false;\n}\nconst supportsEventListenerOptions = (function() {\n  let passiveSupported = false;\n  try {\n    const options = {\n      get passive() {\n        passiveSupported = true;\n        return false;\n      }\n    };\n    window.addEventListener('test', null, options);\n    window.removeEventListener('test', null, options);\n  } catch (e) {\n  }\n  return passiveSupported;\n}());\nfunction readUsedSize(element, property) {\n  const value = getStyle(element, property);\n  const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n  return matches ? +matches[1] : undefined;\n}\n\nfunction _pointInLine(p1, p2, t, mode) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: p1.y + t * (p2.y - p1.y)\n  };\n}\nfunction _steppedInterpolation(p1, p2, t, mode) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n    : mode === 'after' ? t < 1 ? p1.y : p2.y\n    : t > 0 ? p2.y : p1.y\n  };\n}\nfunction _bezierInterpolation(p1, p2, t, mode) {\n  const cp1 = {x: p1.cp2x, y: p1.cp2y};\n  const cp2 = {x: p2.cp1x, y: p2.cp1y};\n  const a = _pointInLine(p1, cp1, t);\n  const b = _pointInLine(cp1, cp2, t);\n  const c = _pointInLine(cp2, p2, t);\n  const d = _pointInLine(a, b, t);\n  const e = _pointInLine(b, c, t);\n  return _pointInLine(d, e, t);\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n  options = options || {};\n  const cacheKey = locale + JSON.stringify(options);\n  let formatter = intlCache.get(cacheKey);\n  if (!formatter) {\n    formatter = new Intl.NumberFormat(locale, options);\n    intlCache.set(cacheKey, formatter);\n  }\n  return formatter;\n}\nfunction formatNumber(num, locale, options) {\n  return getNumberFormat(locale, options).format(num);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n  return {\n    x(x) {\n      return rectX + rectX + width - x;\n    },\n    setWidth(w) {\n      width = w;\n    },\n    textAlign(align) {\n      if (align === 'center') {\n        return align;\n      }\n      return align === 'right' ? 'left' : 'right';\n    },\n    xPlus(x, value) {\n      return x - value;\n    },\n    leftForLtr(x, itemWidth) {\n      return x - itemWidth;\n    },\n  };\n};\nconst getLeftToRightAdapter = function() {\n  return {\n    x(x) {\n      return x;\n    },\n    setWidth(w) {\n    },\n    textAlign(align) {\n      return align;\n    },\n    xPlus(x, value) {\n      return x + value;\n    },\n    leftForLtr(x, _itemWidth) {\n      return x;\n    },\n  };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n  return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n  let style, original;\n  if (direction === 'ltr' || direction === 'rtl') {\n    style = ctx.canvas.style;\n    original = [\n      style.getPropertyValue('direction'),\n      style.getPropertyPriority('direction'),\n    ];\n    style.setProperty('direction', direction, 'important');\n    ctx.prevTextDirection = original;\n  }\n}\nfunction restoreTextDirection(ctx, original) {\n  if (original !== undefined) {\n    delete ctx.prevTextDirection;\n    ctx.canvas.style.setProperty('direction', original[0], original[1]);\n  }\n}\n\nfunction propertyFn(property) {\n  if (property === 'angle') {\n    return {\n      between: _angleBetween,\n      compare: _angleDiff,\n      normalize: _normalizeAngle,\n    };\n  }\n  return {\n    between: _isBetween,\n    compare: (a, b) => a - b,\n    normalize: x => x\n  };\n}\nfunction normalizeSegment({start, end, count, loop, style}) {\n  return {\n    start: start % count,\n    end: end % count,\n    loop: loop && (end - start + 1) % count === 0,\n    style\n  };\n}\nfunction getSegment(segment, points, bounds) {\n  const {property, start: startBound, end: endBound} = bounds;\n  const {between, normalize} = propertyFn(property);\n  const count = points.length;\n  let {start, end, loop} = segment;\n  let i, ilen;\n  if (loop) {\n    start += count;\n    end += count;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n        break;\n      }\n      start--;\n      end--;\n    }\n    start %= count;\n    end %= count;\n  }\n  if (end < start) {\n    end += count;\n  }\n  return {start, end, loop, style: segment.style};\n}\nfunction _boundSegment(segment, points, bounds) {\n  if (!bounds) {\n    return [segment];\n  }\n  const {property, start: startBound, end: endBound} = bounds;\n  const count = points.length;\n  const {compare, between, normalize} = propertyFn(property);\n  const {start, end, loop, style} = getSegment(segment, points, bounds);\n  const result = [];\n  let inside = false;\n  let subStart = null;\n  let value, point, prevValue;\n  const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n  const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n  const shouldStart = () => inside || startIsBefore();\n  const shouldStop = () => !inside || endIsBefore();\n  for (let i = start, prev = start; i <= end; ++i) {\n    point = points[i % count];\n    if (point.skip) {\n      continue;\n    }\n    value = normalize(point[property]);\n    if (value === prevValue) {\n      continue;\n    }\n    inside = between(value, startBound, endBound);\n    if (subStart === null && shouldStart()) {\n      subStart = compare(value, startBound) === 0 ? i : prev;\n    }\n    if (subStart !== null && shouldStop()) {\n      result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n      subStart = null;\n    }\n    prev = i;\n    prevValue = value;\n  }\n  if (subStart !== null) {\n    result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n  }\n  return result;\n}\nfunction _boundSegments(line, bounds) {\n  const result = [];\n  const segments = line.segments;\n  for (let i = 0; i < segments.length; i++) {\n    const sub = _boundSegment(segments[i], line.points, bounds);\n    if (sub.length) {\n      result.push(...sub);\n    }\n  }\n  return result;\n}\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n  let start = 0;\n  let end = count - 1;\n  if (loop && !spanGaps) {\n    while (start < count && !points[start].skip) {\n      start++;\n    }\n  }\n  while (start < count && points[start].skip) {\n    start++;\n  }\n  start %= count;\n  if (loop) {\n    end += start;\n  }\n  while (end > start && points[end % count].skip) {\n    end--;\n  }\n  end %= count;\n  return {start, end};\n}\nfunction solidSegments(points, start, max, loop) {\n  const count = points.length;\n  const result = [];\n  let last = start;\n  let prev = points[start];\n  let end;\n  for (end = start + 1; end <= max; ++end) {\n    const cur = points[end % count];\n    if (cur.skip || cur.stop) {\n      if (!prev.skip) {\n        loop = false;\n        result.push({start: start % count, end: (end - 1) % count, loop});\n        start = last = cur.stop ? end : null;\n      }\n    } else {\n      last = end;\n      if (prev.skip) {\n        start = end;\n      }\n    }\n    prev = cur;\n  }\n  if (last !== null) {\n    result.push({start: start % count, end: last % count, loop});\n  }\n  return result;\n}\nfunction _computeSegments(line, segmentOptions) {\n  const points = line.points;\n  const spanGaps = line.options.spanGaps;\n  const count = points.length;\n  if (!count) {\n    return [];\n  }\n  const loop = !!line._loop;\n  const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n  if (spanGaps === true) {\n    return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n  }\n  const max = end < start ? end + count : end;\n  const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n  return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\nfunction splitByStyles(line, segments, points, segmentOptions) {\n  if (!segmentOptions || !segmentOptions.setContext || !points) {\n    return segments;\n  }\n  return doSplitByStyles(line, segments, points, segmentOptions);\n}\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n  const chartContext = line._chart.getContext();\n  const baseStyle = readStyle(line.options);\n  const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n  const count = points.length;\n  const result = [];\n  let prevStyle = baseStyle;\n  let start = segments[0].start;\n  let i = start;\n  function addStyle(s, e, l, st) {\n    const dir = spanGaps ? -1 : 1;\n    if (s === e) {\n      return;\n    }\n    s += count;\n    while (points[s % count].skip) {\n      s -= dir;\n    }\n    while (points[e % count].skip) {\n      e += dir;\n    }\n    if (s % count !== e % count) {\n      result.push({start: s % count, end: e % count, loop: l, style: st});\n      prevStyle = st;\n      start = e % count;\n    }\n  }\n  for (const segment of segments) {\n    start = spanGaps ? start : segment.start;\n    let prev = points[start % count];\n    let style;\n    for (i = start + 1; i <= segment.end; i++) {\n      const pt = points[i % count];\n      style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n        type: 'segment',\n        p0: prev,\n        p1: pt,\n        p0DataIndex: (i - 1) % count,\n        p1DataIndex: i % count,\n        datasetIndex\n      })));\n      if (styleChanged(style, prevStyle)) {\n        addStyle(start, i - 1, segment.loop, prevStyle);\n      }\n      prev = pt;\n      prevStyle = style;\n    }\n    if (start < i - 1) {\n      addStyle(start, i - 1, segment.loop, prevStyle);\n    }\n  }\n  return result;\n}\nfunction readStyle(options) {\n  return {\n    backgroundColor: options.backgroundColor,\n    borderCapStyle: options.borderCapStyle,\n    borderDash: options.borderDash,\n    borderDashOffset: options.borderDashOffset,\n    borderJoinStyle: options.borderJoinStyle,\n    borderWidth: options.borderWidth,\n    borderColor: options.borderColor\n  };\n}\nfunction styleChanged(style, prevStyle) {\n  return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);\n}\n\nexport { _isPointInArea as $, _factorize as A, finiteOrDefault as B, callback as C, _addGrace as D, _limitValue as E, toDegrees as F, _measureText as G, HALF_PI as H, _int16Range as I, _alignPixel as J, toPadding as K, clipArea as L, renderText as M, unclipArea as N, toFont as O, PI as P, each as Q, _toLeftRightCenter as R, _alignStartEnd as S, TAU as T, overrides as U, merge as V, _capitalize as W, getRelativePosition as X, _rlookupByKey as Y, _lookupByKey as Z, _arrayUnique as _, resolve as a, toLineHeight as a$, getAngleFromPoint as a0, getMaximumSize as a1, _getParentNode as a2, readUsedSize as a3, throttled as a4, supportsEventListenerOptions as a5, _isDomSupported as a6, descriptors as a7, isFunction as a8, _attachContext as a9, getRtlAdapter as aA, overrideTextDirection as aB, _textX as aC, restoreTextDirection as aD, drawPointLegend as aE, noop as aF, distanceBetweenPoints as aG, _setMinAndMaxByKey as aH, niceNum as aI, almostWhole as aJ, almostEquals as aK, _decimalPlaces as aL, _longestText as aM, _filterBetween as aN, _lookup as aO, isPatternOrGradient as aP, getHoverColor as aQ, clone$1 as aR, _merger as aS, _mergerIf as aT, _deprecated as aU, _splitKey as aV, toFontString as aW, splineCurve as aX, splineCurveMonotone as aY, getStyle as aZ, fontString as a_, _createResolver as aa, _descriptors as ab, mergeIf as ac, uid as ad, debounce as ae, retinaScale as af, clearCanvas as ag, setsEqual as ah, _elementsEqual as ai, _isClickEvent as aj, _isBetween as ak, _readValueToProps as al, _updateBezierControlPoints as am, _computeSegments as an, _boundSegments as ao, _steppedInterpolation as ap, _bezierInterpolation as aq, _pointInLine as ar, _steppedLineTo as as, _bezierCurveTo as at, drawPoint as au, addRoundedRectPath as av, toTRBL as aw, toTRBLCorners as ax, _boundSegment as ay, _normalizeAngle as az, isArray as b, PITAU as b0, INFINITY as b1, RAD_PER_DEG as b2, QUARTER_PI as b3, TWO_THIRDS_PI as b4, _angleDiff as b5, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, createContext as h, isObject as i, defined as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, log10 as z };\n", "import ApplicationController from '../../controllers/application_controller'\nimport Cropper from 'cropperjs'\n\nexport default class extends ApplicationController {\n  static targets = ['init', 'image', 'editActions']\n  static values = {\n    contentType: String,\n  }\n\n  initCropper() {\n    if (this.cropper) return\n\n    this.cropper = new Cropper(this.imageTarget, {\n      aspectRatio: 16 / 9,\n    })\n\n    this.editActionsTarget.classList.remove('hidden')\n    this.initTarget.classList.add('hidden')\n  }\n\n  commit() {\n    this.editActionsTarget.classList.add('hidden')\n    this.initTarget.classList.remove('hidden')\n    this.cropper.getCroppedCanvas().toBlob((blob) => {\n      this.dispatch('crop', {\n        detail: {\n          blob,\n        },\n        bubbles: true,\n      })\n    }, this.contentTypeValue)\n  }\n\n  cancel() {\n    this.cropper.destroy()\n    this.cropper = null\n    this.editActionsTarget.classList.add('hidden')\n    this.initTarget.classList.remove('hidden')\n  }\n\n  disconnect() {\n    if (this.cropper) {\n      this.cropper.destroy()\n      this.cropper = null\n    }\n  }\n}\n", "import ApplicationController from '../../controllers/application_controller'\nimport { toast } from '../../utils/toast'\n\nexport default class extends ApplicationController {\n  static values = {\n    type: { type: String, default: 'notice' },\n    message: String,\n  }\n\n  toast() {\n    toast(this.typeValue, this.messageValue, 'flash')\n  }\n}\n", "import ApplicationController from '../../controllers/application_controller'\nimport { DirectUpload } from '@rails/activestorage'\nimport { toast } from '../../utils/toast'\nimport { i18n } from '../../i18n-js/config'\n\nexport default class extends ApplicationController {\n  static targets = ['input', 'preview', 'previewItem', 'fileSelectButton', 'fileSelectButtonTooltip']\n\n  static values = {\n    url: String,\n    signedIdFieldName: { type: String, default: 'image_ids[]' },\n    fileLimit: Number,\n    locale: { type: String, default: 'en' },\n  }\n\n  static classes = ['fileSelectButtonDisabled']\n\n  maxFileSize = 1024 * 1024 * 10\n\n  connect() {\n    this.uploadQueueAbortController = new AbortController()\n    this.uploadQueue = new Map()\n    this.uploadInProgress = false\n  }\n\n  disconnect() {\n    this.cancelUploadQueue()\n  }\n\n  previewItemTargetConnected() {\n    if (!this.hasFileLimitValue) return\n\n    if (this.previewItemTargets.length >= this.fileLimitValue) {\n      this.disableUploadInput()\n    }\n  }\n\n  previewItemTargetDisconnected() {\n    if (!this.hasFileLimitValue) return\n\n    if (this.previewItemTargets.length < this.fileLimitValue) {\n      this.enableUploadInput()\n    }\n  }\n\n  disableUploadInput() {\n    this.inputTarget.disabled = true\n\n    if (this.hasFileSelectButtonTarget) {\n      this.fileSelectButtonTarget.classList.add(...this.fileSelectButtonDisabledClasses)\n    }\n\n    if (this.hasFileSelectButtonTooltipTarget && this.fileSelectButtonTooltipTarget.dataset.disabledText) {\n      this.fileSelectButtonTooltipTarget.textContent = this.fileSelectButtonTooltipTarget.dataset.disabledText\n    }\n  }\n\n  enableUploadInput() {\n    this.inputTarget.disabled = false\n\n    if (this.hasFileSelectButtonTarget) {\n      this.fileSelectButtonTarget.classList.remove(...this.fileSelectButtonDisabledClasses)\n    }\n\n    if (this.hasFileSelectButtonTooltipTarget && this.fileSelectButtonTooltipTarget.dataset.enabledText) {\n      this.fileSelectButtonTooltipTarget.textContent = this.fileSelectButtonTooltipTarget.dataset.enabledText\n    }\n  }\n\n  cancelUploadQueue() {\n    this.uploadQueueAbortController.abort()\n    this.uploadQueue.clear()\n    this.uploadInProgress = false\n  }\n\n  async handleFileSelect(event) {\n    let files = Array.from(event.target.files)\n    const existingAttachments = this.previewItemTargets.length\n    const totalImages = existingAttachments + files.length\n\n    if (this.hasFileLimitValue && totalImages > this.fileLimitValue) {\n      toast(\n        'alert',\n        i18n.t('direct_image_uploads_controller.limit_exceeded', { lng: this.localeValue, limit: this.fileLimitValue }),\n        'flash'\n      )\n      files = files.slice(0, this.fileLimitValue - existingAttachments)\n    }\n\n    files.forEach((file) => {\n      if (!this.fileIsValid(file)) return\n\n      const attachment = { file, abortController: new AbortController() }\n      this.uploadQueue.set(this.generateHash(file.name), attachment)\n\n      this.createPreviewElement(file)\n    })\n\n    this.dispatch('process-queue-start')\n    try {\n      await this.processUploadQueue()\n    } finally {\n      this.uploadQueue.clear()\n      this.dispatch('process-queue-end')\n    }\n  }\n\n  fileIsValid(file) {\n    if (file.size > this.maxFileSize) {\n      toast('alert', i18n.t('direct_image_uploads_controller.too_large', { lng: this.localeValue }), 'flash')\n      return false\n    }\n    return true\n  }\n\n  /* eslint-disable max-len */\n  createPreviewElement(file) {\n    const reader = new FileReader()\n    reader.onload = (e) => {\n      const previewId = this.generateHash(file.name)\n      const previewHtml = `\n        <div data-preview-item-id=\"${previewId}\" class=\"image-preview-item relative group/item shrink-0\" data-testid=\"image-preview\" data-direct-image-uploads-target=\"previewItem\">\n          <img src=\"${e.target.result}\" class=\"rounded-xs size-24 object-cover\">\n          <div data-upload-overlay class=\"absolute top-0 right-0 left-0 bottom-0 bg-black/50 flex items-center justify-center rounded-xs\">\n            <wa-spinner style=\"--indicator-color: var(--cfcc-color-brand-500); --track-color: var(--cfcc-color-brand-300); font-size: 2rem;\"></wa-spinner>\n          </div>\n          <button\n            type=\"button\"\n            class=\"text-white flex items-center justify-center absolute top-0 right-0 lg:opacity-0 lg:group-hover/item:opacity-100\"\n            data-action=\"click->direct-image-uploads#removeImage\"\n            data-testid=\"remove-image-button\"\n            data-preview-id=\"${previewId}\">\n              <i class=\"fa-duotone fa-solid fa-circle-xmark rounded-full border-black border\" style=\"--fa-primary-color: #000; --fa-secondary-color: #FFF; --fa-secondary-opacity: 1;\"></i>\n          </button>\n        </div>\n      `\n      this.previewTarget.insertAdjacentHTML('beforeend', previewHtml)\n    }\n    reader.readAsDataURL(file)\n  }\n  /* eslint-enable max-len */\n\n  async processUploadQueue() {\n    if (this.uploadQueue.size <= 0 || this.uploadQueueAbortController.signal.aborted) {\n      return Promise.resolve()\n    }\n\n    const uploadPromises = []\n\n    for (const [key, attachment] of this.uploadQueue) {\n      const { file, abortController } = attachment\n\n      // Cancel Upload if abort signal is received\n      if (abortController.signal.aborted || this.uploadQueueAbortController.signal.aborted) {\n        this.uploadQueue.delete(key)\n        continue\n      }\n\n      uploadPromises.push(\n        (async () => {\n          try {\n            this.uploadInProgress = true\n            const signedId = await this.uploadFile(file)\n            this.addSignedIdToForm(file, signedId)\n            this.updatePreviewStatus(file)\n          } catch (error) {\n            if (error.message === 'Upload aborted') {\n              console.warn('Upload aborted:', error)\n            } else {\n              console.error('Upload failed:', error)\n            }\n\n            this.updatePreviewStatus(file)\n          } finally {\n            this.uploadQueue.delete(key)\n            this.uploadInProgress = false\n          }\n        })()\n      )\n    }\n\n    await Promise.all(uploadPromises)\n  }\n\n  uploadFile(file) {\n    return new Promise((resolve, reject) => {\n      const upload = new DirectUpload(file, this.urlValue, {\n        directUploadWillStoreFileWithXHR: (xhr) => {\n          const key = this.generateHash(file.name)\n          const attachment = this.uploadQueue.get(key)\n\n          if (!attachment) return\n\n          // Abort upload if abort signal is received\n          if (attachment.abortController.signal.aborted || this.uploadQueueAbortController.signal.aborted) {\n            xhr.abort()\n            reject(new Error('Upload aborted'))\n          } else {\n            // store xhr to cancel later\n            attachment.xhr = xhr\n            attachment.reject = reject\n            this.uploadQueue.set(key, attachment)\n          }\n        },\n      })\n      upload.create((error, blob) => {\n        if (error) {\n          reject(error)\n        } else {\n          resolve(blob.signed_id)\n        }\n      })\n    })\n  }\n\n  addSignedIdToForm(file, signedId) {\n    const previewId = this.generateHash(file.name)\n    const input = document.createElement('input')\n    input.type = 'hidden'\n    input.name = this.signedIdFieldNameValue\n    input.value = signedId\n    this.previewTarget.querySelector(`[data-preview-item-id=\"${previewId}\"]`)?.appendChild(input)\n  }\n\n  updatePreviewStatus(file) {\n    const fileHash = this.generateHash(file.name)\n    const previewElement = this.previewTarget.querySelector(`[data-preview-item-id=\"${fileHash}\"]`)\n\n    if (previewElement) {\n      previewElement.querySelector('[data-upload-overlay]').remove()\n    }\n  }\n\n  removeImage(event) {\n    const previewId = event.currentTarget.dataset.previewId\n    const previewElement = this.previewItemTargets.find((target) => target.dataset.previewItemId === previewId)\n\n    if (previewElement) previewElement.remove()\n\n    this.cancelUploadForImage(previewId)\n  }\n\n  cancelUploadForImage(key) {\n    const { abortController, xhr, reject } = this.uploadQueue.get(key) || {}\n\n    // Already processed\n    if (!abortController) return\n\n    // if currently uploading, abort\n    if (xhr && reject) {\n      xhr.abort()\n      reject(new Error('Upload aborted'))\n    }\n\n    abortController.abort()\n  }\n\n  generateHash(filename) {\n    let hash = 0\n    for (let i = 0; i < filename.length; i++) {\n      const char = filename.charCodeAt(i)\n      hash = (hash << 5) - hash + char\n      hash = hash & hash\n    }\n    return `preview-${Math.abs(hash).toString(16)}`\n  }\n}\n", "import ApplicationController from '../../controllers/application_controller'\nimport lightGallery from 'lightgallery'\nimport lgZoom from 'lightgallery/plugins/zoom'\nimport lgVideo from 'lightgallery/plugins/video'\n\nexport default class extends ApplicationController {\n  static values = {\n    options: Object,\n  }\n\n  licenseKey = '481CF2E8-EBC6-4E56-A0E3-57D880CC8865'\n\n  connect() {\n    this.lightGallery = lightGallery(this.element, {\n      ...this.defaultOptions,\n      ...this.optionsValue,\n    })\n    this.element.addEventListener('lgBeforeOpen', this.moveIntoModal)\n    document.addEventListener('keydown', this.closeOnEscape, true)\n  }\n\n  disconnect() {\n    this.element.removeEventListener('lgBeforeOpen', this.moveIntoModal)\n    document.removeEventListener('keydown', this.closeOnEscape, true)\n    this.lightGallery.destroy()\n  }\n\n  // A modal wa-dialog/wa-drawer sits in the browser's top layer and makes the rest of the\n  // page inert, so the gallery (appended to <body> by default) has to live inside it.\n  moveIntoModal = () => {\n    const modal = this.element.closest('wa-dialog, wa-drawer')\n    if (modal) modal.append(this.lightGallery.$container.get())\n  }\n\n  // The modal's own Escape handler stops propagation before lightGallery's window listener\n  // sees it, which closes the modal instead of the gallery.\n  closeOnEscape = (event) => {\n    if (event.key !== 'Escape' || !this.lightGallery.lgOpened) return\n\n    event.preventDefault()\n    event.stopPropagation()\n    this.lightGallery.closeGallery()\n  }\n\n  get defaultOptions() {\n    return {\n      selector: 'a',\n      plugins: [lgZoom, lgVideo],\n      videojs: true,\n      gotoNextSlideOnVideoEnd: false,\n      licenseKey: this.licenseKey,\n      download: false,\n      mobileSettings: {\n        controls: false,\n        showCloseIcon: true,\n      },\n    }\n  }\n}\n", "import { LightGallery } from './lightgallery';\nimport { VideoSource } from './plugins/video/types';\n\n/**\n * List of lightGallery events\n * All events should be documented here\n * Below interfaces are used to build the website documentations\n * */\nexport const lGEvents: {\n    [key: string]: string;\n} = {\n    afterAppendSlide: 'lgAfterAppendSlide',\n    init: 'lgInit',\n    hasVideo: 'lgHasVideo',\n    containerResize: 'lgContainerResize',\n    updateSlides: 'lgUpdateSlides',\n    afterAppendSubHtml: 'lgAfterAppendSubHtml',\n    beforeOpen: 'lgBeforeOpen',\n    afterOpen: 'lgAfterOpen',\n    slideItemLoad: 'lgSlideItemLoad',\n    beforeSlide: 'lgBeforeSlide',\n    afterSlide: 'lgAfterSlide',\n    posterClick: 'lgPosterClick',\n    dragStart: 'lgDragStart',\n    dragMove: 'lgDragMove',\n    dragEnd: 'lgDragEnd',\n    beforeNextSlide: 'lgBeforeNextSlide',\n    beforePrevSlide: 'lgBeforePrevSlide',\n    beforeClose: 'lgBeforeClose',\n    afterClose: 'lgAfterClose',\n    rotateLeft: 'lgRotateLeft',\n    rotateRight: 'lgRotateRight',\n    flipHorizontal: 'lgFlipHorizontal',\n    flipVertical: 'lgFlipVertical',\n    autoplay: 'lgAutoplay',\n    autoplayStart: 'lgAutoplayStart',\n    autoplayStop: 'lgAutoplayStop',\n};\n\n// Follow the below format for the event documentation\n// @method is the method name when event is used with Angular/React components\n\n/**\n * Fired only once when lightGallery is initialized\n * @name lgInit\n * @method onInit\n * @example\n *   const lg = document.getElementById('custom-events-demo');\n *   // Perform any action on lightGallery initialization.\n *   // Init event returns the plugin instance that can be used to call any lightGalley public method\n *   let pluginInstance = null;\n *   lg.addEventListener('lgInit', (event) => {\n *      pluginInstance = event.detail.instance;\n *   });\n *   lightGallery(lg);\n * @see <a href=\"/docs/methods\">Methods<a>\n */\nexport interface InitDetail {\n    /**\n     * lightGallery plugin instance\n     */\n    instance: LightGallery;\n}\n\n/**\n * Fired when the slide content has been inserted into it's slide container.\n * @name lgAfterAppendSlide\n * @method onAfterAppendSlide\n */\nexport interface AfterAppendSlideEventDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n}\n\n/**\n * Fired immediately before opening the gallery\n * @name lgBeforeOpen\n * @method onBeforeOpen\n */\nexport interface BeforeOpenDetail {}\n\n/**\n * Fired immediately after opening the gallery\n * @name lgAfterOpen\n * @method onAfterOpen\n */\nexport interface AfterOpenDetail {}\n\n/**\n * Fired once the media inside the slide has been completely loaded .\n * @name lgSlideItemLoad\n * @method onSlideItemLoad\n */\nexport interface SlideItemLoadDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n    /**\n     * For the first slide, lightGallery adds some delay for displaying the loaded slide item.\n     * This delay is required for the transition effect when the slide item is displayed\n     * Respect the delay when you use this event\n     */\n    delay: number;\n\n    // Will be true for the first slide\n    isFirstSlide: boolean;\n}\n\n/**\n * Fired immediately before each slide transition.\n * @name lgBeforeSlide\n * @method onBeforeSlide\n * @example\n *   const lg = document.getElementById('custom-events-demo');\n *   // Perform any action before each slide transition\n *   lg.addEventListener('lgBeforeSlide', (event) => {\n *       const { index, prevIndex } = event.detail;\n *       alert(index, prevIndex);\n *   });\n *   lightGallery(lg);\n */\nexport interface BeforeSlideDetail {\n    /**\n     * Index of the previous slide\n     */\n    prevIndex: number;\n    /**\n     * Index of the slide\n     */\n    index: number;\n    /**\n     * true if slide function called via touch event or mouse drag\n     */\n    fromTouch: boolean;\n    /**\n     * true if slide function called via thumbnail click\n     */\n    fromThumb: boolean;\n}\n\n/**\n * Fired immediately after each slide transition.\n * @name lgAfterSlide\n * @method onAfterSlide\n */\nexport interface AfterSlideDetail {\n    /**\n     * Index of the previous slide\n     */\n    prevIndex: number;\n    /**\n     * Index of the slide\n     */\n    index: number;\n    /**\n     * true if slide function called via touch event or mouse drag\n     */\n    fromTouch: boolean;\n    /**\n     * true if slide function called via thumbnail click\n     */\n    fromThumb: boolean;\n}\n\n/**\n * Fired when the video poster is clicked.\n * @name lgPosterClick\n * @method onPosterClick\n */\nexport interface PosterClickDetail {}\n\n/**\n * Fired when the drag event to move to different slide starts.\n * @name lgDragStart\n * @method onDragStart\n */\nexport interface DragStartDetail {}\n\n/**\n * Fired periodically during the drag operation.\n * @name lgDragMove\n * @method onDragMove\n */\nexport interface DragMoveDetail {}\n\n/**\n * Fired when the user has finished the drag operation\n * @name lgDragEnd\n * @method onDragEnd\n */\nexport interface DragEndDetail {}\n\n/**\n * Fired immediately before the start of the close process.\n * @name lgBeforeClose\n * @method onBeforeClose\n */\nexport interface BeforeCloseDetail {}\n\n/**\n * Fired immediately once lightGallery is closed.\n * @name lgAfterClose\n * @method onAfterClose\n */\nexport interface AfterCloseDetail {\n    /**\n     * lightGallery plugin instance\n     */\n    instance: LightGallery;\n}\n\n/**\n * Fired immediately before each \"next\" slide transition\n * @name lgBeforeNextSlide\n * @method onBeforeNextSlide\n */\nexport interface BeforeNextSlideDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n    /**\n     * true if slide function called via touch event or mouse drag\n     */\n    fromTouch: boolean;\n}\n\n/**\n * Fired immediately before each \"prev\" slide transition\n * @name lgBeforePrevSlide\n * @method onBeforePrevSlide\n */\nexport interface BeforePrevSlideDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n    /**\n     * true if slide function called via touch event or mouse drag\n     */\n    fromTouch: boolean;\n}\n\n/**\n * Fired when the sub-html content (ex : title/ description) has been appended into the slide.\n * @name lgAfterAppendSubHtml\n * @method onAfterAppendSubHtml\n */\nexport interface AfterAppendSubHtmlDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n}\n\n/**\n * Fired when the lightGallery container has been resized.\n * @name lgContainerResize\n * @method onContainerResize\n */\nexport interface ContainerResizeDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n}\n\n/**\n * Fired when lightGallery detects video slide\n * @name lgHasVideo\n * @method onHasVideo\n */\nexport interface HasVideoDetail {\n    /**\n     * Index of the slide,\n     */\n    index: number;\n    /**\n     * Video source\n     */\n    src: string;\n    /**\n     * HTML5 video source if available\n     * <p>\n       HTML5 video source = source: {\n            src: string;\n            type: string;\n        }[];\n        attributes: HTMLVideoElement;\n     * </p>\n     */\n    html5Video: VideoSource;\n    /**\n     * True if video has poster\n     */\n    hasPoster: boolean;\n}\n\n/**\n * Fired when the image is rotated in anticlockwise direction\n * @name lgRotateLeft\n * @method onRotateLeft\n */\nexport interface RotateLeftDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n}\n\n/**\n * Fired when the image is rotated in clockwise direction\n * @name lgRotateRight\n * @method onRotateRight\n */\nexport interface RotateRightDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n}\n\n/**\n * Fired when the image is flipped horizontally\n * @name lgFlipHorizontal\n * @method onFlipHorizontal\n */\nexport interface FlipHorizontalDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n}\n\n/**\n * Fired when the image is flipped vertically\n * @name lgFlipVertical\n * @method onFlipVertical\n */\nexport interface FlipVerticalDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n}\n", "import { GalleryItem } from './lg-utils';\nimport { LgQuery } from './lgQuery';\nimport { LightGallery } from './lightgallery';\nimport { AutoplaySettings } from './plugins/autoplay/lg-autoplay-settings';\nimport { CommentSettings } from './plugins/comment/lg-comment-settings';\nimport { FullscreenSettings } from './plugins/fullscreen/lg-fullscreen-settings';\nimport { HashSettings } from './plugins/hash/lg-hash-settings';\nimport { PagerSettings } from './plugins/pager/lg-pager-settings';\nimport { RotateSettings } from './plugins/rotate/lg-rotate-settings';\nimport { ShareSettings } from './plugins/share/lg-share-settings';\nimport { ThumbnailsSettings } from './plugins/thumbnail/lg-thumbnail-settings';\nimport { VideoSettings } from './plugins/video/lg-video-settings';\nimport { ZoomSettings } from './plugins/zoom/lg-zoom-settings';\n\ntype LightGalleryCoreMobileSettings = Exclude<\n    LightGalleryCoreSettings,\n    'mobileSettings'\n>;\n\n// @todo use separate mobile settings for plugins\nexport interface MobileSettings\n    extends LightGalleryCoreMobileSettings,\n        Partial<ZoomSettings>,\n        Partial<ThumbnailsSettings>,\n        Partial<VideoSettings>,\n        Partial<AutoplaySettings>,\n        Partial<CommentSettings>,\n        Partial<FullscreenSettings>,\n        Partial<HashSettings>,\n        Partial<PagerSettings>,\n        Partial<RotateSettings>,\n        Partial<ShareSettings> {}\n\nexport interface LightGalleryCoreStrings {\n    closeGallery: string;\n    toggleMaximize: string;\n    previousSlide: string;\n    nextSlide: string;\n    download: string;\n    playVideo: string;\n    mediaLoadingFailed: string;\n}\n\nexport type LightGalleryAllSettings = LightGalleryCoreSettings &\n    ZoomSettings &\n    ThumbnailsSettings &\n    VideoSettings &\n    AutoplaySettings &\n    CommentSettings &\n    FullscreenSettings &\n    HashSettings &\n    PagerSettings &\n    RotateSettings &\n    ShareSettings;\n\nexport type LightGallerySettings = Partial<LightGalleryAllSettings>;\n\nexport interface LightGalleryCoreSettings {\n    /**\n     * Type of transition between images.\n     */\n    mode:\n        | 'lg-slide'\n        | 'lg-fade'\n        | 'lg-zoom-in'\n        | 'lg-zoom-in-big'\n        | 'lg-zoom-out'\n        | 'lg-zoom-out-big'\n        | 'lg-zoom-out-in'\n        | 'lg-zoom-in-out'\n        | 'lg-soft-zoom'\n        | 'lg-scale-up'\n        | 'lg-slide-circular'\n        | 'lg-slide-circular-vertical'\n        | 'lg-slide-vertical'\n        | 'lg-slide-vertical-growth'\n        | 'lg-slide-skew-only'\n        | 'lg-slide-skew-only-rev'\n        | 'lg-slide-skew-only-y'\n        | 'lg-slide-skew-only-y-rev'\n        | 'lg-slide-skew'\n        | 'lg-slide-skew-rev'\n        | 'lg-slide-skew-cross'\n        | 'lg-slide-skew-cross-rev'\n        | 'lg-slide-skew-ver'\n        | 'lg-slide-skew-ver-rev'\n        | 'lg-slide-skew-ver-cross'\n        | 'lg-slide-skew-ver-cross-rev'\n        | 'lg-lollipop'\n        | 'lg-lollipop-rev'\n        | 'lg-rotate'\n        | 'lg-rotate-rev'\n        | 'lg-tube';\n\n    /**\n     * Slide animation CSS easing property\n     */\n    easing: string;\n\n    /**\n     *Transition duration (in ms).\n     */\n    speed: number;\n\n    /**\n     * If you are using lightGallery for commercial projects, you need to purchase a commercial license\n     * to get the license key. For projects that are compatible with GPLv3 license,\n     * please contact us for getting a license key at <a href=\"mailto:contact@lightgalleryjs.com\">contact@lightgalleryjs.com</a>.\n     * If you want to test lightGallery before purchasing a commercial license, you can\n     * use `0000-0000-000-0000` as a temporary license key\n     */\n\n    licenseKey: string;\n\n    /**\n     * Height of the gallery.\n     * example '100%' , '300px'\n     */\n    height: string;\n\n    /**\n     * Width of the gallery.\n     * example '100%' , '300px'\n     */\n    width: string;\n\n    /**\n     * Add custom class for gallery container\n     * This can be used to set different style for different galleries\n     */\n    addClass: string;\n\n    /**\n     * Start animation class for the gallery.\n     * @description\n     * <ul>\n     * <li>startClass will be empty zoomFromOrigin is true.</li>\n     * <li>This can be used to change the starting effect when the image is loaded</li>\n     * <li>This is also applied when navigating to new slides</li>\n     * </ul>\n     */\n    startClass: string;\n\n    /**\n     * Enable zoom from origin effect.\n     * @description You need to know the original image size upfront and provide it via data-lg-size attribute as <code> data-lg-size=\"1920-1280</code>\"\n     *\n     * If you don't know, the size of a few images in the list, you can skip the data-lg-size attribute for the particular slides,\n     * lightGallery will show the default animation if data-lg-size is not available\n     *\n     * If you are using responsive images,\n     * you can pass a comma separated list of sizes combined with a max-width (up to what size the particular image should be used)\n     *\n     * example -\n     * <code> data-lg-size=\"240-160-375, 400-267-480, 1600-1067\"\n     * data-responsive=\"img-240.jpg 375, img-400.jpg 480\"\n     * data-src=\"img-1600.jpg\" </code>\n     *\n     * In the above example, upto 375 width img.240.jpg and lg-size 240-160 will be used.\n     * Similarly, upto 480 pixel width size 400-267 and img-400.jpg will be used\n     * And above 480, lg-size 1600-1067 and img-1600.jpg will be used\n     *\n     * <ul>\n     * <li>At the moment, zoomFromOrigin options is supported only for image slides.</li>\n     * <li>Will be false if dynamic option is enabled or galleryID found in the URL.</li>\n     * <li>startClass will be empty if zoomFromOrigin is true to avoid css conflicts.</li>\n     * </ul>\n     */\n    zoomFromOrigin: boolean;\n\n    /**\n     * Zoom from image animation duration\n     */\n    startAnimationDuration: number;\n\n    /**\n     * Backdrop transition duration.\n     * Note - Do not change the value of backdrop via css.\n     */\n    backdropDuration: number;\n\n    /**\n     * Configure where the gallery should be appended.\n     * Useful to create inline galleries and more\n     * It is an empty string in the default settings and later assigned to document.body to avoid accessing document for SSR\n     */\n    container: HTMLElement | '';\n\n    /**\n     * Delay for hiding gallery controls in ms.\n     * Pass <code>0</code> if you don't want to hide the controls\n     */\n    hideBarsDelay: number;\n\n    /**\n     * Delay in hiding controls for the first time when gallery is opened\n     */\n    showBarsAfter: number;\n\n    /**\n     * Delay slide transitions.\n     * @description This is useful if you want to do any action in the current slide before moving to next slide.\n     * <section>\n     * For example, fading out the captions before going to next slide.\n     * <code>.lg-slide-progress</code> class name is added to the current slide immediately after calling the slide method.\n     * But transition begins only after the delay\n     * </section>\n     */\n    slideDelay: number;\n\n    /**\n     * Support legacy browsers\n     * @description Currently this is used only for adding support to srcset attribute via picturefill library\n     * If true lightGallery will show warning message to include picturefill library\n     */\n    supportLegacyBrowser: boolean;\n\n    /**\n     * If true, toolbar, captions and thumbnails will not overlap with media element\n     * This will not effect thumbnails if animateThumb is false\n     * Also, toggle thumbnails button is not displayed if allowMediaOverlap is false\n     * <section>\n     * Note - Changing the position of the media on every slide transition creates a flickering effect.\n     * Therefore, the height of the caption is calculated dynamically, only once based on the first slide caption.\n     * </section>\n     * <section>\n     * if you have dynamic captions for each media,\n     * you can provide an appropriate height for the captions via allowMediaOverlap option\n     * </section>\n     */\n    allowMediaOverlap: boolean;\n\n    /**\n     * Video max size.\n     * @description This can be over-written by passing specific size via data-lg-size attribute\n     * Recommended video resolution and & aspect ratios <a href=\"https://support.google.com/youtube/answer/6375112\">https://support.google.com/youtube/answer/6375112</a>\n     */\n    videoMaxSize: string;\n\n    /**\n     * Automatically load poster image for YouTube videos\n     */\n    loadYouTubePoster: boolean;\n\n    /**\n     * Height of the caption for calculating allowMediaOverlap positions\n     * Note - this is only used to find the position of media item if allowMediaOverlap is true.\n     * Not for setting height of the captions\n     * Set 0 if you want to calculate the height of captions dynamically\n     */\n    defaultCaptionHeight: number;\n\n    /**\n     * aria-labelledby attribute fot gallery\n     */\n    ariaLabelledby: string;\n\n    /**\n     * aria-describedby attribute for gallery\n     */\n    ariaDescribedby: string;\n\n    /**\n     * Hide scrollbar when gallery is opened\n     * @version V2.5.0\n     */\n    hideScrollbar: boolean;\n\n    /**\n     * Reset to previous scrollPosition when lightGallery is closed\n     * @description By default, lightGallery doesn't hide the scrollbar for a smooth opening transition.\n     * If a user changes the scroll position, lightGallery resets it to the previous value\n     * @version V2.5.0\n     */\n    resetScrollPosition: boolean;\n\n    /**\n     * If false user won't be abel to close the gallery at all\n     * This is useful for creating inline galleries.\n     */\n    closable: boolean;\n\n    /**\n     * allows vertical drag/swipe to close gallery\n     * <code>false</code> if option <code>closable</code> is <code>false</code>\n     */\n    swipeToClose: boolean;\n    /**\n     * allows clicks on black area to close gallery.\n     */\n    closeOnTap: boolean;\n\n    /**\n     * If false, close button won't be displayed.\n     * Useful for creating inline galleries.\n     */\n    showCloseIcon: boolean;\n\n    /**\n     * Show maximize icon.\n     * Useful for creating inline galleries.\n     */\n    showMaximizeIcon: boolean;\n\n    /**\n     * If false, will disable the ability to loop back to the beginning of the gallery from the last slide.\n     */\n    loop: boolean;\n\n    /**\n     * Whether the LightGallery could be closed by pressing the \"Esc\" key.\n     */\n    escKey: boolean;\n\n    /**\n     * Enable keyboard navigation\n     */\n    keyPress: boolean;\n\n    /**\n     * Trap focus within the lightGallery\n     * @version V2.5.0\n     */\n    trapFocus: boolean;\n\n    /**\n     * If false, prev/next buttons will not be displayed.\n     */\n    controls: boolean;\n\n    /**\n     * Enable slideEnd animation\n     */\n    slideEndAnimation: boolean;\n\n    /**\n     * If true, prev/next button will be hidden on first/last image.\n     * @description Note - this option will be ignored if <code>loop</code> or <code>slideEndAnimation</code> is set to true\n     */\n    hideControlOnEnd: boolean;\n\n    /**\n     * ability to navigate to next/prev slides on mousewheel\n     */\n    mousewheel: boolean;\n\n    /**\n     * Option to get captions from alt or title tags.\n     */\n    getCaptionFromTitleOrAlt: boolean;\n\n    /**\n     * control where the sub-html should be appended.\n     * If you choose '.lg-outer', you are responsible for placing the div at the right position.\n     * '.lg-outer' is useful if you want show custom HTML outside the normal gallery\n     */\n    appendSubHtmlTo: '.lg-sub-html' | '.lg-item' | '.lg-outer';\n\n    /**\n     * Set to true if the selector in \"data-sub-html\" should use the current item as its origin.\n     */\n    subHtmlSelectorRelative: boolean;\n\n    /**\n     * number of preload slides\n     * @description will exicute only after the current slide is fully loaded.\n     * for example, if you click on 4th image and if preload = 1 then 3rd slide and 5th\n     * slide will be loaded in the background after the 4th slide is fully loaded..\n     * if preload is 2 then 2nd 3rd 5th 6th slides will be preloaded.\n     */\n    preload: number;\n\n    /**\n     * Control how many slide items should be kept in dom at a time\n     * @description To improve performance by reducing number of gallery items in the dom,\n     * lightGallery keeps only the lowest possible number of slides in the dom at a time.\n     * This has a minimum value of 3\n     */\n    numberOfSlideItemsInDom: number;\n\n    /**\n     * Custom selector property instead of direct children.\n     * @description Based on your markup structure, you can specify custom selectors to fetch media data for the gallery\n     * Pass \"this\" to select same element\n     * You can also pass HTMLCollection directly\n     * Example - '.my-selector' | '#my-selector' | this | document.querySelectorAll('.my-selector')\n     */\n    selector: string | HTMLCollection[];\n\n    /**\n     * By default selector element relative to the current gallery.\n     * Instead of that you can tell lightGallery to select element relative to another element.\n     * Example - '.my-selector-container' | '#my-selector-container'\n     * In the code this become selector =  document.querySelector(this.s.selectWithin ).querySelectorAll(this.s.selector);\n     */\n    selectWithin: string;\n\n    /**\n     * Custom html for next control\n     */\n    nextHtml: string;\n\n    /**\n     * Custom html for prev control\n     */\n    prevHtml: string;\n\n    /**\n     * specify which slide should load initially\n     */\n    index: number;\n\n    /**\n     * Set width for iframe.\n     */\n    iframeWidth: string;\n\n    /**\n     * Set height for iframe.\n     */\n    iframeHeight: string;\n\n    /**\n     * Set max width for iframe.\n     */\n    iframeMaxWidth: string;\n\n    /**\n     * Set max height for iframe.\n     */\n    iframeMaxHeight: string;\n\n    /**\n     * Enable download button.\n     * @description By default download url will be taken from data-src/href attribute but it supports only for modern browsers.\n     * If you want you can provide another url for download via data-download-url.\n     * pass false in data-download-url if you want to hide download button for the particular slide.\n     */\n    download: boolean;\n\n    /**\n     * Whether to show total number of images and index number of currently displayed image.\n     */\n    counter: boolean;\n\n    /**\n     * Where the counter should be appended\n     */\n    appendCounterTo: string;\n\n    /**\n     * By setting the swipeThreshold (in px) you can set how far the user must swipe for the next/prev image.\n     */\n    swipeThreshold: number;\n\n    /**\n     * Enables swipe support for touch devices\n     */\n    enableSwipe: boolean;\n\n    /**\n     * Enables desktop mouse drag support\n     */\n    enableDrag: boolean;\n\n    /**\n     * LightGallery can be instantiated and launched programmatically by setting this option to true and populating dynamicEl option (see below) with the definitions of images.\n     */\n    dynamic: boolean;\n\n    /**\n     * An array of objects (src, iframe, subHtml, thumb, poster, responsive, srcset sizes) representing gallery elements.\n     */\n    dynamicEl: GalleryItem[];\n\n    /**\n     * Fetch custom properties from the selector\n     * @description this is useful for plugin development\n     * By default lightGallery fetches and store all the props selectors to\n     * reduce frequent dom interaction for fetching props every time.\n     *\n     * If you need any addition data to be fetched and stored in the galleryItems variable,\n     * you can do this just by passing the prop names via extraProps\n     * @example\n     * HTML:\n     * <div id=\"lightGallery\">\n     *     <a href=\"a.jpg\" data-custom-prop=\"abc\"><img src=\"thumb.jpg\" /></a>\n     *     <a href=\"a.jpg\" data-custom-prop=\"xyz\"><img src=\"thumb.jpg\" /></a>\n     * </div>\n     * JS:\n     * lightGallery(document.getElementById('lightGallery'), {\n     *     extraProps: ['customProp']\n     * })\n     * // Note - If you are using dynamic mode, you can pass any custom prop in the galleryItem\n     * lightGallery(document.getElementById('lightGallery'), {\n     *     dynamic: true,\n     *     dynamicEl: [{\n     *         src: 'img/img1.jpg',\n     *         customProp:'abc',\n     *     }]\n     * })\n     *\n     */\n    extraProps: string[];\n\n    /**\n     * Option to fetch different thumbnail image other than first image\n     * @description If you want to use external image for thumbnail,\n     * add the path of that image inside \"data-\" attribute\n     * and set value of this option to the name of your custom attribute.\n     *\n     * @example\n     * <div id=\"lightGallery\">\n     *     <a href=\"a.jpg\" data-external-thumb-image=\"images/externalThumb.jpg\" ><img src=\"thumb.jpg\" /></a>\n     * </div>\n     *\n     * lightGallery(document.getElementById('lightGallery'), {\n     *     exThumbImage: 'data-external-thumb-image'\n     * })\n     */\n    exThumbImage: string;\n\n    /**\n     * Function to detect mobile devices\n     */\n    isMobile?: () => boolean;\n\n    /**\n     * Separate settings for mobile devices\n     * @description Note - this is applied only at the time of loading\n     * by default controls and close buttons are disabled on mobile devices.\n     * use this options if you want to enable them or change any other settings for mobile devices\n     * Note - mobileSettings does not merge default values, You need to provide all mobileSettings including default values\n     */\n    mobileSettings: Partial<MobileSettings>;\n\n    /**\n     * Customize string.\n     * @description This can be useful if you want to localize the lightGallery strings to other languages.\n     * Use your own service to translate the strings and pass it via settings.strings\n     * You can find dedicated strings option for all lightGallery modules in their respective documentation.\n     * Note - You need to provide values for all the strings. For example, even if you just want to change the closeGallery string, you need to provide all the other strings as well.\n     */\n    strings: LightGalleryCoreStrings;\n\n    plugins: (new (instance: LightGallery, $LG: LgQuery) => any)[];\n}\n\nexport const lightGalleryCoreSettings: LightGalleryCoreSettings = {\n    mode: 'lg-slide',\n    easing: 'ease',\n    speed: 400,\n    licenseKey: '0000-0000-000-0000',\n    height: '100%',\n    width: '100%',\n    addClass: '',\n    startClass: 'lg-start-zoom',\n    backdropDuration: 300,\n    container: '',\n    startAnimationDuration: 400,\n    zoomFromOrigin: true,\n    hideBarsDelay: 0,\n    showBarsAfter: 10000,\n    slideDelay: 0,\n    supportLegacyBrowser: true,\n    allowMediaOverlap: false,\n    videoMaxSize: '1280-720',\n    loadYouTubePoster: true,\n    defaultCaptionHeight: 0,\n    ariaLabelledby: '',\n    ariaDescribedby: '',\n    resetScrollPosition: true,\n    hideScrollbar: false,\n    closable: true,\n    swipeToClose: true,\n    closeOnTap: true,\n    showCloseIcon: true,\n    showMaximizeIcon: false,\n    loop: true,\n    escKey: true,\n    keyPress: true,\n    trapFocus: true,\n    controls: true,\n    slideEndAnimation: true,\n    hideControlOnEnd: false,\n    mousewheel: false,\n    getCaptionFromTitleOrAlt: true,\n    appendSubHtmlTo: '.lg-sub-html',\n    subHtmlSelectorRelative: false,\n    preload: 2,\n    numberOfSlideItemsInDom: 10,\n    selector: '',\n    selectWithin: '',\n    nextHtml: '',\n    prevHtml: '',\n    index: 0,\n    iframeWidth: '100%',\n    iframeHeight: '100%',\n    iframeMaxWidth: '100%',\n    iframeMaxHeight: '100%',\n    download: true,\n    counter: true,\n    appendCounterTo: '.lg-toolbar',\n    swipeThreshold: 50,\n    enableSwipe: true,\n    enableDrag: true,\n    dynamic: false,\n    dynamicEl: [],\n    extraProps: [],\n    exThumbImage: '',\n    isMobile: undefined,\n    mobileSettings: {\n        controls: false,\n        showCloseIcon: false,\n        download: false,\n    } as MobileSettings,\n    plugins: [],\n    strings: {\n        closeGallery: 'Close gallery',\n        toggleMaximize: 'Toggle maximize',\n        previousSlide: 'Previous slide',\n        nextSlide: 'Next slide',\n        download: 'Download',\n        playVideo: 'Play video',\n        mediaLoadingFailed: 'Oops... Failed to load content...',\n    } as LightGalleryCoreStrings,\n};\n", "interface Offset {\n    left: number;\n    top: number;\n}\n\nfunction initLgPolyfills() {\n    (function () {\n        if (typeof window.CustomEvent === 'function') return false;\n\n        function CustomEvent(event: string, params: any) {\n            params = params || {\n                bubbles: false,\n                cancelable: false,\n                detail: null,\n            };\n            const evt = document.createEvent('CustomEvent');\n            evt.initCustomEvent(\n                event,\n                params.bubbles,\n                params.cancelable,\n                params.detail,\n            );\n            return evt;\n        }\n\n        window.CustomEvent = CustomEvent as any;\n    })();\n    (function () {\n        if (!Element.prototype.matches) {\n            Element.prototype.matches =\n                (Element.prototype as any).msMatchesSelector ||\n                Element.prototype.webkitMatchesSelector;\n        }\n    })();\n}\n\nexport type LgQuery = (selector: any) => lgQuery;\nexport class lgQuery {\n    static eventListeners: { [key: string]: any[] } = {};\n    static generateUUID(): string {\n        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(\n            /[xy]/g,\n            function (c) {\n                const r = (Math.random() * 16) | 0,\n                    v = c == 'x' ? r : (r & 0x3) | 0x8;\n                return v.toString(16);\n            },\n        );\n    }\n\n    private selector: any;\n    private firstElement: any;\n    private cssVenderPrefixes: string[] = [\n        'TransitionDuration',\n        'TransitionTimingFunction',\n        'Transform',\n        'Transition',\n    ];\n    constructor(selector: string | Element) {\n        this.selector = this._getSelector(selector);\n        this.firstElement = this._getFirstEl();\n        return this;\n    }\n\n    private _getSelector(\n        selector: string | Element,\n        context: Element | Document = document,\n    ): Element | null | NodeListOf<Element> {\n        if (typeof selector !== 'string') {\n            return selector;\n        }\n        context = context || document;\n        const fl = selector.substring(0, 1);\n        if (fl === '#') {\n            return context.querySelector(selector);\n        } else {\n            return context.querySelectorAll(selector);\n        }\n    }\n\n    private _each(\n        func: (\n            elements: Element | NodeListOf<Element> | null,\n            index: number,\n        ) => void,\n    ): this {\n        if (!this.selector) {\n            return this;\n        }\n        if (this.selector.length !== undefined) {\n            [].forEach.call(this.selector, func);\n        } else {\n            func(this.selector, 0);\n        }\n        return this;\n    }\n\n    private _setCssVendorPrefix(\n        el: any,\n        cssProperty: string,\n        value?: string | number,\n    ): void {\n        // prettier-ignore\n        const property = cssProperty.replace(/-([a-z])/gi, function (\n            s,\n            group1,\n        ) {\n            return group1.toUpperCase();\n        });\n        if (this.cssVenderPrefixes.indexOf(property) !== -1) {\n            el.style[\n                property.charAt(0).toLowerCase() + property.slice(1)\n            ] = value;\n            el.style['webkit' + property] = value;\n            el.style['moz' + property] = value;\n            el.style['ms' + property] = value;\n            el.style['o' + property] = value;\n        } else {\n            el.style[property] = value;\n        }\n    }\n\n    private _getFirstEl() {\n        if (this.selector && this.selector.length !== undefined) {\n            return this.selector[0];\n        } else {\n            return this.selector;\n        }\n    }\n\n    private isEventMatched(event: string, eventName: string): boolean {\n        const eventNamespace = eventName.split('.');\n        return event\n            .split('.')\n            .filter((e) => e)\n            .every((e) => {\n                return eventNamespace.indexOf(e) !== -1;\n            });\n    }\n\n    attr(attr: string): string;\n    attr(attr: string, value: string | number | boolean): this;\n    attr(attr: string, value?: string | number | boolean): string | this {\n        if (value === undefined) {\n            if (!this.firstElement) {\n                return '';\n            }\n            return this.firstElement.getAttribute(attr);\n        }\n        this._each((el: any) => {\n            el.setAttribute(attr, value);\n        });\n        return this;\n    }\n\n    find(selector: any): lgQuery {\n        return $LG(this._getSelector(selector, this.selector));\n    }\n\n    first(): lgQuery {\n        if (this.selector && this.selector.length !== undefined) {\n            return $LG(this.selector[0]);\n        } else {\n            return $LG(this.selector);\n        }\n    }\n\n    eq(index: number): lgQuery {\n        return $LG(this.selector[index]);\n    }\n\n    parent(): lgQuery {\n        return $LG(this.selector.parentElement);\n    }\n\n    get(): HTMLElement {\n        return this._getFirstEl();\n    }\n\n    removeAttr(attributes: string): this {\n        const attrs = attributes.split(' ');\n        this._each((el: any) => {\n            attrs.forEach((attr: string) => el.removeAttribute(attr));\n        });\n        return this;\n    }\n\n    wrap(className: string): this {\n        if (!this.firstElement) {\n            return this;\n        }\n        const wrapper = document.createElement('div');\n        wrapper.className = className;\n        this.firstElement.parentNode.insertBefore(wrapper, this.firstElement);\n        this.firstElement.parentNode.removeChild(this.firstElement);\n        wrapper.appendChild(this.firstElement);\n        return this;\n    }\n\n    addClass(classNames = ''): this {\n        this._each((el: any) => {\n            // IE doesn't support multiple arguments\n            classNames.split(' ').forEach((className) => {\n                if (className) {\n                    el.classList.add(className);\n                }\n            });\n        });\n        return this;\n    }\n\n    removeClass(classNames: string): this {\n        this._each((el: any) => {\n            // IE doesn't support multiple arguments\n            classNames.split(' ').forEach((className) => {\n                if (className) {\n                    el.classList.remove(className);\n                }\n            });\n        });\n        return this;\n    }\n\n    hasClass(className: string): boolean {\n        if (!this.firstElement) {\n            return false;\n        }\n        return this.firstElement.classList.contains(className);\n    }\n    hasAttribute(attribute: string): boolean {\n        if (!this.firstElement) {\n            return false;\n        }\n        return this.firstElement.hasAttribute(attribute);\n    }\n    toggleClass(className: string): this {\n        if (!this.firstElement) {\n            return this;\n        }\n        if (this.hasClass(className)) {\n            this.removeClass(className);\n        } else {\n            this.addClass(className);\n        }\n        return this;\n    }\n\n    css(property: string, value?: string | number): this {\n        this._each((el: any) => {\n            this._setCssVendorPrefix(el, property, value);\n        });\n        return this;\n    }\n    // Need to pass separate namespaces for separate elements\n    on(events: string, listener: (e: any) => void): this {\n        if (!this.selector) {\n            return this;\n        }\n        events.split(' ').forEach((event: string) => {\n            if (!Array.isArray(lgQuery.eventListeners[event])) {\n                lgQuery.eventListeners[event] = [];\n            }\n            lgQuery.eventListeners[event].push(listener);\n            this.selector.addEventListener(event.split('.')[0], listener);\n        });\n\n        return this;\n    }\n    // @todo - test this\n    once(event: string, listener: (e: any) => void): this {\n        this.on(event, () => {\n            this.off(event);\n            listener(event);\n        });\n        return this;\n    }\n    off(event: string): this {\n        if (!this.selector) {\n            return this;\n        }\n        Object.keys(lgQuery.eventListeners).forEach((eventName) => {\n            if (this.isEventMatched(event, eventName)) {\n                lgQuery.eventListeners[eventName].forEach((listener) => {\n                    this.selector.removeEventListener(\n                        eventName.split('.')[0],\n                        listener,\n                    );\n                });\n                lgQuery.eventListeners[eventName] = [];\n            }\n        });\n\n        return this;\n    }\n    trigger<Detail>(event: string, detail?: Detail): this {\n        if (!this.firstElement) {\n            return this;\n        }\n\n        const customEvent = new CustomEvent(event.split('.')[0], {\n            detail: detail || null,\n        });\n        this.firstElement.dispatchEvent(customEvent);\n        return this;\n    }\n\n    // Does not support IE\n    load(url: string): this {\n        fetch(url)\n            .then((res) => res.text())\n            .then((html) => {\n                this.selector.innerHTML = html;\n            });\n        return this;\n    }\n\n    html(): string;\n    html(html: string): this;\n    html(html?: string): string | this {\n        if (html === undefined) {\n            if (!this.firstElement) {\n                return '';\n            }\n            return this.firstElement.innerHTML;\n        }\n        this._each((el: any) => {\n            el.innerHTML = html;\n        });\n        return this;\n    }\n    append(html: string | HTMLElement): this {\n        this._each((el: any) => {\n            if (typeof html === 'string') {\n                el.insertAdjacentHTML('beforeend', html);\n            } else {\n                el.appendChild(html);\n            }\n        });\n        return this;\n    }\n    prepend(html: string): this {\n        this._each((el: any) => {\n            el.insertAdjacentHTML('afterbegin', html);\n        });\n        return this;\n    }\n    remove(): this {\n        this._each((el: any) => {\n            el.parentNode.removeChild(el);\n        });\n        return this;\n    }\n    empty(): this {\n        this._each((el: any) => {\n            el.innerHTML = '';\n        });\n        return this;\n    }\n    // Supports only window\n    scrollTop(): number;\n    scrollTop(scrollTop: number): this;\n    scrollTop(scrollTop?: number): number | this {\n        if (scrollTop !== undefined) {\n            document.body.scrollTop = scrollTop;\n            document.documentElement.scrollTop = scrollTop;\n            return this;\n        } else {\n            return (\n                window.pageYOffset ||\n                document.documentElement.scrollTop ||\n                document.body.scrollTop ||\n                0\n            );\n        }\n    }\n    // Supports only window\n    scrollLeft(): number;\n    scrollLeft(scrollLeft?: number): this;\n    scrollLeft(scrollLeft?: number): number | this {\n        if (scrollLeft !== undefined) {\n            document.body.scrollLeft = scrollLeft;\n            document.documentElement.scrollLeft = scrollLeft;\n            return this;\n        } else {\n            return (\n                window.pageXOffset ||\n                document.documentElement.scrollLeft ||\n                document.body.scrollLeft ||\n                0\n            );\n        }\n    }\n    offset(): Offset {\n        if (!this.firstElement) {\n            return {\n                left: 0,\n                top: 0,\n            };\n        }\n        const rect = this.firstElement.getBoundingClientRect();\n        const bodyMarginLeft = $LG('body').style().marginLeft;\n\n        // Minus body margin - https://stackoverflow.com/questions/30711548/is-getboundingclientrect-left-returning-a-wrong-value\n        return {\n            left: rect.left - parseFloat(bodyMarginLeft) + this.scrollLeft(),\n            top: rect.top + this.scrollTop(),\n        };\n    }\n    style(): CSSStyleDeclaration {\n        if (!this.firstElement) {\n            return {} as CSSStyleDeclaration;\n        }\n        return (\n            this.firstElement.currentStyle ||\n            window.getComputedStyle(this.firstElement)\n        );\n    }\n    // Width without padding and border even if box-sizing is used.\n    width(): number {\n        const style = this.style();\n        return (\n            this.firstElement.clientWidth -\n            parseFloat(style.paddingLeft) -\n            parseFloat(style.paddingRight)\n        );\n    }\n    // Height without padding and border even if box-sizing is used.\n    height(): number {\n        const style = this.style();\n        return (\n            this.firstElement.clientHeight -\n            parseFloat(style.paddingTop) -\n            parseFloat(style.paddingBottom)\n        );\n    }\n}\n\nexport function $LG(selector: any): lgQuery {\n    initLgPolyfills();\n    return new lgQuery(selector);\n}\n", "import { $LG, lgQuery } from './lgQuery';\nimport { VideoSource } from './plugins/video/types';\nimport { VideoInfo } from './types';\n\nexport interface ImageSize {\n    width: number;\n    height: number;\n}\n\nexport interface ImageSources {\n    media?: string;\n    srcset: string;\n    sizes?: string;\n    type?: string;\n}\n\nexport interface GalleryItem {\n    /**\n     * url of the media\n     * @data-attr data-src\n     */\n    src?: string;\n\n    /**\n     * Source attributes for the <a href=\"https://developer.mozilla.org/en-US/docs/Web/HTML/Element/source#attributes\">picture</a> element\n     * @data-attr data-sources\n     */\n    sources?: ImageSources[];\n\n    /**\n     * Thumbnail url\n     * @description By default lightGallery uses the image inside gallery selector as thumbnail.\n     * But, If you want to use external image for thumbnail,\n     * pass the thumbnail url via any data attribute and\n     * pass the attribute name via exThumbImage option\n     * @example\n     * <div id=\"lightGallery\">\n     *     <a href=\"a.jpg\" data-external-thumb-image=\"images/externalThumb.jpg\" ><img src=\"thumb.jpg\" /></a>\n     * </div>\n     *\n     * lightGallery(document.getElementById('lightGallery'), {\n     *     exThumbImage: 'data-external-thumb-image'\n     * })\n     * @data-attr data-*\n     */\n    thumb?: string;\n\n    /**\n     * alt attribute for the image\n     * @data-attr alt\n     */\n    alt?: string;\n\n    /**\n     * Title attribute for the video\n     * @data-attr title\n     */\n    title?: string;\n\n    /**\n     * Title for iframe\n     * @data-attr data-iframe-title\n     */\n    iframeTitle?: string;\n\n    /**\n     * Caption for the slide\n     * @description You can either pass the HTML markup or the ID or class name of the element which contains the captions\n     * @data-attr data-sub-html\n     */\n    subHtml?: string;\n\n    /**\n     * url of the file which contain the sub html.\n     * @description Note - Does not support Internet Explorer browser\n     * @data-attr data-sub-html-url\n     */\n    subHtmlUrl?: string;\n\n    /**\n     * Video source\n     * @data-attr data-video\n     */\n    video?: VideoSource;\n\n    /**\n     * Poster url\n     * @data-attr data-poster\n     */\n    poster?: string;\n\n    /**\n     * Custom slide name to use in the url when hash plugin is enabled\n     * @data-attr data-slide-name\n     */\n    slideName?: string;\n\n    /**\n     * List of images and viewport's max width separated by comma.\n     * @description Ex?: img/1-375.jpg 375, img/1-480.jpg 480, img/1-757.jpg 757.\n     * @data-attr data-responsive\n     */\n    responsive?: string;\n\n    /**\n     * srcset attribute values for the main image\n     * @data-attr data-srcset\n     */\n    srcset?: string;\n\n    /**\n     * srcset sizes attribute for the main image\n     * @data-attr data-sizes\n     */\n    sizes?: string;\n\n    /**\n     * Set true is you want to open your url in an iframe\n     * @data-attr data-iframe\n     */\n    iframe?: boolean;\n\n    /**\n     * Download url for your image/video.\n     * @description Pass false if you want to disable the download button.\n     * @data-attr data-download-url\n     */\n    downloadUrl?: string | boolean;\n\n    /**\n     * Name of the file after it is downloaded.\n     * @description The HTML value of the download attribute.\n     * There are no restrictions on allowed values, and the browser will automatically\n     * detect the correct file extension and add it to the file (.img, .pdf, .txt, .html, etc.).\n     * <a href=\"https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attr-download\">More info</a>\n     * @data-attr data-download\n     */\n    download?: string | boolean;\n\n    /**\n     * Actual size of the image in px.\n     * @description This is used in zoom plugin to see the actual size of the image when double taped on the image.\n     * @data-attr data-width\n     */\n    width?: string;\n\n    /**\n     * Facebook share URL.\n     * @description Specify only if you want to provide separate share URL for the specific slide. By default, current browser URL is taken.\n     * @data-attr data-facebook-share-url\n     */\n    facebookShareUrl?: string;\n\n    /**\n     * Tweet text\n     * @data-attr data-tweet-text\n     */\n    tweetText?: string;\n\n    /**\n     * Twitter share URL.\n     * @description Specify only if you want to provide separate share URL for the specific slide. By default, current browser URL will be taken.\n     * @data-attr data-twitter-share-url\n     */\n    twitterShareUrl?: string;\n\n    /**\n     * Pinterest share URL.\n     * @description Specify only if you want to provide separate share URL for the specific slide. By default, current browser URL will be taken.\n     * Note?: Pinterest requires absolute URL\n     * @data-attr data-pinterest-share-url\n     */\n    pinterestShareUrl?: string;\n\n    /**\n     * Description for Pinterest post.\n     * @data-attr data-pinterest-text\n     */\n    pinterestText?: string;\n\n    /**\n     * Facebook comments body html\n     * @description Please refer <a href=\"https://developers.facebook.com/docs/plugins/comments/#comments-plugin\">facebook official documentation</a> for generating the HTML markup\n     * @example\n     * <div\n     *      class=\"fb-comments\"\n     *      data-href=\"https://www.lightgalleryjs.com/demos/comment-box/#facebook-comments-demo\"\n     *      data-width=\"400\"\n     *      data-numposts=\"5\">\n     * </div>\n     * @data-attr data-fb-html\n     */\n    fbHtml?: string;\n\n    /**\n     * Disqus page identifier\n     * @description Please refer official <a href=\"https://help.disqus.com/en/articles/1717084-javascript-configuration-variables\">disqus documentation</a> for more info\n     * @data-attr data-disqus-identifier\n     */\n    disqusIdentifier?: string;\n\n    /**\n     * Disqus page url\n     * @description Please refer official <a href=\"https://help.disqus.com/en/articles/1717084-javascript-configuration-variables\">disqus documentation</a> for more info\n     * @data-attr data-disqus-url\n     */\n    disqusUrl?: string;\n\n    __slideVideoInfo?: VideoInfo;\n    [key: string]: any;\n}\n\nconst defaultDynamicOptions = [\n    'src',\n    'sources',\n    'subHtml',\n    'subHtmlUrl',\n    'html',\n    'video',\n    'poster',\n    'slideName',\n    'responsive',\n    'srcset',\n    'sizes',\n    'iframe',\n    'downloadUrl',\n    'download',\n    'width',\n    'facebookShareUrl',\n    'tweetText',\n    'iframeTitle',\n    'twitterShareUrl',\n    'pinterestShareUrl',\n    'pinterestText',\n    'fbHtml',\n    'disqusIdentifier',\n    'disqusUrl',\n];\n\n// Convert html data-attribute to camalcase\nexport function convertToData(attr: string): string {\n    // FInd a way for lgsize\n    if (attr === 'href') {\n        return 'src';\n    }\n    attr = attr.replace('data-', '');\n    attr = attr.charAt(0).toLowerCase() + attr.slice(1);\n    attr = attr.replace(/-([a-z])/g, (g) => g[1].toUpperCase());\n\n    return attr;\n}\n\nconst utils = {\n    /**\n     * get possible width and height from the lgSize attribute. Used for ZoomFromOrigin option\n     */\n    getSize(\n        el: HTMLElement,\n        container: lgQuery,\n        spacing = 0,\n        defaultLgSize?: string,\n    ): ImageSize | undefined {\n        const LGel = $LG(el);\n        let lgSize = LGel.attr('data-lg-size') || defaultLgSize;\n\n        if (!lgSize) {\n            return;\n        }\n\n        const isResponsiveSizes = lgSize.split(',');\n        // if at-least two viewport sizes are available\n        if (isResponsiveSizes[1]) {\n            const wWidth = window.innerWidth;\n            for (let i = 0; i < isResponsiveSizes.length; i++) {\n                const size = isResponsiveSizes[i];\n                const responsiveWidth = parseInt(size.split('-')[2], 10);\n                if (responsiveWidth > wWidth) {\n                    lgSize = size;\n                    break;\n                }\n\n                // take last item as last option\n                if (i === isResponsiveSizes.length - 1) {\n                    lgSize = size;\n                }\n            }\n        }\n\n        const size = lgSize.split('-');\n\n        const width = parseInt(size[0], 10);\n        const height = parseInt(size[1], 10);\n\n        const cWidth = container.width();\n        const cHeight = container.height() - spacing;\n\n        const maxWidth = Math.min(cWidth, width);\n        const maxHeight = Math.min(cHeight, height);\n\n        const ratio = Math.min(maxWidth / width, maxHeight / height);\n\n        return { width: width * ratio, height: height * ratio };\n    },\n\n    /**\n     * @desc Get transform value based on the imageSize. Used for ZoomFromOrigin option\n     * @param {jQuery Element}\n     * @returns {String} Transform CSS string\n     */\n    getTransform(\n        el: HTMLElement,\n        container: lgQuery,\n        top: number,\n        bottom: number,\n        imageSize?: ImageSize,\n    ): string | undefined {\n        if (!imageSize) {\n            return;\n        }\n        const LGel = $LG(el).find('img').first();\n        if (!LGel.get()) {\n            return;\n        }\n\n        const containerRect = container.get().getBoundingClientRect();\n\n        const wWidth = containerRect.width;\n\n        // using innerWidth to include mobile safari bottom bar\n        const wHeight = container.height() - (top + bottom);\n\n        const elWidth = LGel.width();\n        const elHeight = LGel.height();\n\n        const elStyle = LGel.style();\n        let x =\n            (wWidth - elWidth) / 2 -\n            LGel.offset().left +\n            (parseFloat(elStyle.paddingLeft) || 0) +\n            (parseFloat(elStyle.borderLeft) || 0) +\n            $LG(window).scrollLeft() +\n            containerRect.left;\n        let y =\n            (wHeight - elHeight) / 2 -\n            LGel.offset().top +\n            (parseFloat(elStyle.paddingTop) || 0) +\n            (parseFloat(elStyle.borderTop) || 0) +\n            $LG(window).scrollTop() +\n            top;\n\n        const scX = elWidth / imageSize.width;\n        const scY = elHeight / imageSize.height;\n\n        const transform =\n            'translate3d(' +\n            (x *= -1) +\n            'px, ' +\n            (y *= -1) +\n            'px, 0) scale3d(' +\n            scX +\n            ', ' +\n            scY +\n            ', 1)';\n        return transform;\n    },\n\n    getIframeMarkup(\n        iframeWidth: string,\n        iframeHeight: string,\n        iframeMaxWidth: string,\n        iframeMaxHeight: string,\n        src?: string,\n        iframeTitle?: string,\n    ): string {\n        const title = iframeTitle ? 'title=\"' + iframeTitle + '\"' : '';\n        return `<div class=\"lg-video-cont lg-has-iframe\" style=\"width:${iframeWidth}; max-width:${iframeMaxWidth}; height: ${iframeHeight}; max-height:${iframeMaxHeight}\">\n                    <iframe class=\"lg-object\" frameborder=\"0\" ${title} src=\"${src}\"  allowfullscreen=\"true\"></iframe>\n                </div>`;\n    },\n\n    getImgMarkup(\n        index: number,\n        src: string,\n        altAttr: string,\n        srcset?: string,\n        sizes?: string,\n        sources?: ImageSources[],\n    ): string {\n        const srcsetAttr = srcset ? `srcset=\"${srcset}\"` : '';\n        const sizesAttr = sizes ? `sizes=\"${sizes}\"` : '';\n        const imgMarkup = `<img ${altAttr} ${srcsetAttr}  ${sizesAttr} class=\"lg-object lg-image\" data-index=\"${index}\" src=\"${src}\" />`;\n        let sourceTag = '';\n        if (sources) {\n            const sourceObj =\n                typeof sources === 'string' ? JSON.parse(sources) : sources;\n\n            sourceTag = sourceObj.map((source: any) => {\n                let attrs = '';\n                Object.keys(source).forEach((key) => {\n                    // Do not remove the first space as it is required to separate the attributes\n                    attrs += ` ${key}=\"${source[key]}\"`;\n                });\n                return `<source ${attrs}></source>`;\n            });\n        }\n        return `${sourceTag}${imgMarkup}`;\n    },\n\n    // Get src from responsive src\n    getResponsiveSrc(srcItms: string[]): string {\n        const rsWidth = [];\n        const rsSrc = [];\n        let src = '';\n        for (let i = 0; i < srcItms.length; i++) {\n            const _src = srcItms[i].split(' ');\n\n            // Manage empty space\n            if (_src[0] === '') {\n                _src.splice(0, 1);\n            }\n\n            rsSrc.push(_src[0]);\n            rsWidth.push(_src[1]);\n        }\n\n        const wWidth = window.innerWidth;\n        for (let j = 0; j < rsWidth.length; j++) {\n            if (parseInt(rsWidth[j], 10) > wWidth) {\n                src = rsSrc[j];\n                break;\n            }\n        }\n        return src;\n    },\n\n    isImageLoaded(img: HTMLImageElement): boolean {\n        if (!img) return false;\n        // During the onload event, IE correctly identifies any images that\n        // weren’t 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\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\n        // No other way of checking: assume it’s ok.\n        return true;\n    },\n\n    getVideoPosterMarkup(\n        _poster: string,\n        dummyImg: string,\n        videoContStyle: string,\n        playVideoString: string,\n        _isVideo?: VideoInfo,\n    ): string {\n        let videoClass = '';\n        if (_isVideo && _isVideo.youtube) {\n            videoClass = 'lg-has-youtube';\n        } else if (_isVideo && _isVideo.vimeo) {\n            videoClass = 'lg-has-vimeo';\n        } else {\n            videoClass = 'lg-has-html5';\n        }\n\n        return `<div class=\"lg-video-cont ${videoClass}\" style=\"${videoContStyle}\">\n                <div class=\"lg-video-play-button\">\n                <svg\n                    viewBox=\"0 0 20 20\"\n                    preserveAspectRatio=\"xMidYMid\"\n                    focusable=\"false\"\n                    aria-labelledby=\"${playVideoString}\"\n                    role=\"img\"\n                    class=\"lg-video-play-icon\"\n                >\n                    <title>${playVideoString}</title>\n                    <polygon class=\"lg-video-play-icon-inner\" points=\"1,0 20,10 1,20\"></polygon>\n                </svg>\n                <svg class=\"lg-video-play-icon-bg\" viewBox=\"0 0 50 50\" focusable=\"false\">\n                    <circle cx=\"50%\" cy=\"50%\" r=\"20\"></circle></svg>\n                <svg class=\"lg-video-play-icon-circle\" viewBox=\"0 0 50 50\" focusable=\"false\">\n                    <circle cx=\"50%\" cy=\"50%\" r=\"20\"></circle>\n                </svg>\n            </div>\n            ${dummyImg || ''}\n            <img class=\"lg-object lg-video-poster\" src=\"${_poster}\" />\n        </div>`;\n    },\n\n    getFocusableElements(container: HTMLElement): NodeListOf<Element> {\n        const elements = container.querySelectorAll(\n            'a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type=\"text\"]:not([disabled]), input[type=\"radio\"]:not([disabled]), input[type=\"checkbox\"]:not([disabled]), select:not([disabled])',\n        );\n        const visibleElements = [].filter.call(elements, (element) => {\n            const style = window.getComputedStyle(element);\n            return style.display !== 'none' && style.visibility !== 'hidden';\n        });\n        return (visibleElements as unknown) as NodeListOf<Element>;\n    },\n\n    /**\n     * @desc Create dynamic elements array from gallery items when dynamic option is false\n     * It helps to avoid frequent DOM interaction\n     * and avoid multiple checks for dynamic elments\n     *\n     * @returns {Array} dynamicEl\n     */\n    getDynamicOptions(\n        items: any,\n        extraProps: string[],\n        getCaptionFromTitleOrAlt: boolean,\n        exThumbImage: string,\n    ): GalleryItem[] {\n        const dynamicElements: GalleryItem[] = [];\n        const availableDynamicOptions = [\n            ...defaultDynamicOptions,\n            ...extraProps,\n        ];\n        [].forEach.call(items, (item: HTMLElement) => {\n            const dynamicEl: GalleryItem = {} as GalleryItem;\n            for (let i = 0; i < item.attributes.length; i++) {\n                const attr = item.attributes[i];\n                if (attr.specified) {\n                    const dynamicAttr = convertToData(attr.name);\n                    let label = '';\n                    if (availableDynamicOptions.indexOf(dynamicAttr) > -1) {\n                        label = dynamicAttr;\n                    }\n                    if (label) {\n                        (dynamicEl as any)[label] = attr.value;\n                    }\n                }\n            }\n            const currentItem = $LG(item);\n            const alt = currentItem.find('img').first().attr('alt');\n            const title = currentItem.attr('title');\n\n            const thumb = exThumbImage\n                ? currentItem.attr(exThumbImage)\n                : currentItem.find('img').first().attr('src');\n            dynamicEl.thumb = thumb;\n\n            if (getCaptionFromTitleOrAlt && !dynamicEl.subHtml) {\n                dynamicEl.subHtml = title || alt || '';\n            }\n            dynamicEl.alt = alt || title || '';\n            dynamicElements.push(dynamicEl);\n        });\n        return dynamicElements;\n    },\n    isMobile(): boolean {\n        return /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\n    },\n    /**\n     * @desc Check the given src is video\n     * @param {String} src\n     * @return {Object} video type\n     * Ex:{ youtube  :  [\"//www.youtube.com/watch?v=c0asJgSyxcY\", \"c0asJgSyxcY\"] }\n     *\n     * @todo - this information can be moved to dynamicEl to avoid frequent calls\n     */\n\n    isVideo(\n        src: string,\n        isHTML5VIdeo: boolean,\n        index: number,\n    ): VideoInfo | undefined {\n        if (!src) {\n            if (isHTML5VIdeo) {\n                return {\n                    html5: true,\n                };\n            } else {\n                console.error(\n                    'lightGallery :- data-src is not provided on slide item ' +\n                        (index + 1) +\n                        '. Please make sure the selector property is properly configured. More info - https://www.lightgalleryjs.com/demos/html-markup/',\n                );\n                return;\n            }\n        }\n\n        const youtube = src.match(\n            /\\/\\/(?:www\\.)?youtu(?:\\.be|be\\.com|be-nocookie\\.com)\\/(?:watch\\?v=|embed\\/)?([a-z0-9\\-\\_\\%]+)([\\&|?][\\S]*)*/i,\n        );\n        const vimeo = src.match(\n            /\\/\\/(?:www\\.)?(?:player\\.)?vimeo.com\\/(?:video\\/)?([0-9a-z\\-_]+)(.*)?/i,\n        );\n        const wistia = src.match(\n            /https?:\\/\\/(.+)?(wistia\\.com|wi\\.st)\\/(medias|embed)\\/([0-9a-z\\-_]+)(.*)/,\n        );\n\n        if (youtube) {\n            return {\n                youtube,\n            };\n        } else if (vimeo) {\n            return {\n                vimeo,\n            };\n        } else if (wistia) {\n            return {\n                wistia,\n            };\n        }\n    },\n};\n\nexport default utils;\n", "import {\n    AfterAppendSlideEventDetail,\n    AfterAppendSubHtmlDetail,\n    BeforeSlideDetail,\n    lGEvents,\n    SlideItemLoadDetail,\n} from './lg-events';\nimport {\n    LightGalleryAllSettings,\n    lightGalleryCoreSettings,\n    LightGallerySettings,\n} from './lg-settings';\nimport utils, { GalleryItem, ImageSize } from './lg-utils';\nimport { $LG, lgQuery } from './lgQuery';\nimport {\n    Coords,\n    MediaContainerPosition,\n    SlideDirection,\n    VideoInfo,\n} from './types';\n\ndeclare let picturefill: any;\n\n// @ref - https://stackoverflow.com/questions/3971841/how-to-resize-images-proportionally-keeping-the-aspect-ratio\n// @ref - https://2ality.com/2017/04/setting-up-multi-platform-packages.html\n\n// Unique id for each gallery\nlet lgId = 0;\n\nexport class LightGallery {\n    public settings!: LightGalleryAllSettings;\n    public galleryItems!: GalleryItem[];\n\n    // Current gallery item\n    public lgId!: number;\n\n    public el!: HTMLElement;\n    public LGel!: lgQuery;\n    public lgOpened = false;\n\n    public index = 0;\n\n    // lightGallery modules\n    public plugins: any[] = [];\n\n    // false when lightGallery load first slide content;\n    public lGalleryOn = false;\n\n    // True when a slide animation is in progress\n    public lgBusy = false;\n\n    // Type of touch action - {swipe, zoomSwipe, pinch}\n    public touchAction?: 'swipe' | 'zoomSwipe' | 'pinch';\n\n    // Direction of swipe/drag - {horizontal, vertical}\n    public swipeDirection?: 'horizontal' | 'vertical';\n\n    // Timeout function for hiding controls;\n    public hideBarTimeout: any;\n\n    public currentItemsInDom: string[] = [];\n\n    public outer!: lgQuery;\n\n    public items: any;\n\n    public $backdrop!: lgQuery;\n    public $lgComponents!: lgQuery;\n\n    public $container!: lgQuery;\n\n    public $inner!: lgQuery;\n    public $content!: lgQuery;\n    public $toolbar!: lgQuery;\n\n    // Scroll top value before lightGallery is opened\n    public prevScrollTop = 0;\n\n    public bodyPaddingRight = 0;\n\n    private zoomFromOrigin!: boolean;\n\n    private currentImageSize?: ImageSize;\n\n    private isDummyImageRemoved = false;\n\n    private dragOrSwipeEnabled = false;\n\n    public mediaContainerPosition = {\n        top: 0,\n        bottom: 0,\n    };\n\n    constructor(element: HTMLElement, options?: LightGallerySettings) {\n        if (!element) {\n            return this;\n        }\n        lgId++;\n        this.lgId = lgId;\n\n        this.el = element;\n        this.LGel = $LG(element);\n\n        this.generateSettings(options);\n\n        this.buildModules();\n\n        // When using dynamic mode, ensure dynamicEl is an array\n        if (\n            this.settings.dynamic &&\n            this.settings.dynamicEl !== undefined &&\n            !Array.isArray(this.settings.dynamicEl)\n        ) {\n            throw 'When using dynamic mode, you must also define dynamicEl as an Array.';\n        }\n\n        this.galleryItems = this.getItems();\n        this.normalizeSettings();\n\n        // Gallery items\n\n        this.init();\n\n        this.validateLicense();\n\n        return this;\n    }\n\n    private generateSettings(options?: LightGallerySettings) {\n        // lightGallery settings\n        this.settings = {\n            ...lightGalleryCoreSettings,\n            ...options,\n        } as LightGalleryAllSettings;\n        if (\n            this.settings.isMobile &&\n            typeof this.settings.isMobile === 'function'\n                ? this.settings.isMobile()\n                : utils.isMobile()\n        ) {\n            const mobileSettings = {\n                ...this.settings.mobileSettings,\n                ...this.settings.mobileSettings,\n            };\n            this.settings = { ...this.settings, ...mobileSettings };\n        }\n    }\n\n    private normalizeSettings() {\n        if (this.settings.slideEndAnimation) {\n            this.settings.hideControlOnEnd = false;\n        }\n        if (!this.settings.closable) {\n            this.settings.swipeToClose = false;\n        }\n\n        // And reset it on close to get the correct value next time\n        this.zoomFromOrigin = this.settings.zoomFromOrigin;\n\n        // At the moment, Zoom from image doesn't support dynamic options\n        // @todo add zoomFromOrigin support for dynamic images\n        if (this.settings.dynamic) {\n            this.zoomFromOrigin = false;\n        }\n\n        if (!this.settings.container) {\n            this.settings.container = document.body;\n        }\n\n        // settings.preload should not be grater than $item.length\n        this.settings.preload = Math.min(\n            this.settings.preload,\n            this.galleryItems.length,\n        );\n    }\n\n    init(): void {\n        this.addSlideVideoInfo(this.galleryItems);\n\n        this.buildStructure();\n\n        this.LGel.trigger(lGEvents.init, {\n            instance: this,\n        });\n\n        if (this.settings.keyPress) {\n            this.keyPress();\n        }\n\n        setTimeout(() => {\n            this.enableDrag();\n            this.enableSwipe();\n            this.triggerPosterClick();\n        }, 50);\n\n        this.arrow();\n        if (this.settings.mousewheel) {\n            this.mousewheel();\n        }\n\n        if (!this.settings.dynamic) {\n            this.openGalleryOnItemClick();\n        }\n    }\n\n    openGalleryOnItemClick(): void {\n        // Using for loop instead of using bubbling as the items can be any html element.\n        for (let index = 0; index < this.items.length; index++) {\n            const element = this.items[index];\n            const $element = $LG(element);\n            // Using different namespace for click because click event should not unbind if selector is same object('this')\n            // @todo manage all event listners - should have namespace that represent element\n            const uuid = lgQuery.generateUUID();\n            $element\n                .attr('data-lg-id', uuid)\n                .on(`click.lgcustom-item-${uuid}`, (e) => {\n                    e.preventDefault();\n                    const currentItemIndex = this.settings.index || index;\n                    this.openGallery(currentItemIndex, element);\n                });\n        }\n    }\n\n    /**\n     * Module constructor\n     * Modules are build incrementally.\n     * Gallery should be opened only once all the modules are initialized.\n     * use moduleBuildTimeout to make sure this\n     */\n    buildModules(): void {\n        this.settings.plugins.forEach((plugin) => {\n            this.plugins.push(new plugin(this, $LG));\n        });\n    }\n\n    validateLicense(): void {\n        if (!this.settings.licenseKey) {\n            console.error('Please provide a valid license key');\n        } else if (this.settings.licenseKey === '0000-0000-000-0000') {\n            console.warn(\n                `lightGallery: ${this.settings.licenseKey} license key is not valid for production use`,\n            );\n        }\n    }\n\n    getSlideItem(index: number): lgQuery {\n        return $LG(this.getSlideItemId(index));\n    }\n\n    getSlideItemId(index: number): string {\n        return `#lg-item-${this.lgId}-${index}`;\n    }\n\n    getIdName(id: string): string {\n        return `${id}-${this.lgId}`;\n    }\n    getElementById(id: string): lgQuery {\n        return $LG(`#${this.getIdName(id)}`);\n    }\n\n    manageSingleSlideClassName(): void {\n        if (this.galleryItems.length < 2) {\n            this.outer.addClass('lg-single-item');\n        } else {\n            this.outer.removeClass('lg-single-item');\n        }\n    }\n\n    buildStructure(): void {\n        const container = this.$container && this.$container.get();\n        if (container) {\n            return;\n        }\n        let controls = '';\n        let subHtmlCont = '';\n\n        // Create controls\n        if (this.settings.controls) {\n            controls = `<button type=\"button\" id=\"${this.getIdName(\n                'lg-prev',\n            )}\" aria-label=\"${\n                this.settings.strings['previousSlide']\n            }\" class=\"lg-prev lg-icon\"> ${this.settings.prevHtml} </button>\n                <button type=\"button\" id=\"${this.getIdName(\n                    'lg-next',\n                )}\" aria-label=\"${\n                this.settings.strings['nextSlide']\n            }\" class=\"lg-next lg-icon\"> ${this.settings.nextHtml} </button>`;\n        }\n\n        if (this.settings.appendSubHtmlTo !== '.lg-item') {\n            subHtmlCont =\n                '<div class=\"lg-sub-html\" role=\"status\" aria-live=\"polite\"></div>';\n        }\n\n        let addClasses = '';\n\n        if (this.settings.allowMediaOverlap) {\n            // Do not remove space before last single quote\n            addClasses += 'lg-media-overlap ';\n        }\n\n        const ariaLabelledby = this.settings.ariaLabelledby\n            ? 'aria-labelledby=\"' + this.settings.ariaLabelledby + '\"'\n            : '';\n        const ariaDescribedby = this.settings.ariaDescribedby\n            ? 'aria-describedby=\"' + this.settings.ariaDescribedby + '\"'\n            : '';\n\n        const containerClassName = `lg-container ${this.settings.addClass} ${\n            document.body !== this.settings.container ? 'lg-inline' : ''\n        }`;\n        const closeIcon =\n            this.settings.closable && this.settings.showCloseIcon\n                ? `<button type=\"button\" aria-label=\"${\n                      this.settings.strings['closeGallery']\n                  }\" id=\"${this.getIdName(\n                      'lg-close',\n                  )}\" class=\"lg-close lg-icon\"></button>`\n                : '';\n        const maximizeIcon = this.settings.showMaximizeIcon\n            ? `<button type=\"button\" aria-label=\"${\n                  this.settings.strings['toggleMaximize']\n              }\" id=\"${this.getIdName(\n                  'lg-maximize',\n              )}\" class=\"lg-maximize lg-icon\"></button>`\n            : '';\n        const template = `\n        <div class=\"${containerClassName}\" id=\"${this.getIdName(\n            'lg-container',\n        )}\" tabindex=\"-1\" aria-modal=\"true\" ${ariaLabelledby} ${ariaDescribedby} role=\"dialog\"\n        >\n            <div id=\"${this.getIdName(\n                'lg-backdrop',\n            )}\" class=\"lg-backdrop\"></div>\n\n            <div id=\"${this.getIdName(\n                'lg-outer',\n            )}\" class=\"lg-outer lg-use-css3 lg-css3 lg-hide-items ${addClasses} \">\n\n              <div id=\"${this.getIdName('lg-content')}\" class=\"lg-content\">\n                <div id=\"${this.getIdName('lg-inner')}\" class=\"lg-inner\">\n                </div>\n                ${controls}\n              </div>\n                <div id=\"${this.getIdName(\n                    'lg-toolbar',\n                )}\" class=\"lg-toolbar lg-group\">\n                    ${maximizeIcon}\n                    ${closeIcon}\n                    </div>\n                    ${\n                        this.settings.appendSubHtmlTo === '.lg-outer'\n                            ? subHtmlCont\n                            : ''\n                    }\n                <div id=\"${this.getIdName(\n                    'lg-components',\n                )}\" class=\"lg-components\">\n                    ${\n                        this.settings.appendSubHtmlTo === '.lg-sub-html'\n                            ? subHtmlCont\n                            : ''\n                    }\n                </div>\n            </div>\n        </div>\n        `;\n\n        $LG(this.settings.container).append(template);\n\n        if (document.body !== this.settings.container) {\n            $LG(this.settings.container).css('position', 'relative');\n        }\n\n        this.outer = this.getElementById('lg-outer');\n        this.$lgComponents = this.getElementById('lg-components');\n        this.$backdrop = this.getElementById('lg-backdrop');\n        this.$container = this.getElementById('lg-container');\n        this.$inner = this.getElementById('lg-inner');\n        this.$content = this.getElementById('lg-content');\n        this.$toolbar = this.getElementById('lg-toolbar');\n\n        this.$backdrop.css(\n            'transition-duration',\n            this.settings.backdropDuration + 'ms',\n        );\n\n        let outerClassNames = `${this.settings.mode} `;\n\n        this.manageSingleSlideClassName();\n\n        if (this.settings.enableDrag) {\n            outerClassNames += 'lg-grab ';\n        }\n\n        this.outer.addClass(outerClassNames);\n\n        this.$inner.css('transition-timing-function', this.settings.easing);\n        this.$inner.css('transition-duration', this.settings.speed + 'ms');\n\n        if (this.settings.download) {\n            this.$toolbar.append(\n                `<a id=\"${this.getIdName(\n                    'lg-download',\n                )}\" target=\"_blank\" rel=\"noopener\" aria-label=\"${\n                    this.settings.strings['download']\n                }\" download class=\"lg-download lg-icon\"></a>`,\n            );\n        }\n\n        this.counter();\n\n        $LG(window).on(\n            `resize.lg.global${this.lgId} orientationchange.lg.global${this.lgId}`,\n            () => {\n                this.refreshOnResize();\n            },\n        );\n\n        this.hideBars();\n\n        this.manageCloseGallery();\n        this.toggleMaximize();\n\n        this.initModules();\n    }\n\n    refreshOnResize(): void {\n        if (this.lgOpened) {\n            const currentGalleryItem = this.galleryItems[this.index];\n            const { __slideVideoInfo } = currentGalleryItem;\n\n            this.mediaContainerPosition = this.getMediaContainerPosition();\n            const { top, bottom } = this.mediaContainerPosition;\n            this.currentImageSize = utils.getSize(\n                this.items[this.index],\n                this.outer,\n                top + bottom,\n                __slideVideoInfo && this.settings.videoMaxSize,\n            );\n            if (__slideVideoInfo) {\n                this.resizeVideoSlide(this.index, this.currentImageSize);\n            }\n            if (this.zoomFromOrigin && !this.isDummyImageRemoved) {\n                const imgStyle = this.getDummyImgStyles(this.currentImageSize);\n                this.outer\n                    .find('.lg-current .lg-dummy-img')\n                    .first()\n                    .attr('style', imgStyle);\n            }\n            this.LGel.trigger(lGEvents.containerResize);\n        }\n    }\n\n    resizeVideoSlide(index: number, imageSize?: ImageSize): void {\n        const lgVideoStyle = this.getVideoContStyle(imageSize);\n        const currentSlide = this.getSlideItem(index);\n        currentSlide.find('.lg-video-cont').attr('style', lgVideoStyle);\n    }\n\n    /**\n     * Update slides dynamically.\n     * Add, edit or delete slides dynamically when lightGallery is opened.\n     * Modify the current gallery items and pass it via updateSlides method\n     * @note\n     * - Do not mutate existing lightGallery items directly.\n     * - Always pass new list of gallery items\n     * - You need to take care of thumbnails outside the gallery if any\n     * - user this method only if you want to update slides when the gallery is opened. Otherwise, use `refresh()` method.\n     * @param items Gallery items\n     * @param index After the update operation, which slide gallery should navigate to\n     * @category lGPublicMethods\n     * @example\n     * const plugin = lightGallery();\n     *\n     * // Adding slides dynamically\n     * let galleryItems = [\n     * // Access existing lightGallery items\n     * // galleryItems are automatically generated internally from the gallery HTML markup\n     * // or directly from galleryItems when dynamic gallery is used\n     *   ...plugin.galleryItems,\n     *     ...[\n     *       {\n     *         src: 'img/img-1.png',\n     *           thumb: 'img/thumb1.png',\n     *         },\n     *     ],\n     *   ];\n     *   plugin.updateSlides(\n     *     galleryItems,\n     *     plugin.index,\n     *   );\n     *\n     *\n     * // Remove slides dynamically\n     * galleryItems = JSON.parse(\n     *   JSON.stringify(updateSlideInstance.galleryItems),\n     * );\n     * galleryItems.shift();\n     * updateSlideInstance.updateSlides(galleryItems, 1);\n     * @see <a href=\"/demos/update-slides/\">Demo</a>\n     */\n    updateSlides(items: GalleryItem[], index: number): void {\n        if (this.index > items.length - 1) {\n            this.index = items.length - 1;\n        }\n        if (items.length === 1) {\n            this.index = 0;\n        }\n        if (!items.length) {\n            this.closeGallery();\n            return;\n        }\n        const currentSrc = this.galleryItems[index].src;\n        this.galleryItems = items;\n        this.updateControls();\n        this.$inner.empty();\n        this.currentItemsInDom = [];\n\n        let _index = 0;\n        // Find the current index based on source value of the slide\n        this.galleryItems.some((galleryItem, itemIndex) => {\n            if (galleryItem.src === currentSrc) {\n                _index = itemIndex;\n                return true;\n            }\n            return false;\n        });\n\n        this.currentItemsInDom = this.organizeSlideItems(_index, -1);\n        this.loadContent(_index, true);\n        this.getSlideItem(_index).addClass('lg-current');\n\n        this.index = _index;\n        this.updateCurrentCounter(_index);\n        this.LGel.trigger(lGEvents.updateSlides);\n    }\n\n    // Get gallery items based on multiple conditions\n    getItems(): GalleryItem[] {\n        // Gallery items\n        this.items = [];\n        if (!this.settings.dynamic) {\n            if (this.settings.selector === 'this') {\n                this.items.push(this.el);\n            } else if (this.settings.selector) {\n                if (typeof this.settings.selector === 'string') {\n                    if (this.settings.selectWithin) {\n                        const selectWithin = $LG(this.settings.selectWithin);\n                        this.items = selectWithin\n                            .find(this.settings.selector)\n                            .get();\n                    } else {\n                        this.items = this.el.querySelectorAll(\n                            this.settings.selector,\n                        );\n                    }\n                } else {\n                    this.items = this.settings.selector;\n                }\n            } else {\n                this.items = this.el.children;\n            }\n            return utils.getDynamicOptions(\n                this.items,\n                this.settings.extraProps,\n                this.settings.getCaptionFromTitleOrAlt,\n                this.settings.exThumbImage,\n            );\n        } else {\n            return this.settings.dynamicEl || [];\n        }\n    }\n\n    shouldHideScrollbar(): boolean {\n        return (\n            this.settings.hideScrollbar &&\n            document.body === this.settings.container\n        );\n    }\n\n    hideScrollbar(): void {\n        if (!this.shouldHideScrollbar()) {\n            return;\n        }\n        this.bodyPaddingRight = parseFloat($LG('body').style().paddingRight);\n        const bodyRect = document.documentElement.getBoundingClientRect();\n        const scrollbarWidth = window.innerWidth - bodyRect.width;\n\n        $LG(document.body).css(\n            'padding-right',\n            scrollbarWidth + this.bodyPaddingRight + 'px',\n        );\n        $LG(document.body).addClass('lg-overlay-open');\n    }\n\n    resetScrollBar(): void {\n        if (!this.shouldHideScrollbar()) {\n            return;\n        }\n        $LG(document.body).css('padding-right', this.bodyPaddingRight + 'px');\n        $LG(document.body).removeClass('lg-overlay-open');\n    }\n\n    /**\n     * Open lightGallery.\n     * Open gallery with specific slide by passing index of the slide as parameter.\n     * @category lGPublicMethods\n     * @param {Number} index  - index of the slide\n     * @param {HTMLElement} element - Which image lightGallery should zoom from\n     *\n     * @example\n     * const $dynamicGallery = document.getElementById('dynamic-gallery-demo');\n     * const dynamicGallery = lightGallery($dynamicGallery, {\n     *     dynamic: true,\n     *     dynamicEl: [\n     *         {\n     *              src: 'img/1.jpg',\n     *              thumb: 'img/thumb-1.jpg',\n     *              subHtml: '<h4>Image 1 title</h4><p>Image 1 descriptions.</p>',\n     *         },\n     *         ...\n     *     ],\n     * });\n     * $dynamicGallery.addEventListener('click', function () {\n     *     // Starts with third item.(Optional).\n     *     // This is useful if you want use dynamic mode with\n     *     // custom thumbnails (thumbnails outside gallery),\n     *     dynamicGallery.openGallery(2);\n     * });\n     *\n     */\n    openGallery(index = this.settings.index, element?: HTMLElement): void {\n        // prevent accidental double execution\n        if (this.lgOpened) return;\n        this.lgOpened = true;\n        this.outer.removeClass('lg-hide-items');\n\n        this.hideScrollbar();\n\n        // Add display block, but still has opacity 0\n        this.$container.addClass('lg-show');\n\n        const itemsToBeInsertedToDom = this.getItemsToBeInsertedToDom(\n            index,\n            index,\n        );\n        this.currentItemsInDom = itemsToBeInsertedToDom;\n\n        let items = '';\n        itemsToBeInsertedToDom.forEach((item) => {\n            items = items + `<div id=\"${item}\" class=\"lg-item\"></div>`;\n        });\n\n        this.$inner.append(items);\n        this.addHtml(index);\n        let transform: string | undefined = '';\n        this.mediaContainerPosition = this.getMediaContainerPosition();\n        const { top, bottom } = this.mediaContainerPosition;\n        if (!this.settings.allowMediaOverlap) {\n            this.setMediaContainerPosition(top, bottom);\n        }\n        const { __slideVideoInfo } = this.galleryItems[index];\n        if (this.zoomFromOrigin && element) {\n            this.currentImageSize = utils.getSize(\n                element,\n                this.outer,\n                top + bottom,\n                __slideVideoInfo && this.settings.videoMaxSize,\n            );\n            transform = utils.getTransform(\n                element,\n                this.outer,\n                top,\n                bottom,\n                this.currentImageSize,\n            );\n        }\n        if (!this.zoomFromOrigin || !transform) {\n            this.outer.addClass(this.settings.startClass);\n            this.getSlideItem(index).removeClass('lg-complete');\n        }\n        const timeout = this.settings.zoomFromOrigin\n            ? 100\n            : this.settings.backdropDuration;\n        setTimeout(() => {\n            this.outer.addClass('lg-components-open');\n        }, timeout);\n        this.index = index;\n        this.LGel.trigger(lGEvents.beforeOpen);\n\n        // add class lg-current to remove initial transition\n        this.getSlideItem(index).addClass('lg-current');\n\n        this.lGalleryOn = false;\n        // Store the current scroll top value to scroll back after closing the gallery..\n        this.prevScrollTop = $LG(window).scrollTop();\n\n        setTimeout(() => {\n            // Need to check both zoomFromOrigin and transform values as we need to set set the\n            // default opening animation if user missed to add the lg-size attribute\n\n            if (this.zoomFromOrigin && transform) {\n                const currentSlide = this.getSlideItem(index);\n                currentSlide.css('transform', transform);\n                setTimeout(() => {\n                    currentSlide\n                        .addClass('lg-start-progress lg-start-end-progress')\n                        .css(\n                            'transition-duration',\n                            this.settings.startAnimationDuration + 'ms',\n                        );\n                    this.outer.addClass('lg-zoom-from-image');\n                });\n                setTimeout(() => {\n                    currentSlide.css('transform', 'translate3d(0, 0, 0)');\n                }, 100);\n            }\n\n            setTimeout(() => {\n                this.$backdrop.addClass('in');\n                this.$container.addClass('lg-show-in');\n            }, 10);\n\n            setTimeout(() => {\n                if (\n                    this.settings.trapFocus &&\n                    document.body === this.settings.container\n                ) {\n                    this.trapFocus();\n                }\n            }, this.settings.backdropDuration + 50);\n\n            // lg-visible class resets gallery opacity to 1\n            if (!this.zoomFromOrigin || !transform) {\n                setTimeout(() => {\n                    this.outer.addClass('lg-visible');\n                }, this.settings.backdropDuration);\n            }\n\n            // initiate slide function\n            this.slide(index, false, false, false);\n\n            this.LGel.trigger(lGEvents.afterOpen);\n        });\n\n        if (document.body === this.settings.container) {\n            $LG('html').addClass('lg-on');\n        }\n    }\n\n    /**\n     * Note - Changing the position of the media on every slide transition creates a flickering effect.\n     * Therefore, The height of the caption is calculated dynamically, only once based on the first slide caption.\n     * if you have dynamic captions for each media,\n     * you can provide an appropriate height for the captions via allowMediaOverlap option\n     */\n    public getMediaContainerPosition(): MediaContainerPosition {\n        if (this.settings.allowMediaOverlap) {\n            return {\n                top: 0,\n                bottom: 0,\n            };\n        }\n        const top = this.$toolbar.get().clientHeight || 0;\n        const subHtml = this.outer.find('.lg-components .lg-sub-html').get();\n        const captionHeight =\n            this.settings.defaultCaptionHeight ||\n            (subHtml && subHtml.clientHeight) ||\n            0;\n        const thumbContainer = this.outer.find('.lg-thumb-outer').get();\n        const thumbHeight = thumbContainer ? thumbContainer.clientHeight : 0;\n        const bottom = thumbHeight + captionHeight;\n        return {\n            top,\n            bottom,\n        };\n    }\n\n    private setMediaContainerPosition(top = 0, bottom = 0): void {\n        this.$content.css('top', top + 'px').css('bottom', bottom + 'px');\n    }\n\n    hideBars(): void {\n        // Hide controllers if mouse doesn't move for some period\n        setTimeout(() => {\n            this.outer.removeClass('lg-hide-items');\n            if (this.settings.hideBarsDelay > 0) {\n                this.outer.on('mousemove.lg click.lg touchstart.lg', () => {\n                    this.outer.removeClass('lg-hide-items');\n\n                    clearTimeout(this.hideBarTimeout);\n\n                    // Timeout will be cleared on each slide movement also\n                    this.hideBarTimeout = setTimeout(() => {\n                        this.outer.addClass('lg-hide-items');\n                    }, this.settings.hideBarsDelay);\n                });\n                this.outer.trigger('mousemove.lg');\n            }\n        }, this.settings.showBarsAfter);\n    }\n\n    initPictureFill($img: lgQuery): void {\n        if (this.settings.supportLegacyBrowser) {\n            try {\n                picturefill({\n                    elements: [$img.get()],\n                });\n            } catch (e) {\n                console.warn(\n                    'lightGallery :- If you want srcset or picture tag to be supported for older browser please include picturefil javascript library in your document.',\n                );\n            }\n        }\n    }\n\n    /**\n     *  @desc Create image counter\n     *  Ex: 1/10\n     */\n    counter(): void {\n        if (this.settings.counter) {\n            const counterHtml = `<div class=\"lg-counter\" role=\"status\" aria-live=\"polite\">\n                <span id=\"${this.getIdName(\n                    'lg-counter-current',\n                )}\" class=\"lg-counter-current\">${this.index + 1} </span> /\n                <span id=\"${this.getIdName(\n                    'lg-counter-all',\n                )}\" class=\"lg-counter-all\">${\n                this.galleryItems.length\n            } </span></div>`;\n            this.outer.find(this.settings.appendCounterTo).append(counterHtml);\n        }\n    }\n\n    /**\n     *  @desc add sub-html into the slide\n     *  @param {Number} index - index of the slide\n     */\n    addHtml(index: number): void {\n        let subHtml;\n        let subHtmlUrl;\n        if (this.galleryItems[index].subHtmlUrl) {\n            subHtmlUrl = this.galleryItems[index].subHtmlUrl;\n        } else {\n            subHtml = this.galleryItems[index].subHtml;\n        }\n\n        if (!subHtmlUrl) {\n            if (subHtml) {\n                // get first letter of sub-html\n                // if first letter starts with . or # get the html form the jQuery object\n                const fL = subHtml.substring(0, 1);\n                if (fL === '.' || fL === '#') {\n                    if (\n                        this.settings.subHtmlSelectorRelative &&\n                        !this.settings.dynamic\n                    ) {\n                        subHtml = $LG(this.items)\n                            .eq(index)\n                            .find(subHtml)\n                            .first()\n                            .html();\n                    } else {\n                        subHtml = $LG(subHtml).first().html();\n                    }\n                }\n            } else {\n                subHtml = '';\n            }\n        }\n\n        if (this.settings.appendSubHtmlTo !== '.lg-item') {\n            if (subHtmlUrl) {\n                this.outer.find('.lg-sub-html').load(subHtmlUrl);\n            } else {\n                this.outer.find('.lg-sub-html').html(subHtml as string);\n            }\n        } else {\n            const currentSlide = $LG(this.getSlideItemId(index));\n            if (subHtmlUrl) {\n                currentSlide.load(subHtmlUrl);\n            } else {\n                currentSlide.append(\n                    `<div class=\"lg-sub-html\">${subHtml}</div>`,\n                );\n            }\n        }\n\n        // Add lg-empty-html class if title doesn't exist\n        if (typeof subHtml !== 'undefined' && subHtml !== null) {\n            if (subHtml === '') {\n                this.outer\n                    .find(this.settings.appendSubHtmlTo)\n                    .addClass('lg-empty-html');\n            } else {\n                this.outer\n                    .find(this.settings.appendSubHtmlTo)\n                    .removeClass('lg-empty-html');\n            }\n        }\n\n        this.LGel.trigger<AfterAppendSubHtmlDetail>(\n            lGEvents.afterAppendSubHtml,\n            {\n                index,\n            },\n        );\n    }\n\n    /**\n     *  @desc Preload slides\n     *  @param {Number} index - index of the slide\n     * @todo preload not working for the first slide, Also, should work for the first and last slide as well\n     */\n    preload(index: number): void {\n        for (let i = 1; i <= this.settings.preload; i++) {\n            if (i >= this.galleryItems.length - index) {\n                break;\n            }\n\n            this.loadContent(index + i, false);\n        }\n\n        for (let j = 1; j <= this.settings.preload; j++) {\n            if (index - j < 0) {\n                break;\n            }\n\n            this.loadContent(index - j, false);\n        }\n    }\n\n    getDummyImgStyles(imageSize?: ImageSize): string {\n        if (!imageSize) return '';\n        return `width:${imageSize.width}px;\n                margin-left: -${imageSize.width / 2}px;\n                margin-top: -${imageSize.height / 2}px;\n                height:${imageSize.height}px`;\n    }\n    getVideoContStyle(imageSize?: ImageSize): string {\n        if (!imageSize) return '';\n        return `width:${imageSize.width}px;\n                height:${imageSize.height}px`;\n    }\n\n    getDummyImageContent(\n        $currentSlide: lgQuery,\n        index: number,\n        alt: string,\n    ): string {\n        let $currentItem;\n        if (!this.settings.dynamic) {\n            $currentItem = $LG(this.items).eq(index);\n        }\n        if ($currentItem) {\n            let _dummyImgSrc;\n            if (!this.settings.exThumbImage) {\n                _dummyImgSrc = $currentItem.find('img').first().attr('src');\n            } else {\n                _dummyImgSrc = $currentItem.attr(this.settings.exThumbImage);\n            }\n            if (!_dummyImgSrc) return '';\n            const imgStyle = this.getDummyImgStyles(this.currentImageSize);\n            const dummyImgContent = `<img ${alt} style=\"${imgStyle}\" class=\"lg-dummy-img\" src=\"${_dummyImgSrc}\" />`;\n\n            $currentSlide.addClass('lg-first-slide');\n            this.outer.addClass('lg-first-slide-loading');\n\n            return dummyImgContent;\n        }\n        return '';\n    }\n\n    setImgMarkup(src: string, $currentSlide: lgQuery, index: number): void {\n        const currentGalleryItem = this.galleryItems[index];\n        const { alt, srcset, sizes, sources } = currentGalleryItem;\n\n        // Use the thumbnail as dummy image which will be resized to actual image size and\n        // displayed on top of actual image\n        let imgContent = '';\n        const altAttr = alt ? 'alt=\"' + alt + '\"' : '';\n\n        if (this.isFirstSlideWithZoomAnimation()) {\n            imgContent = this.getDummyImageContent(\n                $currentSlide,\n                index,\n                altAttr,\n            );\n        } else {\n            imgContent = utils.getImgMarkup(\n                index,\n                src,\n                altAttr,\n                srcset,\n                sizes,\n                sources,\n            );\n        }\n        const imgMarkup = `<picture class=\"lg-img-wrap\"> ${imgContent}</picture>`;\n        $currentSlide.prepend(imgMarkup);\n    }\n\n    onSlideObjectLoad(\n        $slide: lgQuery,\n        isHTML5VideoWithoutPoster: boolean,\n        onLoad: () => void,\n        onError: () => void,\n    ): void {\n        const mediaObject = $slide.find('.lg-object').first();\n        if (\n            utils.isImageLoaded(mediaObject.get() as HTMLImageElement) ||\n            isHTML5VideoWithoutPoster\n        ) {\n            onLoad();\n        } else {\n            mediaObject.on('load.lg error.lg', () => {\n                onLoad && onLoad();\n            });\n            mediaObject.on('error.lg', () => {\n                onError && onError();\n            });\n        }\n    }\n\n    /**\n     *\n     * @param $el Current slide item\n     * @param index\n     * @param delay Delay is 0 except first time\n     * @param speed Speed is same as delay, except it is 0 if gallery is opened via hash plugin\n     * @param isFirstSlide\n     */\n    onLgObjectLoad(\n        currentSlide: lgQuery,\n        index: number,\n        delay: number,\n        speed: number,\n        isFirstSlide: boolean,\n        isHTML5VideoWithoutPoster: boolean,\n    ): void {\n        this.onSlideObjectLoad(\n            currentSlide,\n            isHTML5VideoWithoutPoster,\n            () => {\n                this.triggerSlideItemLoad(\n                    currentSlide,\n                    index,\n                    delay,\n                    speed,\n                    isFirstSlide,\n                );\n            },\n            () => {\n                currentSlide.addClass('lg-complete lg-complete_');\n                currentSlide.html(\n                    '<span class=\"lg-error-msg\">' +\n                        this.settings.strings['mediaLoadingFailed'] +\n                        '</span>',\n                );\n            },\n        );\n    }\n\n    triggerSlideItemLoad(\n        $currentSlide: lgQuery,\n        index: number,\n        delay: number,\n        speed: number,\n        isFirstSlide: boolean,\n    ): void {\n        const currentGalleryItem = this.galleryItems[index];\n\n        // Adding delay for video slides without poster for better performance and user experience\n        // Videos should start playing once once the gallery is completely loaded\n        const _speed =\n            isFirstSlide &&\n            this.getSlideType(currentGalleryItem) === 'video' &&\n            !currentGalleryItem.poster\n                ? speed\n                : 0;\n        setTimeout(() => {\n            $currentSlide.addClass('lg-complete lg-complete_');\n            this.LGel.trigger<SlideItemLoadDetail>(lGEvents.slideItemLoad, {\n                index,\n                delay: delay || 0,\n                isFirstSlide,\n            });\n        }, _speed);\n    }\n\n    isFirstSlideWithZoomAnimation(): boolean {\n        return !!(\n            !this.lGalleryOn &&\n            this.zoomFromOrigin &&\n            this.currentImageSize\n        );\n    }\n\n    // Add video slideInfo\n    addSlideVideoInfo(items: GalleryItem[]): void {\n        items.forEach((element, index) => {\n            element.__slideVideoInfo = utils.isVideo(\n                element.src as string,\n                !!element.video,\n                index,\n            );\n            if (\n                element.__slideVideoInfo &&\n                this.settings.loadYouTubePoster &&\n                !element.poster &&\n                element.__slideVideoInfo.youtube\n            ) {\n                element.poster = `//img.youtube.com/vi/${element.__slideVideoInfo.youtube[1]}/maxresdefault.jpg`;\n            }\n        });\n    }\n\n    /**\n     *  Load slide content into slide.\n     *  This is used to load content into slides that is not visible too\n     *  @param {Number} index - index of the slide.\n     *  @param {Boolean} rec - if true call loadcontent() function again.\n     */\n    loadContent(index: number, rec: boolean): void {\n        const currentGalleryItem = this.galleryItems[index];\n        const $currentSlide = $LG(this.getSlideItemId(index));\n\n        const { poster, srcset, sizes, sources } = currentGalleryItem;\n        let { src } = currentGalleryItem;\n\n        const video = currentGalleryItem.video;\n\n        const _html5Video =\n            video && typeof video === 'string' ? JSON.parse(video) : video;\n\n        if (currentGalleryItem.responsive) {\n            const srcDyItms = currentGalleryItem.responsive.split(',');\n            src = utils.getResponsiveSrc(srcDyItms) || src;\n        }\n\n        const videoInfo = currentGalleryItem.__slideVideoInfo;\n        let lgVideoStyle = '';\n\n        const iframe = !!currentGalleryItem.iframe;\n\n        const isFirstSlide = !this.lGalleryOn;\n\n        // delay for adding complete class. it is 0 except first time.\n        let delay = 0;\n        if (isFirstSlide) {\n            if (this.zoomFromOrigin && this.currentImageSize) {\n                delay = this.settings.startAnimationDuration + 10;\n            } else {\n                delay = this.settings.backdropDuration + 10;\n            }\n        }\n\n        if (!$currentSlide.hasClass('lg-loaded')) {\n            if (videoInfo) {\n                const { top, bottom } = this.mediaContainerPosition;\n                const videoSize = utils.getSize(\n                    this.items[index],\n                    this.outer,\n                    top + bottom,\n                    videoInfo && this.settings.videoMaxSize,\n                );\n                lgVideoStyle = this.getVideoContStyle(videoSize);\n            }\n            if (iframe) {\n                const markup = utils.getIframeMarkup(\n                    this.settings.iframeWidth,\n                    this.settings.iframeHeight,\n                    this.settings.iframeMaxWidth,\n                    this.settings.iframeMaxHeight,\n                    src,\n                    currentGalleryItem.iframeTitle,\n                );\n                $currentSlide.prepend(markup);\n            } else if (poster) {\n                let dummyImg = '';\n                const hasStartAnimation =\n                    isFirstSlide &&\n                    this.zoomFromOrigin &&\n                    this.currentImageSize;\n                if (hasStartAnimation) {\n                    dummyImg = this.getDummyImageContent(\n                        $currentSlide,\n                        index,\n                        '',\n                    );\n                }\n\n                const markup = utils.getVideoPosterMarkup(\n                    poster,\n                    dummyImg || '',\n                    lgVideoStyle,\n                    this.settings.strings['playVideo'],\n                    videoInfo,\n                );\n                $currentSlide.prepend(markup);\n            } else if (videoInfo) {\n                const markup = `<div class=\"lg-video-cont \" style=\"${lgVideoStyle}\"></div>`;\n                $currentSlide.prepend(markup);\n            } else {\n                this.setImgMarkup(src as string, $currentSlide, index);\n                if (srcset || sources) {\n                    const $img = $currentSlide.find('.lg-object');\n                    this.initPictureFill($img);\n                }\n            }\n            if (poster || videoInfo) {\n                this.LGel.trigger(lGEvents.hasVideo, {\n                    index,\n                    src: src,\n                    html5Video: _html5Video,\n                    hasPoster: !!poster,\n                });\n            }\n\n            this.LGel.trigger<AfterAppendSlideEventDetail>(\n                lGEvents.afterAppendSlide,\n                { index },\n            );\n\n            if (\n                this.lGalleryOn &&\n                this.settings.appendSubHtmlTo === '.lg-item'\n            ) {\n                this.addHtml(index);\n            }\n        }\n\n        // For first time add some delay for displaying the start animation.\n        let _speed = 0;\n\n        // Do not change the delay value because it is required for zoom plugin.\n        // If gallery opened from direct url (hash) speed value should be 0\n        if (delay && !$LG(document.body).hasClass('lg-from-hash')) {\n            _speed = delay;\n        }\n\n        // Only for first slide and zoomFromOrigin is enabled\n        if (this.isFirstSlideWithZoomAnimation()) {\n            setTimeout(() => {\n                $currentSlide\n                    .removeClass('lg-start-end-progress lg-start-progress')\n                    .removeAttr('style');\n            }, this.settings.startAnimationDuration + 100);\n            if (!$currentSlide.hasClass('lg-loaded')) {\n                setTimeout(() => {\n                    if (this.getSlideType(currentGalleryItem) === 'image') {\n                        const { alt } = currentGalleryItem;\n                        const altAttr = alt ? 'alt=\"' + alt + '\"' : '';\n\n                        $currentSlide\n                            .find('.lg-img-wrap')\n                            .append(\n                                utils.getImgMarkup(\n                                    index,\n                                    src as string,\n                                    altAttr,\n                                    srcset,\n                                    sizes,\n                                    currentGalleryItem.sources,\n                                ),\n                            );\n                        if (srcset || sources) {\n                            const $img = $currentSlide.find('.lg-object');\n                            this.initPictureFill($img);\n                        }\n                    }\n                    if (\n                        this.getSlideType(currentGalleryItem) === 'image' ||\n                        (this.getSlideType(currentGalleryItem) === 'video' &&\n                            poster)\n                    ) {\n                        this.onLgObjectLoad(\n                            $currentSlide,\n                            index,\n                            delay,\n                            _speed,\n                            true,\n                            false,\n                        );\n\n                        // load remaining slides once the slide is completely loaded\n                        this.onSlideObjectLoad(\n                            $currentSlide,\n                            !!(videoInfo && videoInfo.html5 && !poster),\n                            () => {\n                                this.loadContentOnFirstSlideLoad(\n                                    index,\n                                    $currentSlide,\n                                    _speed,\n                                );\n                            },\n                            () => {\n                                this.loadContentOnFirstSlideLoad(\n                                    index,\n                                    $currentSlide,\n                                    _speed,\n                                );\n                            },\n                        );\n                    }\n                }, this.settings.startAnimationDuration + 100);\n            }\n        }\n\n        // SLide content has been added to dom\n        $currentSlide.addClass('lg-loaded');\n\n        if (\n            !this.isFirstSlideWithZoomAnimation() ||\n            (this.getSlideType(currentGalleryItem) === 'video' && !poster)\n        ) {\n            this.onLgObjectLoad(\n                $currentSlide,\n                index,\n                delay,\n                _speed,\n                isFirstSlide,\n                !!(videoInfo && videoInfo.html5 && !poster),\n            );\n        }\n\n        // When gallery is opened once content is loaded (second time) need to add lg-complete class for css styling\n        if (\n            (!this.zoomFromOrigin || !this.currentImageSize) &&\n            $currentSlide.hasClass('lg-complete_') &&\n            !this.lGalleryOn\n        ) {\n            setTimeout(() => {\n                $currentSlide.addClass('lg-complete');\n            }, this.settings.backdropDuration);\n        }\n\n        // Content loaded\n        // Need to set lGalleryOn before calling preload function\n        this.lGalleryOn = true;\n\n        if (rec === true) {\n            if (!$currentSlide.hasClass('lg-complete_')) {\n                $currentSlide\n                    .find('.lg-object')\n                    .first()\n                    .on('load.lg error.lg', () => {\n                        this.preload(index);\n                    });\n            } else {\n                this.preload(index);\n            }\n        }\n    }\n\n    /**\n     * @desc Remove dummy image content and load next slides\n     * Called only for the first time if zoomFromOrigin animation is enabled\n     * @param index\n     * @param $currentSlide\n     * @param speed\n     */\n    loadContentOnFirstSlideLoad(\n        index: number,\n        $currentSlide: lgQuery,\n        speed: number,\n    ): void {\n        setTimeout(() => {\n            $currentSlide.find('.lg-dummy-img').remove();\n            $currentSlide.removeClass('lg-first-slide');\n            this.outer.removeClass('lg-first-slide-loading');\n            this.isDummyImageRemoved = true;\n            this.preload(index);\n        }, speed + 300);\n    }\n\n    getItemsToBeInsertedToDom(\n        index: number,\n        prevIndex: number,\n        numberOfItems = 0,\n    ): string[] {\n        const itemsToBeInsertedToDom: string[] = [];\n        // Minimum 2 items should be there\n        let possibleNumberOfItems = Math.max(numberOfItems, 3);\n        possibleNumberOfItems = Math.min(\n            possibleNumberOfItems,\n            this.galleryItems.length,\n        );\n        const prevIndexItem = `lg-item-${this.lgId}-${prevIndex}`;\n        if (this.galleryItems.length <= 3) {\n            this.galleryItems.forEach((_element, index) => {\n                itemsToBeInsertedToDom.push(`lg-item-${this.lgId}-${index}`);\n            });\n            return itemsToBeInsertedToDom;\n        }\n\n        if (index < (this.galleryItems.length - 1) / 2) {\n            for (\n                let idx = index;\n                idx > index - possibleNumberOfItems / 2 && idx >= 0;\n                idx--\n            ) {\n                itemsToBeInsertedToDom.push(`lg-item-${this.lgId}-${idx}`);\n            }\n            const numberOfExistingItems = itemsToBeInsertedToDom.length;\n            for (\n                let idx = 0;\n                idx < possibleNumberOfItems - numberOfExistingItems;\n                idx++\n            ) {\n                itemsToBeInsertedToDom.push(\n                    `lg-item-${this.lgId}-${index + idx + 1}`,\n                );\n            }\n        } else {\n            for (\n                let idx = index;\n                idx <= this.galleryItems.length - 1 &&\n                idx < index + possibleNumberOfItems / 2;\n                idx++\n            ) {\n                itemsToBeInsertedToDom.push(`lg-item-${this.lgId}-${idx}`);\n            }\n            const numberOfExistingItems = itemsToBeInsertedToDom.length;\n            for (\n                let idx = 0;\n                idx < possibleNumberOfItems - numberOfExistingItems;\n                idx++\n            ) {\n                itemsToBeInsertedToDom.push(\n                    `lg-item-${this.lgId}-${index - idx - 1}`,\n                );\n            }\n        }\n        if (this.settings.loop) {\n            if (index === this.galleryItems.length - 1) {\n                itemsToBeInsertedToDom.push(`lg-item-${this.lgId}-${0}`);\n            } else if (index === 0) {\n                itemsToBeInsertedToDom.push(\n                    `lg-item-${this.lgId}-${this.galleryItems.length - 1}`,\n                );\n            }\n        }\n        if (itemsToBeInsertedToDom.indexOf(prevIndexItem) === -1) {\n            itemsToBeInsertedToDom.push(`lg-item-${this.lgId}-${prevIndex}`);\n        }\n\n        return itemsToBeInsertedToDom;\n    }\n\n    organizeSlideItems(index: number, prevIndex: number): string[] {\n        const itemsToBeInsertedToDom = this.getItemsToBeInsertedToDom(\n            index,\n            prevIndex,\n            this.settings.numberOfSlideItemsInDom,\n        );\n\n        itemsToBeInsertedToDom.forEach((item) => {\n            if (this.currentItemsInDom.indexOf(item) === -1) {\n                this.$inner.append(`<div id=\"${item}\" class=\"lg-item\"></div>`);\n            }\n        });\n\n        this.currentItemsInDom.forEach((item) => {\n            if (itemsToBeInsertedToDom.indexOf(item) === -1) {\n                $LG(`#${item}`).remove();\n            }\n        });\n        return itemsToBeInsertedToDom;\n    }\n\n    /**\n     * Get previous index of the slide\n     */\n    getPreviousSlideIndex(): number {\n        let prevIndex = 0;\n        try {\n            const currentItemId = this.outer\n                .find('.lg-current')\n                .first()\n                .attr('id');\n            prevIndex = parseInt(currentItemId.split('-')[3]) || 0;\n        } catch (error) {\n            prevIndex = 0;\n        }\n        return prevIndex;\n    }\n\n    setDownloadValue(index: number): void {\n        if (this.settings.download) {\n            const currentGalleryItem = this.galleryItems[index];\n            const hideDownloadBtn =\n                currentGalleryItem.downloadUrl === false ||\n                currentGalleryItem.downloadUrl === 'false';\n            if (hideDownloadBtn) {\n                this.outer.addClass('lg-hide-download');\n            } else {\n                const $download = this.getElementById('lg-download');\n                this.outer.removeClass('lg-hide-download');\n                $download.attr(\n                    'href',\n                    currentGalleryItem.downloadUrl ||\n                        (currentGalleryItem.src as string),\n                );\n                if (currentGalleryItem.download) {\n                    $download.attr('download', currentGalleryItem.download);\n                }\n            }\n        }\n    }\n\n    makeSlideAnimation(\n        direction: 'next' | 'prev',\n        currentSlideItem: lgQuery,\n        previousSlideItem: lgQuery,\n    ): void {\n        if (this.lGalleryOn) {\n            previousSlideItem.addClass('lg-slide-progress');\n        }\n        setTimeout(\n            () => {\n                // remove all transitions\n                this.outer.addClass('lg-no-trans');\n\n                this.outer\n                    .find('.lg-item')\n                    .removeClass('lg-prev-slide lg-next-slide');\n\n                if (direction === 'prev') {\n                    //prevslide\n                    currentSlideItem.addClass('lg-prev-slide');\n                    previousSlideItem.addClass('lg-next-slide');\n                } else {\n                    // next slide\n                    currentSlideItem.addClass('lg-next-slide');\n                    previousSlideItem.addClass('lg-prev-slide');\n                }\n\n                // give 50 ms for browser to add/remove class\n                setTimeout(() => {\n                    this.outer.find('.lg-item').removeClass('lg-current');\n\n                    currentSlideItem.addClass('lg-current');\n\n                    // reset all transitions\n                    this.outer.removeClass('lg-no-trans');\n                }, 50);\n            },\n            this.lGalleryOn ? this.settings.slideDelay : 0,\n        );\n    }\n\n    /**\n     * Goto a specific slide.\n     * @param {Number} index - index of the slide\n     * @param {Boolean} fromTouch - true if slide function called via touch event or mouse drag\n     * @param {Boolean} fromThumb - true if slide function called via thumbnail click\n     * @param {String} direction - Direction of the slide(next/prev)\n     * @category lGPublicMethods\n     * @example\n     *  const plugin = lightGallery();\n     *  // to go to 3rd slide\n     *  plugin.slide(2);\n     *\n     */\n    slide(\n        index: number,\n        fromTouch?: boolean,\n        fromThumb?: boolean,\n        direction?: SlideDirection | false,\n    ): void {\n        const prevIndex = this.getPreviousSlideIndex();\n        this.currentItemsInDom = this.organizeSlideItems(index, prevIndex);\n\n        // Prevent multiple call, Required for hsh plugin\n        if (this.lGalleryOn && prevIndex === index) {\n            return;\n        }\n\n        const numberOfGalleryItems = this.galleryItems.length;\n\n        if (!this.lgBusy) {\n            if (this.settings.counter) {\n                this.updateCurrentCounter(index);\n            }\n\n            const currentSlideItem = this.getSlideItem(index);\n            const previousSlideItem = this.getSlideItem(prevIndex);\n\n            const currentGalleryItem = this.galleryItems[index];\n            const videoInfo = currentGalleryItem.__slideVideoInfo;\n\n            this.outer.attr(\n                'data-lg-slide-type',\n                this.getSlideType(currentGalleryItem),\n            );\n            this.setDownloadValue(index);\n\n            if (videoInfo) {\n                const { top, bottom } = this.mediaContainerPosition;\n                const videoSize = utils.getSize(\n                    this.items[index],\n                    this.outer,\n                    top + bottom,\n                    videoInfo && this.settings.videoMaxSize,\n                );\n                this.resizeVideoSlide(index, videoSize);\n            }\n\n            this.LGel.trigger<BeforeSlideDetail>(lGEvents.beforeSlide, {\n                prevIndex,\n                index,\n                fromTouch: !!fromTouch,\n                fromThumb: !!fromThumb,\n            });\n\n            this.lgBusy = true;\n\n            clearTimeout(this.hideBarTimeout);\n\n            this.arrowDisable(index);\n\n            if (!direction) {\n                if (index < prevIndex) {\n                    direction = 'prev';\n                } else if (index > prevIndex) {\n                    direction = 'next';\n                }\n            }\n\n            if (!fromTouch) {\n                this.makeSlideAnimation(\n                    direction as SlideDirection,\n                    currentSlideItem,\n                    previousSlideItem,\n                );\n            } else {\n                this.outer\n                    .find('.lg-item')\n                    .removeClass('lg-prev-slide lg-current lg-next-slide');\n                let touchPrev;\n                let touchNext;\n                if (numberOfGalleryItems > 2) {\n                    touchPrev = index - 1;\n                    touchNext = index + 1;\n\n                    if (index === 0 && prevIndex === numberOfGalleryItems - 1) {\n                        // next slide\n                        touchNext = 0;\n                        touchPrev = numberOfGalleryItems - 1;\n                    } else if (\n                        index === numberOfGalleryItems - 1 &&\n                        prevIndex === 0\n                    ) {\n                        // prev slide\n                        touchNext = 0;\n                        touchPrev = numberOfGalleryItems - 1;\n                    }\n                } else {\n                    touchPrev = 0;\n                    touchNext = 1;\n                }\n\n                if (direction === 'prev') {\n                    this.getSlideItem(touchNext).addClass('lg-next-slide');\n                } else {\n                    this.getSlideItem(touchPrev).addClass('lg-prev-slide');\n                }\n\n                currentSlideItem.addClass('lg-current');\n            }\n\n            // Do not put load content in set timeout as it needs to load immediately when the gallery is opened\n            if (!this.lGalleryOn) {\n                this.loadContent(index, true);\n            } else {\n                setTimeout(() => {\n                    this.loadContent(index, true);\n                    // Add title if this.settings.appendSubHtmlTo === lg-sub-html\n                    if (this.settings.appendSubHtmlTo !== '.lg-item') {\n                        this.addHtml(index);\n                    }\n                }, this.settings.speed + 50 + (fromTouch ? 0 : this.settings.slideDelay));\n            }\n\n            setTimeout(() => {\n                this.lgBusy = false;\n                previousSlideItem.removeClass('lg-slide-progress');\n                this.LGel.trigger(lGEvents.afterSlide, {\n                    prevIndex: prevIndex,\n                    index,\n                    fromTouch,\n                    fromThumb,\n                });\n            }, (this.lGalleryOn ? this.settings.speed + 100 : 100) + (fromTouch ? 0 : this.settings.slideDelay));\n        }\n\n        this.index = index;\n    }\n\n    updateCurrentCounter(index: number): void {\n        this.getElementById('lg-counter-current').html(index + 1 + '');\n    }\n\n    updateCounterTotal(): void {\n        this.getElementById('lg-counter-all').html(\n            this.galleryItems.length + '',\n        );\n    }\n\n    getSlideType(item: GalleryItem): 'video' | 'iframe' | 'image' {\n        if (item.__slideVideoInfo) {\n            return 'video';\n        } else if (item.iframe) {\n            return 'iframe';\n        } else {\n            return 'image';\n        }\n    }\n\n    touchMove(startCoords: Coords, endCoords: Coords, e?: TouchEvent): void {\n        const distanceX = endCoords.pageX - startCoords.pageX;\n        const distanceY = endCoords.pageY - startCoords.pageY;\n        let allowSwipe = false;\n\n        if (this.swipeDirection) {\n            allowSwipe = true;\n        } else {\n            if (Math.abs(distanceX) > 15) {\n                this.swipeDirection = 'horizontal';\n                allowSwipe = true;\n            } else if (Math.abs(distanceY) > 15) {\n                this.swipeDirection = 'vertical';\n                allowSwipe = true;\n            }\n        }\n\n        if (!allowSwipe) {\n            return;\n        }\n\n        const $currentSlide = this.getSlideItem(this.index);\n\n        if (this.swipeDirection === 'horizontal') {\n            e?.preventDefault();\n            // reset opacity and transition duration\n            this.outer.addClass('lg-dragging');\n\n            // move current slide\n            this.setTranslate($currentSlide, distanceX, 0);\n\n            // move next and prev slide with current slide\n            const width = $currentSlide.get().offsetWidth;\n            const slideWidthAmount = (width * 15) / 100;\n            const gutter = slideWidthAmount - Math.abs((distanceX * 10) / 100);\n            this.setTranslate(\n                this.outer.find('.lg-prev-slide').first(),\n                -width + distanceX - gutter,\n                0,\n            );\n\n            this.setTranslate(\n                this.outer.find('.lg-next-slide').first(),\n                width + distanceX + gutter,\n                0,\n            );\n        } else if (this.swipeDirection === 'vertical') {\n            if (this.settings.swipeToClose) {\n                e?.preventDefault();\n                this.$container.addClass('lg-dragging-vertical');\n\n                const opacity = 1 - Math.abs(distanceY) / window.innerHeight;\n                this.$backdrop.css('opacity', opacity);\n\n                const scale = 1 - Math.abs(distanceY) / (window.innerWidth * 2);\n                this.setTranslate($currentSlide, 0, distanceY, scale, scale);\n                if (Math.abs(distanceY) > 100) {\n                    this.outer\n                        .addClass('lg-hide-items')\n                        .removeClass('lg-components-open');\n                }\n            }\n        }\n    }\n\n    touchEnd(endCoords: Coords, startCoords: Coords, event: TouchEvent): void {\n        let distance;\n\n        // keep slide animation for any mode while dragg/swipe\n        if (this.settings.mode !== 'lg-slide') {\n            this.outer.addClass('lg-slide');\n        }\n\n        // set transition duration\n        setTimeout(() => {\n            this.$container.removeClass('lg-dragging-vertical');\n            this.outer\n                .removeClass('lg-dragging lg-hide-items')\n                .addClass('lg-components-open');\n\n            let triggerClick = true;\n\n            if (this.swipeDirection === 'horizontal') {\n                distance = endCoords.pageX - startCoords.pageX;\n                const distanceAbs = Math.abs(\n                    endCoords.pageX - startCoords.pageX,\n                );\n                if (\n                    distance < 0 &&\n                    distanceAbs > this.settings.swipeThreshold\n                ) {\n                    this.goToNextSlide(true);\n                    triggerClick = false;\n                } else if (\n                    distance > 0 &&\n                    distanceAbs > this.settings.swipeThreshold\n                ) {\n                    this.goToPrevSlide(true);\n                    triggerClick = false;\n                }\n            } else if (this.swipeDirection === 'vertical') {\n                distance = Math.abs(endCoords.pageY - startCoords.pageY);\n                if (\n                    this.settings.closable &&\n                    this.settings.swipeToClose &&\n                    distance > 100\n                ) {\n                    this.closeGallery();\n                    return;\n                } else {\n                    this.$backdrop.css('opacity', 1);\n                }\n            }\n            this.outer.find('.lg-item').removeAttr('style');\n\n            if (\n                triggerClick &&\n                Math.abs(endCoords.pageX - startCoords.pageX) < 5\n            ) {\n                // Trigger click if distance is less than 5 pix\n                const target = $LG(event.target);\n                if (this.isPosterElement(target)) {\n                    this.LGel.trigger(lGEvents.posterClick);\n                }\n            }\n\n            this.swipeDirection = undefined;\n        });\n\n        // remove slide class once drag/swipe is completed if mode is not slide\n        setTimeout(() => {\n            if (\n                !this.outer.hasClass('lg-dragging') &&\n                this.settings.mode !== 'lg-slide'\n            ) {\n                this.outer.removeClass('lg-slide');\n            }\n        }, this.settings.speed + 100);\n    }\n\n    enableSwipe(): void {\n        let startCoords: Coords = {} as Coords;\n        let endCoords: Coords = {} as Coords;\n        let isMoved = false;\n        let isSwiping = false;\n\n        if (this.settings.enableSwipe) {\n            this.$inner.on('touchstart.lg', (e) => {\n                this.dragOrSwipeEnabled = true;\n                const $item = this.getSlideItem(this.index);\n                if (\n                    ($LG(e.target).hasClass('lg-item') ||\n                        $item.get().contains(e.target)) &&\n                    !this.outer.hasClass('lg-zoomed') &&\n                    !this.lgBusy &&\n                    e.touches.length === 1\n                ) {\n                    isSwiping = true;\n                    this.touchAction = 'swipe';\n                    this.manageSwipeClass();\n                    startCoords = {\n                        pageX: e.touches[0].pageX,\n                        pageY: e.touches[0].pageY,\n                    };\n                }\n            });\n\n            this.$inner.on('touchmove.lg', (e) => {\n                if (\n                    isSwiping &&\n                    this.touchAction === 'swipe' &&\n                    e.touches.length === 1\n                ) {\n                    endCoords = {\n                        pageX: e.touches[0].pageX,\n                        pageY: e.touches[0].pageY,\n                    };\n                    this.touchMove(startCoords, endCoords, e);\n                    isMoved = true;\n                }\n            });\n\n            this.$inner.on('touchend.lg', (event: TouchEvent) => {\n                if (this.touchAction === 'swipe') {\n                    if (isMoved) {\n                        isMoved = false;\n                        this.touchEnd(endCoords, startCoords, event);\n                    } else if (isSwiping) {\n                        const target = $LG(event.target);\n                        if (this.isPosterElement(target)) {\n                            this.LGel.trigger(lGEvents.posterClick);\n                        }\n                    }\n                    this.touchAction = undefined;\n                    isSwiping = false;\n                }\n            });\n        }\n    }\n\n    enableDrag(): void {\n        let startCoords: Coords = {} as Coords;\n        let endCoords: Coords = {} as Coords;\n        let isDraging = false;\n        let isMoved = false;\n        if (this.settings.enableDrag) {\n            this.outer.on('mousedown.lg', (e) => {\n                this.dragOrSwipeEnabled = true;\n                const $item = this.getSlideItem(this.index);\n                if (\n                    $LG(e.target).hasClass('lg-item') ||\n                    $item.get().contains(e.target)\n                ) {\n                    if (!this.outer.hasClass('lg-zoomed') && !this.lgBusy) {\n                        e.preventDefault();\n                        if (!this.lgBusy) {\n                            this.manageSwipeClass();\n                            startCoords = {\n                                pageX: e.pageX,\n                                pageY: e.pageY,\n                            };\n                            isDraging = true;\n\n                            // ** Fix for webkit cursor issue https://code.google.com/p/chromium/issues/detail?id=26723\n                            this.outer.get().scrollLeft += 1;\n                            this.outer.get().scrollLeft -= 1;\n\n                            // *\n\n                            this.outer\n                                .removeClass('lg-grab')\n                                .addClass('lg-grabbing');\n\n                            this.LGel.trigger(lGEvents.dragStart);\n                        }\n                    }\n                }\n            });\n\n            $LG(window).on(`mousemove.lg.global${this.lgId}`, (e) => {\n                if (isDraging && this.lgOpened) {\n                    isMoved = true;\n                    endCoords = {\n                        pageX: e.pageX,\n                        pageY: e.pageY,\n                    };\n                    this.touchMove(startCoords, endCoords);\n                    this.LGel.trigger(lGEvents.dragMove);\n                }\n            });\n\n            $LG(window).on(`mouseup.lg.global${this.lgId}`, (event) => {\n                if (!this.lgOpened) {\n                    return;\n                }\n                const target = $LG(event.target);\n                if (isMoved) {\n                    isMoved = false;\n                    this.touchEnd(endCoords, startCoords, event);\n                    this.LGel.trigger(lGEvents.dragEnd);\n                } else if (this.isPosterElement(target)) {\n                    this.LGel.trigger(lGEvents.posterClick);\n                }\n\n                // Prevent execution on click\n                if (isDraging) {\n                    isDraging = false;\n                    this.outer.removeClass('lg-grabbing').addClass('lg-grab');\n                }\n            });\n        }\n    }\n\n    triggerPosterClick(): void {\n        this.$inner.on('click.lg', (event) => {\n            if (\n                !this.dragOrSwipeEnabled &&\n                this.isPosterElement($LG(event.target))\n            ) {\n                this.LGel.trigger(lGEvents.posterClick);\n            }\n        });\n    }\n\n    manageSwipeClass(): void {\n        let _touchNext = this.index + 1;\n        let _touchPrev = this.index - 1;\n        if (this.settings.loop && this.galleryItems.length > 2) {\n            if (this.index === 0) {\n                _touchPrev = this.galleryItems.length - 1;\n            } else if (this.index === this.galleryItems.length - 1) {\n                _touchNext = 0;\n            }\n        }\n\n        this.outer.find('.lg-item').removeClass('lg-next-slide lg-prev-slide');\n        if (_touchPrev > -1) {\n            this.getSlideItem(_touchPrev).addClass('lg-prev-slide');\n        }\n\n        this.getSlideItem(_touchNext).addClass('lg-next-slide');\n    }\n\n    /**\n     * Go to next slide\n     * @param {Boolean} fromTouch - true if slide function called via touch event\n     * @category lGPublicMethods\n     * @example\n     *  const plugin = lightGallery();\n     *  plugin.goToNextSlide();\n     * @see <a href=\"/demos/methods/\">Demo</a>\n     */\n    goToNextSlide(fromTouch?: boolean): void {\n        let _loop = this.settings.loop;\n        if (fromTouch && this.galleryItems.length < 3) {\n            _loop = false;\n        }\n\n        if (!this.lgBusy) {\n            if (this.index + 1 < this.galleryItems.length) {\n                this.index++;\n                this.LGel.trigger(lGEvents.beforeNextSlide, {\n                    index: this.index,\n                });\n                this.slide(this.index, !!fromTouch, false, 'next');\n            } else {\n                if (_loop) {\n                    this.index = 0;\n                    this.LGel.trigger(lGEvents.beforeNextSlide, {\n                        index: this.index,\n                    });\n                    this.slide(this.index, !!fromTouch, false, 'next');\n                } else if (this.settings.slideEndAnimation && !fromTouch) {\n                    this.outer.addClass('lg-right-end');\n                    setTimeout(() => {\n                        this.outer.removeClass('lg-right-end');\n                    }, 400);\n                }\n            }\n        }\n    }\n\n    /**\n     * Go to previous slides\n     * @param {Boolean} fromTouch - true if slide function called via touch event\n     * @category lGPublicMethods\n     * @example\n     *  const plugin = lightGallery({});\n     *  plugin.goToPrevSlide();\n     * @see <a href=\"/demos/methods/\">Demo</a>\n     *\n     */\n    goToPrevSlide(fromTouch?: boolean): void {\n        let _loop = this.settings.loop;\n        if (fromTouch && this.galleryItems.length < 3) {\n            _loop = false;\n        }\n\n        if (!this.lgBusy) {\n            if (this.index > 0) {\n                this.index--;\n                this.LGel.trigger(lGEvents.beforePrevSlide, {\n                    index: this.index,\n                    fromTouch,\n                });\n                this.slide(this.index, !!fromTouch, false, 'prev');\n            } else {\n                if (_loop) {\n                    this.index = this.galleryItems.length - 1;\n                    this.LGel.trigger(lGEvents.beforePrevSlide, {\n                        index: this.index,\n                        fromTouch,\n                    });\n                    this.slide(this.index, !!fromTouch, false, 'prev');\n                } else if (this.settings.slideEndAnimation && !fromTouch) {\n                    this.outer.addClass('lg-left-end');\n                    setTimeout(() => {\n                        this.outer.removeClass('lg-left-end');\n                    }, 400);\n                }\n            }\n        }\n    }\n\n    keyPress(): void {\n        $LG(window).on(`keydown.lg.global${this.lgId}`, (e) => {\n            if (\n                this.lgOpened &&\n                this.settings.escKey === true &&\n                e.keyCode === 27\n            ) {\n                e.preventDefault();\n                if (\n                    this.settings.allowMediaOverlap &&\n                    this.outer.hasClass('lg-can-toggle') &&\n                    this.outer.hasClass('lg-components-open')\n                ) {\n                    this.outer.removeClass('lg-components-open');\n                } else {\n                    this.closeGallery();\n                }\n            }\n            if (this.lgOpened && this.galleryItems.length > 1) {\n                if (e.keyCode === 37) {\n                    e.preventDefault();\n                    this.goToPrevSlide();\n                }\n\n                if (e.keyCode === 39) {\n                    e.preventDefault();\n                    this.goToNextSlide();\n                }\n            }\n        });\n    }\n\n    arrow(): void {\n        this.getElementById('lg-prev').on('click.lg', () => {\n            this.goToPrevSlide();\n        });\n        this.getElementById('lg-next').on('click.lg', () => {\n            this.goToNextSlide();\n        });\n    }\n\n    arrowDisable(index: number): void {\n        // Disable arrows if settings.hideControlOnEnd is true\n        if (!this.settings.loop && this.settings.hideControlOnEnd) {\n            const $prev = this.getElementById('lg-prev');\n            const $next = this.getElementById('lg-next');\n            if (index + 1 === this.galleryItems.length) {\n                $next.attr('disabled', 'disabled').addClass('disabled');\n            } else {\n                $next.removeAttr('disabled').removeClass('disabled');\n            }\n\n            if (index === 0) {\n                $prev.attr('disabled', 'disabled').addClass('disabled');\n            } else {\n                $prev.removeAttr('disabled').removeClass('disabled');\n            }\n        }\n    }\n\n    setTranslate(\n        $el: lgQuery,\n        xValue: number,\n        yValue: number,\n        scaleX = 1,\n        scaleY = 1,\n    ): void {\n        $el.css(\n            'transform',\n            'translate3d(' +\n                xValue +\n                'px, ' +\n                yValue +\n                'px, 0px) scale3d(' +\n                scaleX +\n                ', ' +\n                scaleY +\n                ', 1)',\n        );\n    }\n\n    mousewheel(): void {\n        let lastCall = 0;\n        this.outer.on('wheel.lg', (e) => {\n            if (!e.deltaY || this.galleryItems.length < 2) {\n                return;\n            }\n            e.preventDefault();\n            const now = new Date().getTime();\n            if (now - lastCall < 1000) {\n                return;\n            }\n            lastCall = now;\n            if (e.deltaY > 0) {\n                this.goToNextSlide();\n            } else if (e.deltaY < 0) {\n                this.goToPrevSlide();\n            }\n        });\n    }\n\n    isSlideElement(target: lgQuery): boolean {\n        return (\n            target.hasClass('lg-outer') ||\n            target.hasClass('lg-item') ||\n            target.hasClass('lg-img-wrap')\n        );\n    }\n\n    isPosterElement(target: lgQuery): boolean {\n        const playButton = this.getSlideItem(this.index)\n            .find('.lg-video-play-button')\n            .get();\n        return (\n            target.hasClass('lg-video-poster') ||\n            target.hasClass('lg-video-play-button') ||\n            (playButton && playButton.contains(target.get()))\n        );\n    }\n\n    /**\n     * Maximize minimize inline gallery.\n     * @category lGPublicMethods\n     */\n    toggleMaximize(): void {\n        this.getElementById('lg-maximize').on('click.lg', () => {\n            this.$container.toggleClass('lg-inline');\n            this.refreshOnResize();\n        });\n    }\n\n    invalidateItems(): void {\n        for (let index = 0; index < this.items.length; index++) {\n            const element = this.items[index];\n            const $element = $LG(element);\n            $element.off(`click.lgcustom-item-${$element.attr('data-lg-id')}`);\n        }\n    }\n\n    trapFocus(): void {\n        this.$container.get().focus({\n            preventScroll: true,\n        });\n        $LG(window).on(`keydown.lg.global${this.lgId}`, (e) => {\n            if (!this.lgOpened) {\n                return;\n            }\n\n            const isTabPressed = e.key === 'Tab' || e.keyCode === 9;\n            if (!isTabPressed) {\n                return;\n            }\n            const focusableEls = utils.getFocusableElements(\n                this.$container.get(),\n            );\n            const firstFocusableEl = focusableEls[0];\n            const lastFocusableEl = focusableEls[focusableEls.length - 1];\n\n            if (e.shiftKey) {\n                if (document.activeElement === firstFocusableEl) {\n                    (lastFocusableEl as HTMLElement).focus();\n                    e.preventDefault();\n                }\n            } else {\n                if (document.activeElement === lastFocusableEl) {\n                    (firstFocusableEl as HTMLElement).focus();\n                    e.preventDefault();\n                }\n            }\n        });\n    }\n\n    manageCloseGallery(): void {\n        if (!this.settings.closable) return;\n        let mousedown = false;\n        this.getElementById('lg-close').on('click.lg', () => {\n            this.closeGallery();\n        });\n\n        if (this.settings.closeOnTap) {\n            // If you drag the slide and release outside gallery gets close on chrome\n            // for preventing this check mousedown and mouseup happened on .lg-item or lg-outer\n            this.outer.on('mousedown.lg', (e) => {\n                const target = $LG(e.target);\n                if (this.isSlideElement(target)) {\n                    mousedown = true;\n                } else {\n                    mousedown = false;\n                }\n            });\n\n            this.outer.on('mousemove.lg', () => {\n                mousedown = false;\n            });\n\n            this.outer.on('mouseup.lg', (e) => {\n                const target = $LG(e.target);\n                if (this.isSlideElement(target) && mousedown) {\n                    if (!this.outer.hasClass('lg-dragging')) {\n                        this.closeGallery();\n                    }\n                }\n            });\n        }\n    }\n\n    /**\n     * Close lightGallery if it is opened.\n     *\n     * @description If closable is false in the settings, you need to pass true via closeGallery method to force close gallery\n     * @return returns the estimated time to close gallery completely including the close animation duration\n     * @category lGPublicMethods\n     * @example\n     *  const plugin = lightGallery();\n     *  plugin.closeGallery();\n     *\n     */\n    closeGallery(force?: boolean): number {\n        if (!this.lgOpened || (!this.settings.closable && !force)) {\n            return 0;\n        }\n        this.LGel.trigger(lGEvents.beforeClose);\n\n        if (this.settings.resetScrollPosition && !this.settings.hideScrollbar) {\n            $LG(window).scrollTop(this.prevScrollTop);\n        }\n\n        const currentItem = this.items[this.index];\n        let transform: string | undefined;\n        if (this.zoomFromOrigin && currentItem) {\n            const { top, bottom } = this.mediaContainerPosition;\n            const { __slideVideoInfo, poster } = this.galleryItems[this.index];\n            const imageSize = utils.getSize(\n                currentItem,\n                this.outer,\n                top + bottom,\n                __slideVideoInfo && poster && this.settings.videoMaxSize,\n            );\n            transform = utils.getTransform(\n                currentItem,\n                this.outer,\n                top,\n                bottom,\n                imageSize,\n            );\n        }\n        if (this.zoomFromOrigin && transform) {\n            this.outer.addClass('lg-closing lg-zoom-from-image');\n            this.getSlideItem(this.index)\n                .addClass('lg-start-end-progress')\n                .css(\n                    'transition-duration',\n                    this.settings.startAnimationDuration + 'ms',\n                )\n                .css('transform', transform);\n        } else {\n            this.outer.addClass('lg-hide-items');\n            // lg-zoom-from-image is used for setting the opacity to 1 if zoomFromOrigin is true\n            // If the closing item doesn't have the lg-size attribute, remove this class to avoid the closing css conflicts\n            this.outer.removeClass('lg-zoom-from-image');\n        }\n\n        // Unbind all events added by lightGallery\n        // @todo\n        //this.$el.off('.lg.tm');\n\n        this.destroyModules();\n\n        this.lGalleryOn = false;\n        this.isDummyImageRemoved = false;\n        this.zoomFromOrigin = this.settings.zoomFromOrigin;\n\n        clearTimeout(this.hideBarTimeout);\n        this.hideBarTimeout = false;\n        $LG('html').removeClass('lg-on');\n\n        this.outer.removeClass('lg-visible lg-components-open');\n\n        // Resetting opacity to 0 isd required as  vertical swipe to close function adds inline opacity.\n        this.$backdrop.removeClass('in').css('opacity', 0);\n\n        const removeTimeout =\n            this.zoomFromOrigin && transform\n                ? Math.max(\n                      this.settings.startAnimationDuration,\n                      this.settings.backdropDuration,\n                  )\n                : this.settings.backdropDuration;\n        this.$container.removeClass('lg-show-in');\n\n        // Once the closign animation is completed and gallery is invisible\n        setTimeout(() => {\n            if (this.zoomFromOrigin && transform) {\n                this.outer.removeClass('lg-zoom-from-image');\n            }\n            this.$container.removeClass('lg-show');\n\n            // Reset scrollbar\n            this.resetScrollBar();\n\n            // Need to remove inline opacity as it is used in the stylesheet as well\n            this.$backdrop\n                .removeAttr('style')\n                .css(\n                    'transition-duration',\n                    this.settings.backdropDuration + 'ms',\n                );\n\n            this.outer.removeClass(`lg-closing ${this.settings.startClass}`);\n\n            this.getSlideItem(this.index).removeClass('lg-start-end-progress');\n            this.$inner.empty();\n            if (this.lgOpened) {\n                this.LGel.trigger(lGEvents.afterClose, {\n                    instance: this,\n                });\n            }\n            if (this.$container.get()) {\n                this.$container.get().blur();\n            }\n\n            this.lgOpened = false;\n        }, removeTimeout + 100);\n        return removeTimeout + 100;\n    }\n\n    initModules(): void {\n        this.plugins.forEach((module) => {\n            try {\n                module.init();\n            } catch (err) {\n                console.warn(\n                    `lightGallery:- make sure lightGallery module is properly initiated`,\n                );\n            }\n        });\n    }\n\n    destroyModules(destroy?: true): void {\n        this.plugins.forEach((module) => {\n            try {\n                if (destroy) {\n                    module.destroy();\n                } else {\n                    module.closeGallery && module.closeGallery();\n                }\n            } catch (err) {\n                console.warn(\n                    `lightGallery:- make sure lightGallery module is properly destroyed`,\n                );\n            }\n        });\n    }\n\n    /**\n     * Refresh lightGallery with new set of children.\n     *\n     * @description This is useful to update the gallery when the child elements are changed without calling destroy method.\n     *\n     * If you are using dynamic mode, you can pass the modified array of dynamicEl as the first parameter to refresh the dynamic gallery\n     * @see <a href=\"/demos/dynamic-mode/\">Demo</a>\n     * @category lGPublicMethods\n     * @example\n     *  const plugin = lightGallery();\n     *  // Delete or add children, then call\n     *  plugin.refresh();\n     *\n     */\n    refresh(galleryItems?: GalleryItem[]): void {\n        if (!this.settings.dynamic) {\n            this.invalidateItems();\n        }\n        if (galleryItems) {\n            this.galleryItems = galleryItems;\n        } else {\n            this.galleryItems = this.getItems();\n        }\n        this.updateControls();\n        this.openGalleryOnItemClick();\n        this.LGel.trigger(lGEvents.updateSlides);\n    }\n\n    updateControls(): void {\n        this.addSlideVideoInfo(this.galleryItems);\n        this.updateCounterTotal();\n        this.manageSingleSlideClassName();\n    }\n\n    private destroyGallery(): void {\n        this.destroyModules(true);\n        if (!this.settings.dynamic) {\n            this.invalidateItems();\n        }\n        $LG(window).off(`.lg.global${this.lgId}`);\n        this.LGel.off('.lg');\n        this.$container.remove();\n    }\n\n    /**\n     * Destroy lightGallery.\n     * Destroy lightGallery and its plugin instances completely\n     *\n     * @description This method also calls CloseGallery function internally. Returns the time takes to completely close and destroy the instance.\n     * In case if you want to re-initialize lightGallery right after destroying it, initialize it only once the destroy process is completed.\n     * You can use refresh method most of the times.\n     * @category lGPublicMethods\n     * @example\n     *  const plugin = lightGallery();\n     *  plugin.destroy();\n     *\n     */\n    destroy(): number {\n        const closeTimeout = this.closeGallery(true);\n        if (closeTimeout) {\n            setTimeout(this.destroyGallery.bind(this), closeTimeout);\n        } else {\n            this.destroyGallery();\n        }\n        return closeTimeout;\n    }\n}\n", "import { LightGallerySettings } from './lg-settings';\nimport { LightGallery } from './lightgallery';\n\nfunction lightGallery(\n    el: HTMLElement,\n    options?: LightGallerySettings,\n): LightGallery {\n    return new LightGallery(el, options);\n}\nexport default lightGallery;\n", "export interface ActualSizeIcons {\n    zoomIn: 'lg-zoom-in' | 'lg-actual-size';\n    zoomOut: 'lg-zoom-out' | 'lg-actual-size';\n}\n\nexport interface ZoomStrings {\n    zoomIn: string;\n    zoomOut: string;\n    viewActualSize: string;\n}\n\nexport interface ZoomSettings {\n    /**\n     * Value of zoom should be incremented/decremented\n     */\n    scale: number;\n\n    /**\n     * Enable/Disable zoom option\n     */\n    zoom: boolean;\n\n    /**\n     * Enable/Disable infinite zoom\n     * @description If you set this to true, you can zoom in more than the original size of the image.\n     */\n    infiniteZoom: boolean;\n\n    /**\n     * Enable actual size icon.\n     */\n    actualSize: boolean;\n\n    /**\n     * Once the slide transition is completed, how much time should take zoom plugin to activate\n     * @description Some css styles will be added to the images if zoom is enabled.\n     * So it might conflict if you add any custom styles to the images such as the initial transition while opening the gallery.\n     * So you can delay adding zoom related styles to the images by changing the value of enableZoomAfter.\n     */\n    enableZoomAfter: number;\n\n    /**\n     * Show zoom in, zoom out icons\n     */\n    showZoomInOutIcons: boolean;\n\n    /**\n     * Actual size icons classnames.\n     * Specify classnames for both ZoomIn and ZoomOut states\n     * You can use `actualSizeIcons: { zoomIn: 'lg-actual-size', zoomOut: 'lg-zoom-out' }`\n     * to show actual size icons instead of zoom in and zoom out icons.\n     */\n    actualSizeIcons: ActualSizeIcons;\n\n    /**\n     * Custom translation strings for aria-labels\n     */\n    zoomPluginStrings: ZoomStrings;\n}\n\nexport const zoomSettings: ZoomSettings = {\n    scale: 1,\n    zoom: true,\n    infiniteZoom: true,\n    actualSize: true,\n    showZoomInOutIcons: false,\n    actualSizeIcons: {\n        zoomIn: 'lg-zoom-in',\n        zoomOut: 'lg-zoom-out',\n    } as ActualSizeIcons,\n    enableZoomAfter: 300,\n    zoomPluginStrings: {\n        zoomIn: 'Zoom in',\n        zoomOut: 'Zoom out',\n        viewActualSize: 'View actual size',\n    } as ZoomStrings,\n};\n", "import { LightGallery } from './lightgallery';\nimport { VideoSource } from './plugins/video/types';\n\n/**\n * List of lightGallery events\n * All events should be documented here\n * Below interfaces are used to build the website documentations\n * */\nexport const lGEvents: {\n    [key: string]: string;\n} = {\n    afterAppendSlide: 'lgAfterAppendSlide',\n    init: 'lgInit',\n    hasVideo: 'lgHasVideo',\n    containerResize: 'lgContainerResize',\n    updateSlides: 'lgUpdateSlides',\n    afterAppendSubHtml: 'lgAfterAppendSubHtml',\n    beforeOpen: 'lgBeforeOpen',\n    afterOpen: 'lgAfterOpen',\n    slideItemLoad: 'lgSlideItemLoad',\n    beforeSlide: 'lgBeforeSlide',\n    afterSlide: 'lgAfterSlide',\n    posterClick: 'lgPosterClick',\n    dragStart: 'lgDragStart',\n    dragMove: 'lgDragMove',\n    dragEnd: 'lgDragEnd',\n    beforeNextSlide: 'lgBeforeNextSlide',\n    beforePrevSlide: 'lgBeforePrevSlide',\n    beforeClose: 'lgBeforeClose',\n    afterClose: 'lgAfterClose',\n    rotateLeft: 'lgRotateLeft',\n    rotateRight: 'lgRotateRight',\n    flipHorizontal: 'lgFlipHorizontal',\n    flipVertical: 'lgFlipVertical',\n    autoplay: 'lgAutoplay',\n    autoplayStart: 'lgAutoplayStart',\n    autoplayStop: 'lgAutoplayStop',\n};\n\n// Follow the below format for the event documentation\n// @method is the method name when event is used with Angular/React components\n\n/**\n * Fired only once when lightGallery is initialized\n * @name lgInit\n * @method onInit\n * @example\n *   const lg = document.getElementById('custom-events-demo');\n *   // Perform any action on lightGallery initialization.\n *   // Init event returns the plugin instance that can be used to call any lightGalley public method\n *   let pluginInstance = null;\n *   lg.addEventListener('lgInit', (event) => {\n *      pluginInstance = event.detail.instance;\n *   });\n *   lightGallery(lg);\n * @see <a href=\"/docs/methods\">Methods<a>\n */\nexport interface InitDetail {\n    /**\n     * lightGallery plugin instance\n     */\n    instance: LightGallery;\n}\n\n/**\n * Fired when the slide content has been inserted into it's slide container.\n * @name lgAfterAppendSlide\n * @method onAfterAppendSlide\n */\nexport interface AfterAppendSlideEventDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n}\n\n/**\n * Fired immediately before opening the gallery\n * @name lgBeforeOpen\n * @method onBeforeOpen\n */\nexport interface BeforeOpenDetail {}\n\n/**\n * Fired immediately after opening the gallery\n * @name lgAfterOpen\n * @method onAfterOpen\n */\nexport interface AfterOpenDetail {}\n\n/**\n * Fired once the media inside the slide has been completely loaded .\n * @name lgSlideItemLoad\n * @method onSlideItemLoad\n */\nexport interface SlideItemLoadDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n    /**\n     * For the first slide, lightGallery adds some delay for displaying the loaded slide item.\n     * This delay is required for the transition effect when the slide item is displayed\n     * Respect the delay when you use this event\n     */\n    delay: number;\n\n    // Will be true for the first slide\n    isFirstSlide: boolean;\n}\n\n/**\n * Fired immediately before each slide transition.\n * @name lgBeforeSlide\n * @method onBeforeSlide\n * @example\n *   const lg = document.getElementById('custom-events-demo');\n *   // Perform any action before each slide transition\n *   lg.addEventListener('lgBeforeSlide', (event) => {\n *       const { index, prevIndex } = event.detail;\n *       alert(index, prevIndex);\n *   });\n *   lightGallery(lg);\n */\nexport interface BeforeSlideDetail {\n    /**\n     * Index of the previous slide\n     */\n    prevIndex: number;\n    /**\n     * Index of the slide\n     */\n    index: number;\n    /**\n     * true if slide function called via touch event or mouse drag\n     */\n    fromTouch: boolean;\n    /**\n     * true if slide function called via thumbnail click\n     */\n    fromThumb: boolean;\n}\n\n/**\n * Fired immediately after each slide transition.\n * @name lgAfterSlide\n * @method onAfterSlide\n */\nexport interface AfterSlideDetail {\n    /**\n     * Index of the previous slide\n     */\n    prevIndex: number;\n    /**\n     * Index of the slide\n     */\n    index: number;\n    /**\n     * true if slide function called via touch event or mouse drag\n     */\n    fromTouch: boolean;\n    /**\n     * true if slide function called via thumbnail click\n     */\n    fromThumb: boolean;\n}\n\n/**\n * Fired when the video poster is clicked.\n * @name lgPosterClick\n * @method onPosterClick\n */\nexport interface PosterClickDetail {}\n\n/**\n * Fired when the drag event to move to different slide starts.\n * @name lgDragStart\n * @method onDragStart\n */\nexport interface DragStartDetail {}\n\n/**\n * Fired periodically during the drag operation.\n * @name lgDragMove\n * @method onDragMove\n */\nexport interface DragMoveDetail {}\n\n/**\n * Fired when the user has finished the drag operation\n * @name lgDragEnd\n * @method onDragEnd\n */\nexport interface DragEndDetail {}\n\n/**\n * Fired immediately before the start of the close process.\n * @name lgBeforeClose\n * @method onBeforeClose\n */\nexport interface BeforeCloseDetail {}\n\n/**\n * Fired immediately once lightGallery is closed.\n * @name lgAfterClose\n * @method onAfterClose\n */\nexport interface AfterCloseDetail {\n    /**\n     * lightGallery plugin instance\n     */\n    instance: LightGallery;\n}\n\n/**\n * Fired immediately before each \"next\" slide transition\n * @name lgBeforeNextSlide\n * @method onBeforeNextSlide\n */\nexport interface BeforeNextSlideDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n    /**\n     * true if slide function called via touch event or mouse drag\n     */\n    fromTouch: boolean;\n}\n\n/**\n * Fired immediately before each \"prev\" slide transition\n * @name lgBeforePrevSlide\n * @method onBeforePrevSlide\n */\nexport interface BeforePrevSlideDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n    /**\n     * true if slide function called via touch event or mouse drag\n     */\n    fromTouch: boolean;\n}\n\n/**\n * Fired when the sub-html content (ex : title/ description) has been appended into the slide.\n * @name lgAfterAppendSubHtml\n * @method onAfterAppendSubHtml\n */\nexport interface AfterAppendSubHtmlDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n}\n\n/**\n * Fired when the lightGallery container has been resized.\n * @name lgContainerResize\n * @method onContainerResize\n */\nexport interface ContainerResizeDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n}\n\n/**\n * Fired when lightGallery detects video slide\n * @name lgHasVideo\n * @method onHasVideo\n */\nexport interface HasVideoDetail {\n    /**\n     * Index of the slide,\n     */\n    index: number;\n    /**\n     * Video source\n     */\n    src: string;\n    /**\n     * HTML5 video source if available\n     * <p>\n       HTML5 video source = source: {\n            src: string;\n            type: string;\n        }[];\n        attributes: HTMLVideoElement;\n     * </p>\n     */\n    html5Video: VideoSource;\n    /**\n     * True if video has poster\n     */\n    hasPoster: boolean;\n}\n\n/**\n * Fired when the image is rotated in anticlockwise direction\n * @name lgRotateLeft\n * @method onRotateLeft\n */\nexport interface RotateLeftDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n}\n\n/**\n * Fired when the image is rotated in clockwise direction\n * @name lgRotateRight\n * @method onRotateRight\n */\nexport interface RotateRightDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n}\n\n/**\n * Fired when the image is flipped horizontally\n * @name lgFlipHorizontal\n * @method onFlipHorizontal\n */\nexport interface FlipHorizontalDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n}\n\n/**\n * Fired when the image is flipped vertically\n * @name lgFlipVertical\n * @method onFlipVertical\n */\nexport interface FlipVerticalDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n}\n", "import { ZoomSettings, zoomSettings } from './lg-zoom-settings';\nimport { LgQuery, lgQuery } from '../../lgQuery';\nimport { LightGallery } from '../../lightgallery';\nimport { lGEvents } from '../../lg-events';\n\ninterface Coords {\n    x: number;\n    y: number;\n}\n\ninterface DragAllowedAxises {\n    allowX: boolean;\n    allowY: boolean;\n}\ninterface ZoomTouchEvent {\n    pageX: number;\n    touches: { pageY: number; pageX: number }[];\n    pageY: number;\n}\ninterface PossibleCords {\n    minX: number;\n    minY: number;\n    maxX: number;\n    maxY: number;\n}\n\nconst ZOOM_TRANSITION_DURATION = 500;\n\nexport default class Zoom {\n    private core: LightGallery;\n    private settings: ZoomSettings;\n    private $LG!: LgQuery;\n    private imageReset!: number | boolean;\n    zoomableTimeout: any;\n    positionChanged!: boolean;\n    zoomInProgress!: boolean;\n    pageX!: number;\n    pageY!: number;\n    scale!: number;\n\n    containerRect!: ClientRect;\n    dragAllowedAxises!: DragAllowedAxises;\n    top!: number;\n    left!: number;\n    scrollTop!: number;\n    constructor(instance: LightGallery, $LG: LgQuery) {\n        // get lightGallery core plugin instance\n        this.core = instance;\n        this.$LG = $LG;\n\n        this.settings = { ...zoomSettings, ...this.core.settings };\n\n        return this;\n    }\n\n    // Append Zoom controls. Actual size, Zoom-in, Zoom-out\n    buildTemplates(): void {\n        let zoomIcons = this.settings.showZoomInOutIcons\n            ? `<button id=\"${this.core.getIdName(\n                  'lg-zoom-in',\n              )}\" type=\"button\" aria-label=\"${\n                  this.settings.zoomPluginStrings['zoomIn']\n              }\" class=\"lg-zoom-in lg-icon\"></button><button id=\"${this.core.getIdName(\n                  'lg-zoom-out',\n              )}\" type=\"button\" aria-label=\"${\n                  this.settings.zoomPluginStrings['zoomIn']\n              }\" class=\"lg-zoom-out lg-icon\"></button>`\n            : '';\n\n        if (this.settings.actualSize) {\n            zoomIcons += `<button id=\"${this.core.getIdName(\n                'lg-actual-size',\n            )}\" type=\"button\" aria-label=\"${\n                this.settings.zoomPluginStrings['viewActualSize']\n            }\" class=\"${\n                this.settings.actualSizeIcons.zoomIn\n            } lg-icon\"></button>`;\n        }\n\n        this.core.outer.addClass('lg-use-transition-for-zoom');\n\n        this.core.$toolbar.first().append(zoomIcons);\n    }\n\n    /**\n     * @desc Enable zoom option only once the image is completely loaded\n     * If zoomFromOrigin is true, Zoom is enabled once the dummy image has been inserted\n     *\n     * Zoom styles are defined under lg-zoomable CSS class.\n     */\n    enableZoom(event: CustomEvent): void {\n        // delay will be 0 except first time\n        let _speed = this.settings.enableZoomAfter + event.detail.delay;\n\n        // set _speed value 0 if gallery opened from direct url and if it is first slide\n        if (\n            this.$LG('body').first().hasClass('lg-from-hash') &&\n            event.detail.delay\n        ) {\n            // will execute only once\n            _speed = 0;\n        } else {\n            // Remove lg-from-hash to enable starting animation.\n            this.$LG('body').first().removeClass('lg-from-hash');\n        }\n\n        this.zoomableTimeout = setTimeout(() => {\n            if (!this.isImageSlide(this.core.index)) {\n                return;\n            }\n            this.core.getSlideItem(event.detail.index).addClass('lg-zoomable');\n            if (event.detail.index === this.core.index) {\n                this.setZoomEssentials();\n            }\n        }, _speed + 30);\n    }\n\n    enableZoomOnSlideItemLoad(): void {\n        // Add zoomable class\n        this.core.LGel.on(\n            `${lGEvents.slideItemLoad}.zoom`,\n            this.enableZoom.bind(this),\n        );\n    }\n\n    getDragCords(e: MouseEvent): Coords {\n        return {\n            x: e.pageX,\n            y: e.pageY,\n        };\n    }\n    getSwipeCords(e: TouchEvent): Coords {\n        const x = e.touches[0].pageX;\n        const y = e.touches[0].pageY;\n        return {\n            x,\n            y,\n        };\n    }\n\n    getDragAllowedAxises(scale: number, scaleDiff?: number): DragAllowedAxises {\n        const $image = this.core\n            .getSlideItem(this.core.index)\n            .find('.lg-image')\n            .first()\n            .get();\n\n        let height = 0;\n        let width = 0;\n        const rect = $image.getBoundingClientRect();\n        if (scale) {\n            height = $image.offsetHeight * scale;\n            width = $image.offsetWidth * scale;\n        } else if (scaleDiff) {\n            height = rect.height + scaleDiff * rect.height;\n            width = rect.width + scaleDiff * rect.width;\n        } else {\n            height = rect.height;\n            width = rect.width;\n        }\n        const allowY = height > this.containerRect.height;\n        const allowX = width > this.containerRect.width;\n        return {\n            allowX,\n            allowY,\n        };\n    }\n\n    setZoomEssentials(): void {\n        this.containerRect = this.core.$content.get().getBoundingClientRect();\n    }\n\n    /**\n     * @desc Image zoom\n     * Translate the wrap and scale the image to get better user experience\n     *\n     * @param {String} scale - Zoom decrement/increment value\n     */\n    zoomImage(\n        scale: number,\n        scaleDiff: number,\n        reposition: boolean,\n        resetToMax: boolean,\n    ): void {\n        if (Math.abs(scaleDiff) <= 0) return;\n\n        const offsetX = this.containerRect.width / 2 + this.containerRect.left;\n\n        const offsetY =\n            this.containerRect.height / 2 +\n            this.containerRect.top +\n            this.scrollTop;\n\n        let originalX;\n        let originalY;\n\n        if (scale === 1) {\n            this.positionChanged = false;\n        }\n\n        const dragAllowedAxises = this.getDragAllowedAxises(0, scaleDiff);\n\n        const { allowY, allowX } = dragAllowedAxises;\n        if (this.positionChanged) {\n            originalX = this.left / (this.scale - scaleDiff);\n            originalY = this.top / (this.scale - scaleDiff);\n            this.pageX = offsetX - originalX;\n            this.pageY = offsetY - originalY;\n\n            this.positionChanged = false;\n        }\n\n        const possibleSwipeCords = this.getPossibleSwipeDragCords(scaleDiff);\n\n        let x;\n        let y;\n        let _x = offsetX - this.pageX;\n        let _y = offsetY - this.pageY;\n\n        if (scale - scaleDiff > 1) {\n            const scaleVal = (scale - scaleDiff) / Math.abs(scaleDiff);\n            _x =\n                (scaleDiff < 0 ? -_x : _x) +\n                this.left * (scaleVal + (scaleDiff < 0 ? -1 : 1));\n            _y =\n                (scaleDiff < 0 ? -_y : _y) +\n                this.top * (scaleVal + (scaleDiff < 0 ? -1 : 1));\n            x = _x / scaleVal;\n            y = _y / scaleVal;\n        } else {\n            const scaleVal = (scale - scaleDiff) * scaleDiff;\n            x = _x * scaleVal;\n            y = _y * scaleVal;\n        }\n\n        if (reposition) {\n            if (allowX) {\n                if (this.isBeyondPossibleLeft(x, possibleSwipeCords.minX)) {\n                    x = possibleSwipeCords.minX;\n                } else if (\n                    this.isBeyondPossibleRight(x, possibleSwipeCords.maxX)\n                ) {\n                    x = possibleSwipeCords.maxX;\n                }\n            } else {\n                if (scale > 1) {\n                    if (x < possibleSwipeCords.minX) {\n                        x = possibleSwipeCords.minX;\n                    } else if (x > possibleSwipeCords.maxX) {\n                        x = possibleSwipeCords.maxX;\n                    }\n                }\n            }\n            // @todo fix this\n            if (allowY) {\n                if (this.isBeyondPossibleTop(y, possibleSwipeCords.minY)) {\n                    y = possibleSwipeCords.minY;\n                } else if (\n                    this.isBeyondPossibleBottom(y, possibleSwipeCords.maxY)\n                ) {\n                    y = possibleSwipeCords.maxY;\n                }\n            } else {\n                // If the translate value based on index of beyond the viewport, utilize the available space to prevent image being cut out\n                if (scale > 1) {\n                    //If image goes beyond viewport top, use the minim possible translate value\n                    if (y < possibleSwipeCords.minY) {\n                        y = possibleSwipeCords.minY;\n                    } else if (y > possibleSwipeCords.maxY) {\n                        y = possibleSwipeCords.maxY;\n                    }\n                }\n            }\n        }\n\n        this.setZoomStyles({\n            x: x,\n            y: y,\n            scale,\n        });\n\n        this.left = x;\n        this.top = y;\n\n        if (resetToMax) {\n            this.setZoomImageSize();\n        }\n    }\n\n    resetImageTranslate(index: number): void {\n        if (!this.isImageSlide(index)) {\n            return;\n        }\n        const $image = this.core.getSlideItem(index).find('.lg-image').first();\n        this.imageReset = false;\n        $image.removeClass(\n            'reset-transition reset-transition-y reset-transition-x',\n        );\n        this.core.outer.removeClass('lg-actual-size');\n        $image.css('width', 'auto').css('height', 'auto');\n        setTimeout(() => {\n            $image.removeClass('no-transition');\n        }, 10);\n    }\n\n    setZoomImageSize(): void {\n        const $image = this.core\n            .getSlideItem(this.core.index)\n            .find('.lg-image')\n            .first();\n\n        setTimeout(() => {\n            const actualSizeScale = this.getCurrentImageActualSizeScale();\n\n            if (this.scale >= actualSizeScale) {\n                $image.addClass('no-transition');\n                this.imageReset = true;\n            }\n        }, ZOOM_TRANSITION_DURATION);\n\n        setTimeout(() => {\n            const actualSizeScale = this.getCurrentImageActualSizeScale();\n\n            if (this.scale >= actualSizeScale) {\n                const dragAllowedAxises = this.getDragAllowedAxises(this.scale);\n\n                $image\n                    .css(\n                        'width',\n                        ($image.get() as HTMLImageElement).naturalWidth + 'px',\n                    )\n                    .css(\n                        'height',\n                        ($image.get() as HTMLImageElement).naturalHeight + 'px',\n                    );\n\n                this.core.outer.addClass('lg-actual-size');\n\n                if (dragAllowedAxises.allowX && dragAllowedAxises.allowY) {\n                    $image.addClass('reset-transition');\n                } else if (\n                    dragAllowedAxises.allowX &&\n                    !dragAllowedAxises.allowY\n                ) {\n                    $image.addClass('reset-transition-x');\n                } else if (\n                    !dragAllowedAxises.allowX &&\n                    dragAllowedAxises.allowY\n                ) {\n                    $image.addClass('reset-transition-y');\n                }\n            }\n        }, ZOOM_TRANSITION_DURATION + 50);\n    }\n\n    /**\n     * @desc apply scale3d to image and translate to image wrap\n     * @param {style} X,Y and scale\n     */\n    setZoomStyles(style: { x: number; y: number; scale: number }): void {\n        const $imageWrap = this.core\n            .getSlideItem(this.core.index)\n            .find('.lg-img-wrap')\n            .first();\n        const $image = this.core\n            .getSlideItem(this.core.index)\n            .find('.lg-image')\n            .first();\n        const $dummyImage = this.core.outer\n            .find('.lg-current .lg-dummy-img')\n            .first();\n        this.scale = style.scale;\n        $image.css(\n            'transform',\n            'scale3d(' + style.scale + ', ' + style.scale + ', 1)',\n        );\n\n        $dummyImage.css(\n            'transform',\n            'scale3d(' + style.scale + ', ' + style.scale + ', 1)',\n        );\n\n        const transform =\n            'translate3d(' + style.x + 'px, ' + style.y + 'px, 0)';\n        $imageWrap.css('transform', transform);\n    }\n\n    /**\n     * @param index - Index of the current slide\n     * @param event - event will be available only if the function is called on clicking/taping the imags\n     */\n    setActualSize(index: number, event?: ZoomTouchEvent): void {\n        if (this.zoomInProgress) {\n            return;\n        }\n        this.zoomInProgress = true;\n        const currentItem = this.core.galleryItems[this.core.index];\n        this.resetImageTranslate(index);\n        setTimeout(() => {\n            // Allow zoom only on image\n            if (\n                !currentItem.src ||\n                this.core.outer.hasClass('lg-first-slide-loading')\n            ) {\n                return;\n            }\n            const scale = this.getCurrentImageActualSizeScale();\n            const prevScale = this.scale;\n            if (this.core.outer.hasClass('lg-zoomed')) {\n                this.scale = 1;\n            } else {\n                this.scale = this.getScale(scale);\n            }\n            this.setPageCords(event);\n\n            this.beginZoom(this.scale);\n            this.zoomImage(this.scale, this.scale - prevScale, true, true);\n        }, 50);\n        setTimeout(() => {\n            this.core.outer.removeClass('lg-grabbing').addClass('lg-grab');\n        }, 60);\n        setTimeout(() => {\n            this.zoomInProgress = false;\n        }, ZOOM_TRANSITION_DURATION + 110);\n    }\n\n    getNaturalWidth(index: number): number {\n        const $image = this.core.getSlideItem(index).find('.lg-image').first();\n\n        const naturalWidth = this.core.galleryItems[index].width;\n        return naturalWidth\n            ? parseFloat(naturalWidth)\n            : undefined || ($image.get() as any).naturalWidth;\n    }\n\n    getActualSizeScale(naturalWidth: number, width: number): number {\n        let _scale;\n        let scale;\n        if (naturalWidth >= width) {\n            _scale = naturalWidth / width;\n            scale = _scale || 2;\n        } else {\n            scale = 1;\n        }\n        return scale;\n    }\n\n    getCurrentImageActualSizeScale(): number {\n        const $image = this.core\n            .getSlideItem(this.core.index)\n            .find('.lg-image')\n            .first();\n        const width = $image.get().offsetWidth;\n        const naturalWidth = this.getNaturalWidth(this.core.index) || width;\n        return this.getActualSizeScale(naturalWidth, width);\n    }\n\n    getPageCords(event?: ZoomTouchEvent): Coords {\n        const cords: Coords = {} as Coords;\n        if (event) {\n            cords.x = event.pageX || event.touches[0].pageX;\n            cords.y = event.pageY || event.touches[0].pageY;\n        } else {\n            const containerRect = this.core.$content\n                .get()\n                .getBoundingClientRect();\n            cords.x = containerRect.width / 2 + containerRect.left;\n            cords.y =\n                containerRect.height / 2 + this.scrollTop + containerRect.top;\n        }\n        return cords;\n    }\n\n    setPageCords(event?: ZoomTouchEvent): void {\n        const pageCords = this.getPageCords(event);\n\n        this.pageX = pageCords.x;\n        this.pageY = pageCords.y;\n    }\n\n    manageActualPixelClassNames(): void {\n        const $actualSize = this.core.getElementById('lg-actual-size');\n        $actualSize\n            .removeClass(this.settings.actualSizeIcons.zoomIn)\n            .addClass(this.settings.actualSizeIcons.zoomOut);\n    }\n\n    // If true, zoomed - in else zoomed out\n    beginZoom(scale: number): boolean {\n        this.core.outer.removeClass('lg-zoom-drag-transition lg-zoom-dragging');\n        if (scale > 1) {\n            this.core.outer.addClass('lg-zoomed');\n            this.manageActualPixelClassNames();\n        } else {\n            this.resetZoom();\n        }\n        return scale > 1;\n    }\n\n    getScale(scale: number): number {\n        const actualSizeScale = this.getCurrentImageActualSizeScale();\n        if (scale < 1) {\n            scale = 1;\n        } else if (scale > actualSizeScale) {\n            scale = actualSizeScale;\n        }\n        return scale;\n    }\n\n    init(): void {\n        if (!this.settings.zoom) {\n            return;\n        }\n        this.buildTemplates();\n        this.enableZoomOnSlideItemLoad();\n\n        let tapped: ReturnType<typeof setTimeout> | null = null;\n\n        this.core.outer.on('dblclick.lg', (event) => {\n            if (!this.$LG(event.target).hasClass('lg-image')) {\n                return;\n            }\n            this.setActualSize(this.core.index, event);\n        });\n\n        this.core.outer.on('touchstart.lg', (event) => {\n            const $target = this.$LG(event.target);\n            if (event.touches.length === 1 && $target.hasClass('lg-image')) {\n                if (!tapped) {\n                    tapped = setTimeout(() => {\n                        tapped = null;\n                    }, 300);\n                } else {\n                    clearTimeout(tapped);\n                    tapped = null;\n                    event.preventDefault();\n                    this.setActualSize(this.core.index, event);\n                }\n            }\n        });\n\n        this.core.LGel.on(\n            `${lGEvents.containerResize}.zoom ${lGEvents.rotateRight}.zoom ${lGEvents.rotateLeft}.zoom ${lGEvents.flipHorizontal}.zoom ${lGEvents.flipVertical}.zoom`,\n            () => {\n                if (\n                    !this.core.lgOpened ||\n                    !this.isImageSlide(this.core.index) ||\n                    this.core.touchAction\n                ) {\n                    return;\n                }\n                const _LGel = this.core\n                    .getSlideItem(this.core.index)\n                    .find('.lg-img-wrap')\n                    .first();\n                this.top = 0;\n                this.left = 0;\n                this.setZoomEssentials();\n                this.setZoomSwipeStyles(_LGel, { x: 0, y: 0 });\n                this.positionChanged = true;\n            },\n        );\n        // Update zoom on resize and orientationchange\n        this.$LG(window).on(`scroll.lg.zoom.global${this.core.lgId}`, () => {\n            if (!this.core.lgOpened) return;\n            this.scrollTop = this.$LG(window).scrollTop();\n        });\n\n        this.core.getElementById('lg-zoom-out').on('click.lg', () => {\n            // Allow zoom only on image\n            if (!this.isImageSlide(this.core.index)) {\n                return;\n            }\n\n            let timeout = 0;\n            if (this.imageReset) {\n                this.resetImageTranslate(this.core.index);\n                timeout = 50;\n            }\n            setTimeout(() => {\n                let scale = this.scale - this.settings.scale;\n\n                if (scale < 1) {\n                    scale = 1;\n                }\n                this.beginZoom(scale);\n                this.zoomImage(\n                    scale,\n                    -this.settings.scale,\n                    true,\n                    !this.settings.infiniteZoom,\n                );\n            }, timeout);\n        });\n\n        this.core.getElementById('lg-zoom-in').on('click.lg', () => {\n            this.zoomIn();\n        });\n\n        this.core.getElementById('lg-actual-size').on('click.lg', () => {\n            this.setActualSize(this.core.index);\n        });\n\n        this.core.LGel.on(`${lGEvents.beforeOpen}.zoom`, () => {\n            this.core.outer.find('.lg-item').removeClass('lg-zoomable');\n        });\n        this.core.LGel.on(`${lGEvents.afterOpen}.zoom`, () => {\n            this.scrollTop = this.$LG(window).scrollTop();\n\n            // Set the initial value center\n            this.pageX = this.core.outer.width() / 2;\n            this.pageY = this.core.outer.height() / 2 + this.scrollTop;\n\n            this.scale = 1;\n        });\n\n        // Reset zoom on slide change\n        this.core.LGel.on(\n            `${lGEvents.afterSlide}.zoom`,\n            (event: CustomEvent) => {\n                const { prevIndex } = event.detail;\n                this.scale = 1;\n                this.positionChanged = false;\n                this.zoomInProgress = false;\n                this.resetZoom(prevIndex);\n                this.resetImageTranslate(prevIndex);\n                if (this.isImageSlide(this.core.index)) {\n                    this.setZoomEssentials();\n                }\n            },\n        );\n\n        // Drag option after zoom\n        this.zoomDrag();\n\n        this.pinchZoom();\n\n        this.zoomSwipe();\n\n        // Store the zoomable timeout value just to clear it while closing\n        this.zoomableTimeout = false;\n        this.positionChanged = false;\n        this.zoomInProgress = false;\n    }\n\n    zoomIn(): void {\n        // Allow zoom only on image\n        if (!this.isImageSlide(this.core.index)) {\n            return;\n        }\n\n        let scale = this.scale + this.settings.scale;\n\n        if (!this.settings.infiniteZoom) {\n            scale = this.getScale(scale);\n        }\n        this.beginZoom(scale);\n        this.zoomImage(\n            scale,\n            Math.min(this.settings.scale, scale - this.scale),\n            true,\n            !this.settings.infiniteZoom,\n        );\n    }\n\n    // Reset zoom effect\n    resetZoom(index?: number): void {\n        this.core.outer.removeClass('lg-zoomed lg-zoom-drag-transition');\n        const $actualSize = this.core.getElementById('lg-actual-size');\n        const $item = this.core.getSlideItem(\n            index !== undefined ? index : this.core.index,\n        );\n        $actualSize\n            .removeClass(this.settings.actualSizeIcons.zoomOut)\n            .addClass(this.settings.actualSizeIcons.zoomIn);\n        $item.find('.lg-img-wrap').first().removeAttr('style');\n        $item.find('.lg-image').first().removeAttr('style');\n        this.scale = 1;\n        this.left = 0;\n        this.top = 0;\n\n        // Reset pagx pagy values to center\n        this.setPageCords();\n    }\n\n    getTouchDistance(e: TouchEvent): number {\n        return Math.sqrt(\n            (e.touches[0].pageX - e.touches[1].pageX) *\n                (e.touches[0].pageX - e.touches[1].pageX) +\n                (e.touches[0].pageY - e.touches[1].pageY) *\n                    (e.touches[0].pageY - e.touches[1].pageY),\n        );\n    }\n\n    pinchZoom(): void {\n        let startDist = 0;\n        let pinchStarted = false;\n        let initScale = 1;\n        let prevScale = 0;\n\n        let $item = this.core.getSlideItem(this.core.index);\n\n        this.core.outer.on('touchstart.lg', (e) => {\n            $item = this.core.getSlideItem(this.core.index);\n            if (!this.isImageSlide(this.core.index)) {\n                return;\n            }\n            if (e.touches.length === 2) {\n                e.preventDefault();\n                if (this.core.outer.hasClass('lg-first-slide-loading')) {\n                    return;\n                }\n                initScale = this.scale || 1;\n                this.core.outer.removeClass(\n                    'lg-zoom-drag-transition lg-zoom-dragging',\n                );\n\n                this.setPageCords(e);\n                this.resetImageTranslate(this.core.index);\n\n                this.core.touchAction = 'pinch';\n\n                startDist = this.getTouchDistance(e);\n            }\n        });\n\n        this.core.$inner.on('touchmove.lg', (e) => {\n            if (\n                e.touches.length === 2 &&\n                this.core.touchAction === 'pinch' &&\n                (this.$LG(e.target).hasClass('lg-item') ||\n                    $item.get().contains(e.target))\n            ) {\n                e.preventDefault();\n                const endDist = this.getTouchDistance(e);\n\n                const distance = startDist - endDist;\n                if (!pinchStarted && Math.abs(distance) > 5) {\n                    pinchStarted = true;\n                }\n                if (pinchStarted) {\n                    prevScale = this.scale;\n                    const _scale = Math.max(1, initScale + -distance * 0.02);\n                    this.scale =\n                        Math.round((_scale + Number.EPSILON) * 100) / 100;\n                    const diff = this.scale - prevScale;\n                    this.zoomImage(\n                        this.scale,\n                        Math.round((diff + Number.EPSILON) * 100) / 100,\n                        false,\n                        false,\n                    );\n                }\n            }\n        });\n\n        this.core.$inner.on('touchend.lg', (e) => {\n            if (\n                this.core.touchAction === 'pinch' &&\n                (this.$LG(e.target).hasClass('lg-item') ||\n                    $item.get().contains(e.target))\n            ) {\n                pinchStarted = false;\n                startDist = 0;\n                if (this.scale <= 1) {\n                    this.resetZoom();\n                } else {\n                    const actualSizeScale = this.getCurrentImageActualSizeScale();\n\n                    if (this.scale >= actualSizeScale) {\n                        let scaleDiff = actualSizeScale - this.scale;\n                        if (scaleDiff === 0) {\n                            scaleDiff = 0.01;\n                        }\n                        this.zoomImage(actualSizeScale, scaleDiff, false, true);\n                    }\n                    this.manageActualPixelClassNames();\n\n                    this.core.outer.addClass('lg-zoomed');\n                }\n                this.core.touchAction = undefined;\n            }\n        });\n    }\n\n    touchendZoom(\n        startCoords: Coords,\n        endCoords: Coords,\n        allowX: boolean,\n        allowY: boolean,\n        touchDuration: number,\n    ): void {\n        let distanceXnew = endCoords.x - startCoords.x;\n        let distanceYnew = endCoords.y - startCoords.y;\n\n        let speedX = Math.abs(distanceXnew) / touchDuration + 1;\n        let speedY = Math.abs(distanceYnew) / touchDuration + 1;\n\n        if (speedX > 2) {\n            speedX += 1;\n        }\n\n        if (speedY > 2) {\n            speedY += 1;\n        }\n\n        distanceXnew = distanceXnew * speedX;\n        distanceYnew = distanceYnew * speedY;\n\n        const _LGel = this.core\n            .getSlideItem(this.core.index)\n            .find('.lg-img-wrap')\n            .first();\n        const distance: Coords = {} as Coords;\n\n        distance.x = this.left + distanceXnew;\n        distance.y = this.top + distanceYnew;\n\n        const possibleSwipeCords = this.getPossibleSwipeDragCords();\n\n        if (Math.abs(distanceXnew) > 15 || Math.abs(distanceYnew) > 15) {\n            if (allowY) {\n                if (\n                    this.isBeyondPossibleTop(\n                        distance.y,\n                        possibleSwipeCords.minY,\n                    )\n                ) {\n                    distance.y = possibleSwipeCords.minY;\n                } else if (\n                    this.isBeyondPossibleBottom(\n                        distance.y,\n                        possibleSwipeCords.maxY,\n                    )\n                ) {\n                    distance.y = possibleSwipeCords.maxY;\n                }\n            }\n\n            if (allowX) {\n                if (\n                    this.isBeyondPossibleLeft(\n                        distance.x,\n                        possibleSwipeCords.minX,\n                    )\n                ) {\n                    distance.x = possibleSwipeCords.minX;\n                } else if (\n                    this.isBeyondPossibleRight(\n                        distance.x,\n                        possibleSwipeCords.maxX,\n                    )\n                ) {\n                    distance.x = possibleSwipeCords.maxX;\n                }\n            }\n\n            if (allowY) {\n                this.top = distance.y;\n            } else {\n                distance.y = this.top;\n            }\n\n            if (allowX) {\n                this.left = distance.x;\n            } else {\n                distance.x = this.left;\n            }\n\n            this.setZoomSwipeStyles(_LGel, distance);\n\n            this.positionChanged = true;\n        }\n    }\n\n    getZoomSwipeCords(\n        startCoords: Coords,\n        endCoords: Coords,\n        allowX: boolean,\n        allowY: boolean,\n        possibleSwipeCords: PossibleCords,\n    ): Coords {\n        const distance: Coords = {} as Coords;\n        if (allowY) {\n            distance.y = this.top + (endCoords.y - startCoords.y);\n            if (this.isBeyondPossibleTop(distance.y, possibleSwipeCords.minY)) {\n                const diffMinY = possibleSwipeCords.minY - distance.y;\n                distance.y = possibleSwipeCords.minY - diffMinY / 6;\n            } else if (\n                this.isBeyondPossibleBottom(distance.y, possibleSwipeCords.maxY)\n            ) {\n                const diffMaxY = distance.y - possibleSwipeCords.maxY;\n                distance.y = possibleSwipeCords.maxY + diffMaxY / 6;\n            }\n        } else {\n            distance.y = this.top;\n        }\n\n        if (allowX) {\n            distance.x = this.left + (endCoords.x - startCoords.x);\n            if (\n                this.isBeyondPossibleLeft(distance.x, possibleSwipeCords.minX)\n            ) {\n                const diffMinX = possibleSwipeCords.minX - distance.x;\n                distance.x = possibleSwipeCords.minX - diffMinX / 6;\n            } else if (\n                this.isBeyondPossibleRight(distance.x, possibleSwipeCords.maxX)\n            ) {\n                const difMaxX = distance.x - possibleSwipeCords.maxX;\n                distance.x = possibleSwipeCords.maxX + difMaxX / 6;\n            }\n        } else {\n            distance.x = this.left;\n        }\n\n        return distance;\n    }\n\n    private isBeyondPossibleLeft(x: number, minX: number) {\n        return x >= minX;\n    }\n    private isBeyondPossibleRight(x: number, maxX: number) {\n        return x <= maxX;\n    }\n    private isBeyondPossibleTop(y: number, minY: number) {\n        return y >= minY;\n    }\n    private isBeyondPossibleBottom(y: number, maxY: number) {\n        return y <= maxY;\n    }\n\n    isImageSlide(index: number): boolean {\n        const currentItem = this.core.galleryItems[index];\n        return this.core.getSlideType(currentItem) === 'image';\n    }\n\n    getPossibleSwipeDragCords(scale?: number): PossibleCords {\n        const $image = this.core\n            .getSlideItem(this.core.index)\n            .find('.lg-image')\n            .first();\n\n        const { bottom } = this.core.mediaContainerPosition;\n\n        const imgRect = $image.get().getBoundingClientRect();\n\n        let imageHeight = imgRect.height;\n        let imageWidth = imgRect.width;\n\n        if (scale) {\n            imageHeight = imageHeight + scale * imageHeight;\n            imageWidth = imageWidth + scale * imageWidth;\n        }\n\n        const minY = (imageHeight - this.containerRect.height) / 2;\n        const maxY = (this.containerRect.height - imageHeight) / 2 + bottom;\n\n        const minX = (imageWidth - this.containerRect.width) / 2;\n\n        const maxX = (this.containerRect.width - imageWidth) / 2;\n\n        const possibleSwipeCords = {\n            minY: minY,\n            maxY: maxY,\n            minX: minX,\n            maxX: maxX,\n        };\n        return possibleSwipeCords;\n    }\n\n    setZoomSwipeStyles(\n        LGel: lgQuery,\n        distance: { x: number; y: number },\n    ): void {\n        LGel.css(\n            'transform',\n            'translate3d(' + distance.x + 'px, ' + distance.y + 'px, 0)',\n        );\n    }\n\n    zoomSwipe(): void {\n        let startCoords = {} as Coords;\n        let endCoords = {} as Coords;\n        let isMoved = false;\n\n        // Allow x direction drag\n        let allowX = false;\n\n        // Allow Y direction drag\n        let allowY = false;\n\n        let startTime: Date = new Date();\n        let endTime: Date = new Date();\n        let possibleSwipeCords: PossibleCords;\n\n        let _LGel: lgQuery;\n\n        let $item = this.core.getSlideItem(this.core.index);\n\n        this.core.$inner.on('touchstart.lg', (e) => {\n            // Allow zoom only on image\n            if (!this.isImageSlide(this.core.index)) {\n                return;\n            }\n            $item = this.core.getSlideItem(this.core.index);\n            if (\n                (this.$LG(e.target).hasClass('lg-item') ||\n                    $item.get().contains(e.target)) &&\n                e.touches.length === 1 &&\n                this.core.outer.hasClass('lg-zoomed')\n            ) {\n                e.preventDefault();\n                startTime = new Date();\n                this.core.touchAction = 'zoomSwipe';\n                _LGel = this.core\n                    .getSlideItem(this.core.index)\n                    .find('.lg-img-wrap')\n                    .first();\n\n                const dragAllowedAxises = this.getDragAllowedAxises(0);\n\n                allowY = dragAllowedAxises.allowY;\n                allowX = dragAllowedAxises.allowX;\n                if (allowX || allowY) {\n                    startCoords = this.getSwipeCords(e);\n                }\n\n                possibleSwipeCords = this.getPossibleSwipeDragCords();\n\n                // reset opacity and transition duration\n                this.core.outer.addClass(\n                    'lg-zoom-dragging lg-zoom-drag-transition',\n                );\n            }\n        });\n\n        this.core.$inner.on('touchmove.lg', (e) => {\n            if (\n                e.touches.length === 1 &&\n                this.core.touchAction === 'zoomSwipe' &&\n                (this.$LG(e.target).hasClass('lg-item') ||\n                    $item.get().contains(e.target))\n            ) {\n                e.preventDefault();\n                this.core.touchAction = 'zoomSwipe';\n\n                endCoords = this.getSwipeCords(e);\n\n                const distance = this.getZoomSwipeCords(\n                    startCoords,\n                    endCoords,\n                    allowX,\n                    allowY,\n                    possibleSwipeCords,\n                );\n\n                if (\n                    Math.abs(endCoords.x - startCoords.x) > 15 ||\n                    Math.abs(endCoords.y - startCoords.y) > 15\n                ) {\n                    isMoved = true;\n                    this.setZoomSwipeStyles(_LGel, distance);\n                }\n            }\n        });\n\n        this.core.$inner.on('touchend.lg', (e) => {\n            if (\n                this.core.touchAction === 'zoomSwipe' &&\n                (this.$LG(e.target).hasClass('lg-item') ||\n                    $item.get().contains(e.target))\n            ) {\n                e.preventDefault();\n                this.core.touchAction = undefined;\n                this.core.outer.removeClass('lg-zoom-dragging');\n                if (!isMoved) {\n                    return;\n                }\n                isMoved = false;\n                endTime = new Date();\n                const touchDuration = endTime.valueOf() - startTime.valueOf();\n                this.touchendZoom(\n                    startCoords,\n                    endCoords,\n                    allowX,\n                    allowY,\n                    touchDuration,\n                );\n            }\n        });\n    }\n\n    zoomDrag(): void {\n        let startCoords: Coords = {} as Coords;\n        let endCoords: Coords = {} as Coords;\n        let isDragging = false;\n        let isMoved = false;\n\n        // Allow x direction drag\n        let allowX = false;\n\n        // Allow Y direction drag\n        let allowY = false;\n\n        let startTime: number | Date;\n        let endTime;\n\n        let possibleSwipeCords: PossibleCords;\n\n        let _LGel: lgQuery;\n\n        this.core.outer.on('mousedown.lg.zoom', (e) => {\n            // Allow zoom only on image\n            if (!this.isImageSlide(this.core.index)) {\n                return;\n            }\n            const $item = this.core.getSlideItem(this.core.index);\n            if (\n                this.$LG(e.target).hasClass('lg-item') ||\n                $item.get().contains(e.target)\n            ) {\n                startTime = new Date();\n                _LGel = this.core\n                    .getSlideItem(this.core.index)\n                    .find('.lg-img-wrap')\n                    .first();\n\n                const dragAllowedAxises = this.getDragAllowedAxises(0);\n\n                allowY = dragAllowedAxises.allowY;\n                allowX = dragAllowedAxises.allowX;\n\n                if (this.core.outer.hasClass('lg-zoomed')) {\n                    if (\n                        this.$LG(e.target).hasClass('lg-object') &&\n                        (allowX || allowY)\n                    ) {\n                        e.preventDefault();\n                        startCoords = this.getDragCords(e);\n\n                        possibleSwipeCords = this.getPossibleSwipeDragCords();\n\n                        isDragging = true;\n\n                        this.core.outer\n                            .removeClass('lg-grab')\n                            .addClass(\n                                'lg-grabbing lg-zoom-drag-transition lg-zoom-dragging',\n                            );\n                        // reset opacity and transition duration\n                    }\n                }\n            }\n        });\n\n        this.$LG(window).on(\n            `mousemove.lg.zoom.global${this.core.lgId}`,\n            (e) => {\n                if (isDragging) {\n                    isMoved = true;\n                    endCoords = this.getDragCords(e);\n\n                    const distance = this.getZoomSwipeCords(\n                        startCoords,\n                        endCoords,\n                        allowX,\n                        allowY,\n                        possibleSwipeCords,\n                    );\n\n                    this.setZoomSwipeStyles(_LGel, distance);\n                }\n            },\n        );\n\n        this.$LG(window).on(`mouseup.lg.zoom.global${this.core.lgId}`, (e) => {\n            if (isDragging) {\n                endTime = new Date();\n                isDragging = false;\n                this.core.outer.removeClass('lg-zoom-dragging');\n\n                // Fix for chrome mouse move on click\n                if (\n                    isMoved &&\n                    (startCoords.x !== endCoords.x ||\n                        startCoords.y !== endCoords.y)\n                ) {\n                    endCoords = this.getDragCords(e);\n\n                    const touchDuration =\n                        endTime.valueOf() - startTime.valueOf();\n                    this.touchendZoom(\n                        startCoords,\n                        endCoords,\n                        allowX,\n                        allowY,\n                        touchDuration,\n                    );\n                }\n\n                isMoved = false;\n            }\n\n            this.core.outer.removeClass('lg-grabbing').addClass('lg-grab');\n        });\n    }\n\n    closeGallery(): void {\n        this.resetZoom();\n        this.zoomInProgress = false;\n    }\n\n    destroy(): void {\n        // Unbind all events added by lightGallery zoom plugin\n        this.$LG(window).off(`.lg.zoom.global${this.core.lgId}`);\n        this.core.LGel.off('.lg.zoom');\n        this.core.LGel.off('.zoom');\n        clearTimeout(this.zoomableTimeout);\n        this.zoomableTimeout = false;\n    }\n}\n", "import { PlayerParams } from './lg-video-utils';\n\nexport interface VideoSettings {\n    /**\n     * Enable/DIsable first video autoplay.\n     * @description Autoplay has to be managed using this setting.\n     * Autoplay in PlayerParams doesn't have any effect.\n     */\n    autoplayFirstVideo: boolean;\n\n    /**\n     * Change YouTube player parameters.\n     * You can find the list of YouTube player parameters from the following link\n     * <a href=\"https://developers.google.com/youtube/player_parameters\">YouTube player parameters</a>\n     * @example\n     * lightGallery(document.getElementById('lightGallery'), {\n     *     youTubePlayerParams: {\n     *         modestbranding : 1,\n     *         showinfo : 0,\n     *         controls : 0\n     *     }\n     * })\n     */\n    youTubePlayerParams: any;\n\n    /**\n     * Change Vimeo player parameters.\n     * You can find the list of vimeo player parameters from the following link\n     * <a href=\"https://developer.vimeo.com/player/embedding#universal-parameters\">Vimeo player parameters</a>\n     * @example\n     * lightGallery(document.getElementById('lightGallery'), {\n     *     vimeoPlayerParams: {\n     *         byline : 0,\n     *         portrait : 0,\n     *         color : 'CCCCCC'\n     *     }\n     * })\n     */\n    vimeoPlayerParams: PlayerParams;\n\n    /**\n     * Change Wistia player parameters.\n     * You can find the list of Wistia player parameters from the following link\n     * <a href=\"https://wistia.com/support/developers/embed-options#using-embed-options\">Vimeo player parameters</a>\n     */\n    wistiaPlayerParams: any;\n\n    /**\n     * Go to next slide when video is ended\n     * Note - this doesn't work with YouTube videos at the moment\n     */\n    gotoNextSlideOnVideoEnd: boolean;\n\n    /**\n     * Autoplay video on slide change\n     * @description Make sure you set preload:\"none\"\n     */\n    autoplayVideoOnSlide: boolean;\n\n    /**\n     * Enbale videojs custom video player\n     * <div class=\"alert alert-info\" role=\"alert\">\n     *     <b>Dependency</b> - You need to include <a href=\"https://videojs.com/\">videoJs</a> on your document to enable videojs player\n     * </div>\n     */\n    videojs: boolean;\n\n    /**\n     * Class name of the videojs theme\n     * You need to include the theme stylesheet on your document. <a href=\"https://videojs.com/getting-started/#home-page-themes\" target=\"_blank\">More info</a>\n     * @version V2.5.0\n     */\n    videojsTheme: string;\n\n    /**\n     * Videojs player options\n     */\n    videojsOptions: any;\n}\nexport const videoSettings: VideoSettings = {\n    autoplayFirstVideo: true,\n    youTubePlayerParams: false,\n    vimeoPlayerParams: false,\n    wistiaPlayerParams: false,\n    gotoNextSlideOnVideoEnd: true,\n    autoplayVideoOnSlide: false,\n    videojs: false,\n    videojsTheme: '',\n    videojsOptions: {},\n};\n", "import { LightGallery } from './lightgallery';\nimport { VideoSource } from './plugins/video/types';\n\n/**\n * List of lightGallery events\n * All events should be documented here\n * Below interfaces are used to build the website documentations\n * */\nexport const lGEvents: {\n    [key: string]: string;\n} = {\n    afterAppendSlide: 'lgAfterAppendSlide',\n    init: 'lgInit',\n    hasVideo: 'lgHasVideo',\n    containerResize: 'lgContainerResize',\n    updateSlides: 'lgUpdateSlides',\n    afterAppendSubHtml: 'lgAfterAppendSubHtml',\n    beforeOpen: 'lgBeforeOpen',\n    afterOpen: 'lgAfterOpen',\n    slideItemLoad: 'lgSlideItemLoad',\n    beforeSlide: 'lgBeforeSlide',\n    afterSlide: 'lgAfterSlide',\n    posterClick: 'lgPosterClick',\n    dragStart: 'lgDragStart',\n    dragMove: 'lgDragMove',\n    dragEnd: 'lgDragEnd',\n    beforeNextSlide: 'lgBeforeNextSlide',\n    beforePrevSlide: 'lgBeforePrevSlide',\n    beforeClose: 'lgBeforeClose',\n    afterClose: 'lgAfterClose',\n    rotateLeft: 'lgRotateLeft',\n    rotateRight: 'lgRotateRight',\n    flipHorizontal: 'lgFlipHorizontal',\n    flipVertical: 'lgFlipVertical',\n    autoplay: 'lgAutoplay',\n    autoplayStart: 'lgAutoplayStart',\n    autoplayStop: 'lgAutoplayStop',\n};\n\n// Follow the below format for the event documentation\n// @method is the method name when event is used with Angular/React components\n\n/**\n * Fired only once when lightGallery is initialized\n * @name lgInit\n * @method onInit\n * @example\n *   const lg = document.getElementById('custom-events-demo');\n *   // Perform any action on lightGallery initialization.\n *   // Init event returns the plugin instance that can be used to call any lightGalley public method\n *   let pluginInstance = null;\n *   lg.addEventListener('lgInit', (event) => {\n *      pluginInstance = event.detail.instance;\n *   });\n *   lightGallery(lg);\n * @see <a href=\"/docs/methods\">Methods<a>\n */\nexport interface InitDetail {\n    /**\n     * lightGallery plugin instance\n     */\n    instance: LightGallery;\n}\n\n/**\n * Fired when the slide content has been inserted into it's slide container.\n * @name lgAfterAppendSlide\n * @method onAfterAppendSlide\n */\nexport interface AfterAppendSlideEventDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n}\n\n/**\n * Fired immediately before opening the gallery\n * @name lgBeforeOpen\n * @method onBeforeOpen\n */\nexport interface BeforeOpenDetail {}\n\n/**\n * Fired immediately after opening the gallery\n * @name lgAfterOpen\n * @method onAfterOpen\n */\nexport interface AfterOpenDetail {}\n\n/**\n * Fired once the media inside the slide has been completely loaded .\n * @name lgSlideItemLoad\n * @method onSlideItemLoad\n */\nexport interface SlideItemLoadDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n    /**\n     * For the first slide, lightGallery adds some delay for displaying the loaded slide item.\n     * This delay is required for the transition effect when the slide item is displayed\n     * Respect the delay when you use this event\n     */\n    delay: number;\n\n    // Will be true for the first slide\n    isFirstSlide: boolean;\n}\n\n/**\n * Fired immediately before each slide transition.\n * @name lgBeforeSlide\n * @method onBeforeSlide\n * @example\n *   const lg = document.getElementById('custom-events-demo');\n *   // Perform any action before each slide transition\n *   lg.addEventListener('lgBeforeSlide', (event) => {\n *       const { index, prevIndex } = event.detail;\n *       alert(index, prevIndex);\n *   });\n *   lightGallery(lg);\n */\nexport interface BeforeSlideDetail {\n    /**\n     * Index of the previous slide\n     */\n    prevIndex: number;\n    /**\n     * Index of the slide\n     */\n    index: number;\n    /**\n     * true if slide function called via touch event or mouse drag\n     */\n    fromTouch: boolean;\n    /**\n     * true if slide function called via thumbnail click\n     */\n    fromThumb: boolean;\n}\n\n/**\n * Fired immediately after each slide transition.\n * @name lgAfterSlide\n * @method onAfterSlide\n */\nexport interface AfterSlideDetail {\n    /**\n     * Index of the previous slide\n     */\n    prevIndex: number;\n    /**\n     * Index of the slide\n     */\n    index: number;\n    /**\n     * true if slide function called via touch event or mouse drag\n     */\n    fromTouch: boolean;\n    /**\n     * true if slide function called via thumbnail click\n     */\n    fromThumb: boolean;\n}\n\n/**\n * Fired when the video poster is clicked.\n * @name lgPosterClick\n * @method onPosterClick\n */\nexport interface PosterClickDetail {}\n\n/**\n * Fired when the drag event to move to different slide starts.\n * @name lgDragStart\n * @method onDragStart\n */\nexport interface DragStartDetail {}\n\n/**\n * Fired periodically during the drag operation.\n * @name lgDragMove\n * @method onDragMove\n */\nexport interface DragMoveDetail {}\n\n/**\n * Fired when the user has finished the drag operation\n * @name lgDragEnd\n * @method onDragEnd\n */\nexport interface DragEndDetail {}\n\n/**\n * Fired immediately before the start of the close process.\n * @name lgBeforeClose\n * @method onBeforeClose\n */\nexport interface BeforeCloseDetail {}\n\n/**\n * Fired immediately once lightGallery is closed.\n * @name lgAfterClose\n * @method onAfterClose\n */\nexport interface AfterCloseDetail {\n    /**\n     * lightGallery plugin instance\n     */\n    instance: LightGallery;\n}\n\n/**\n * Fired immediately before each \"next\" slide transition\n * @name lgBeforeNextSlide\n * @method onBeforeNextSlide\n */\nexport interface BeforeNextSlideDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n    /**\n     * true if slide function called via touch event or mouse drag\n     */\n    fromTouch: boolean;\n}\n\n/**\n * Fired immediately before each \"prev\" slide transition\n * @name lgBeforePrevSlide\n * @method onBeforePrevSlide\n */\nexport interface BeforePrevSlideDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n    /**\n     * true if slide function called via touch event or mouse drag\n     */\n    fromTouch: boolean;\n}\n\n/**\n * Fired when the sub-html content (ex : title/ description) has been appended into the slide.\n * @name lgAfterAppendSubHtml\n * @method onAfterAppendSubHtml\n */\nexport interface AfterAppendSubHtmlDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n}\n\n/**\n * Fired when the lightGallery container has been resized.\n * @name lgContainerResize\n * @method onContainerResize\n */\nexport interface ContainerResizeDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n}\n\n/**\n * Fired when lightGallery detects video slide\n * @name lgHasVideo\n * @method onHasVideo\n */\nexport interface HasVideoDetail {\n    /**\n     * Index of the slide,\n     */\n    index: number;\n    /**\n     * Video source\n     */\n    src: string;\n    /**\n     * HTML5 video source if available\n     * <p>\n       HTML5 video source = source: {\n            src: string;\n            type: string;\n        }[];\n        attributes: HTMLVideoElement;\n     * </p>\n     */\n    html5Video: VideoSource;\n    /**\n     * True if video has poster\n     */\n    hasPoster: boolean;\n}\n\n/**\n * Fired when the image is rotated in anticlockwise direction\n * @name lgRotateLeft\n * @method onRotateLeft\n */\nexport interface RotateLeftDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n}\n\n/**\n * Fired when the image is rotated in clockwise direction\n * @name lgRotateRight\n * @method onRotateRight\n */\nexport interface RotateRightDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n}\n\n/**\n * Fired when the image is flipped horizontally\n * @name lgFlipHorizontal\n * @method onFlipHorizontal\n */\nexport interface FlipHorizontalDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n}\n\n/**\n * Fired when the image is flipped vertically\n * @name lgFlipVertical\n * @method onFlipVertical\n */\nexport interface FlipVerticalDetail {\n    /**\n     * Index of the slide\n     */\n    index: number;\n}\n", "import { VideoInfo } from '../../types';\nexport type PlayerParams = Record<string, string | number | boolean> | boolean;\n\nexport type YouTubeParams = {\n    [x: string]: string | number | boolean;\n};\n\nexport const param = (obj: YouTubeParams): string => {\n    return Object.keys(obj)\n        .map(function (k) {\n            return encodeURIComponent(k) + '=' + encodeURIComponent(obj[k]);\n        })\n        .join('&');\n};\nexport const paramsToObject = (url: string): YouTubeParams => {\n    const paramas = url\n        .slice(1)\n        .split('&')\n        .map((p) => p.split('='))\n        .reduce((obj: any, pair) => {\n            const [key, value] = pair.map(decodeURIComponent);\n            obj[key] = value;\n            return obj;\n        }, {});\n    return paramas;\n};\n\nexport const getYouTubeParams = (\n    videoInfo: VideoInfo,\n    youTubePlayerParamsSettings: YouTubeParams | false,\n): string => {\n    if (!videoInfo.youtube) return '';\n    const slideUrlParams = videoInfo.youtube[2]\n        ? paramsToObject(videoInfo.youtube[2])\n        : '';\n\n    // For youtube first params gets priority if duplicates found\n    const defaultYouTubePlayerParams = {\n        wmode: 'opaque',\n        autoplay: 0,\n        mute: 1,\n        enablejsapi: 1,\n    };\n\n    const playerParamsSettings = youTubePlayerParamsSettings || {};\n\n    const youTubePlayerParams = {\n        ...defaultYouTubePlayerParams,\n        ...playerParamsSettings,\n        ...slideUrlParams,\n    };\n\n    const youTubeParams = `?${param(youTubePlayerParams)}`;\n    return youTubeParams;\n};\n\nexport const isYouTubeNoCookie = (url: string): boolean => {\n    return url.includes('youtube-nocookie.com');\n};\n\nexport const getVimeoURLParams = (\n    defaultParams: PlayerParams,\n    videoInfo?: VideoInfo,\n): string => {\n    if (!videoInfo || !videoInfo.vimeo) return '';\n    let urlParams = videoInfo.vimeo[2] || '';\n\n    const defaultPlayerParams =\n        defaultParams && Object.keys(defaultParams).length !== 0\n            ? '&' + param(defaultParams as any)\n            : '';\n\n    // Support private video\n    const urlWithHash = videoInfo.vimeo[0].split('/').pop() || '';\n    const urlWithHashWithParams = urlWithHash.split('?')[0] || '';\n    const hash = urlWithHashWithParams.split('#')[0];\n\n    const isPrivate = videoInfo.vimeo[1] !== hash;\n    if (isPrivate) {\n        urlParams = urlParams.replace(`/${hash}`, '');\n    }\n\n    urlParams =\n        urlParams[0] == '?' ? '&' + urlParams.slice(1) : urlParams || '';\n\n    // For vimeo last params gets priority if duplicates found\n    const vimeoPlayerParams = `?autoplay=0&muted=1${\n        isPrivate ? `&h=${hash}` : ''\n    }${defaultPlayerParams}${urlParams}`;\n    return vimeoPlayerParams;\n};\n", "/**\n * Video module for lightGallery\n * Supports HTML5, YouTube, Vimeo, wistia videos\n *\n *\n * @ref Wistia\n * https://wistia.com/support/integrations/wordpress(How to get url)\n * https://wistia.com/support/developers/embed-options#using-embed-options\n * https://wistia.com/support/developers/player-api\n * https://wistia.com/support/developers/construct-an-embed-code\n * http://jsfiddle.net/xvnm7xLm/\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video\n * https://wistia.com/support/embed-and-share/sharing-videos\n * https://private-sharing.wistia.com/medias/mwhrulrucj\n *\n * @ref Youtube\n * https://developers.google.com/youtube/player_parameters#enablejsapi\n * https://developers.google.com/youtube/iframe_api_reference\n * https://developer.chrome.com/blog/autoplay/#iframe-delegation\n *\n * @ref Vimeo\n * https://stackoverflow.com/questions/10488943/easy-way-to-get-vimeo-id-from-a-vimeo-url\n * https://vimeo.zendesk.com/hc/en-us/articles/360000121668-Starting-playback-at-a-specific-timecode\n * https://vimeo.zendesk.com/hc/en-us/articles/360001494447-Using-Player-Parameters\n */\n\nimport { VideoSettings, videoSettings } from './lg-video-settings';\nimport { LightGallery } from '../../lightgallery';\nimport { lgQuery } from '../../lgQuery';\nimport {\n    CustomEventAfterSlide,\n    CustomEventHasVideo,\n    CustomEventSlideItemLoad,\n    VideoInfo,\n} from '../../types';\nimport { lGEvents } from '../../lg-events';\nimport { VideoSource } from './types';\nimport {\n    getVimeoURLParams,\n    getYouTubeParams,\n    isYouTubeNoCookie,\n    param,\n} from './lg-video-utils';\n\ndeclare let Vimeo: any;\ndeclare let videojs: any;\ndeclare global {\n    interface Window {\n        _wq: any;\n        Vimeo: any;\n    }\n}\nexport default class Video {\n    private core: LightGallery;\n    private settings: VideoSettings;\n    constructor(instance: LightGallery) {\n        // get lightGallery core plugin instance\n        this.core = instance;\n        this.settings = { ...videoSettings, ...this.core.settings };\n\n        return this;\n    }\n    init() {\n        /**\n         * Event triggered when video url found without poster\n         * Append video HTML\n         * Play if autoplayFirstVideo is true\n         */\n        this.core.LGel.on(\n            `${lGEvents.hasVideo}.video`,\n            this.onHasVideo.bind(this),\n        );\n\n        this.core.LGel.on(`${lGEvents.posterClick}.video`, () => {\n            const $el = this.core.getSlideItem(this.core.index);\n            this.loadVideoOnPosterClick($el);\n        });\n        this.core.LGel.on(\n            `${lGEvents.slideItemLoad}.video`,\n            this.onSlideItemLoad.bind(this),\n        );\n\n        // @desc fired immediately before each slide transition.\n        this.core.LGel.on(\n            `${lGEvents.beforeSlide}.video`,\n            this.onBeforeSlide.bind(this),\n        );\n\n        // @desc fired immediately after each slide transition.\n        this.core.LGel.on(\n            `${lGEvents.afterSlide}.video`,\n            this.onAfterSlide.bind(this),\n        );\n    }\n\n    /**\n     * @desc Event triggered when a slide is completely loaded\n     *\n     * @param {Event} event - lightGalley custom event\n     */\n    onSlideItemLoad(event: CustomEventSlideItemLoad): void {\n        const { isFirstSlide, index } = event.detail;\n\n        // Should check the active slide as well as user may have moved to different slide before the first slide is loaded\n        if (\n            this.settings.autoplayFirstVideo &&\n            isFirstSlide &&\n            index === this.core.index\n        ) {\n            // Delay is just for the transition effect on video load\n            setTimeout(() => {\n                this.loadAndPlayVideo(index);\n            }, 200);\n        }\n\n        // Should not call on first slide. should check only if the slide is active\n        if (\n            !isFirstSlide &&\n            this.settings.autoplayVideoOnSlide &&\n            index === this.core.index\n        ) {\n            this.loadAndPlayVideo(index);\n        }\n    }\n\n    /**\n     * @desc Event triggered when video url or poster found\n     * Append video HTML is poster is not given\n     * Play if autoplayFirstVideo is true\n     *\n     * @param {Event} event - Javascript Event object.\n     */\n    onHasVideo(event: CustomEventHasVideo): void {\n        const { index, src, html5Video, hasPoster } = event.detail;\n        if (!hasPoster) {\n            // All functions are called separately if poster exist in loadVideoOnPosterClick function\n\n            this.appendVideos(this.core.getSlideItem(index), {\n                src,\n                addClass: 'lg-object',\n                index,\n                html5Video,\n            });\n\n            // Automatically navigate to next slide once video reaches the end.\n            this.gotoNextSlideOnVideoEnd(src, index);\n        }\n    }\n\n    /**\n     * @desc fired immediately before each slide transition.\n     * Pause the previous video\n     * Hide the download button if the slide contains YouTube, Vimeo, or Wistia videos.\n     *\n     * @param {Event} event - Javascript Event object.\n     * @param {number} prevIndex - Previous index of the slide.\n     * @param {number} index - Current index of the slide\n     */\n    onBeforeSlide(event: CustomEvent): void {\n        if (this.core.lGalleryOn) {\n            const { prevIndex } = event.detail;\n            this.pauseVideo(prevIndex);\n        }\n    }\n\n    /**\n     * @desc fired immediately after each slide transition.\n     * Play video if autoplayVideoOnSlide option is enabled.\n     *\n     * @param {Event} event - Javascript Event object.\n     * @param {number} prevIndex - Previous index of the slide.\n     * @param {number} index - Current index of the slide\n     * @todo should check on onSlideLoad as well if video is not loaded on after slide\n     */\n    onAfterSlide(event: CustomEventAfterSlide): void {\n        const { index, prevIndex } = event.detail;\n        // Do not call on first slide\n        const $slide = this.core.getSlideItem(index);\n        if (this.settings.autoplayVideoOnSlide && index !== prevIndex) {\n            if ($slide.hasClass('lg-complete')) {\n                setTimeout(() => {\n                    this.loadAndPlayVideo(index);\n                }, 100);\n            }\n        }\n    }\n\n    loadAndPlayVideo(index: number): void {\n        const $slide = this.core.getSlideItem(index);\n        const currentGalleryItem = this.core.galleryItems[index];\n        if (currentGalleryItem.poster) {\n            this.loadVideoOnPosterClick($slide, true);\n        } else {\n            this.playVideo(index);\n        }\n    }\n\n    /**\n     * Play HTML5, Youtube, Vimeo or Wistia videos in a particular slide.\n     * @param {number} index - Index of the slide\n     */\n    playVideo(index: number) {\n        this.controlVideo(index, 'play');\n    }\n\n    /**\n     * Pause HTML5, Youtube, Vimeo or Wistia videos in a particular slide.\n     * @param {number} index - Index of the slide\n     */\n    pauseVideo(index: number) {\n        this.controlVideo(index, 'pause');\n    }\n\n    getVideoHtml(\n        src: any,\n        addClass: any,\n        index: number,\n        html5Video: VideoSource,\n    ): string {\n        let video = '';\n        const videoInfo =\n            this.core.galleryItems[(index as unknown) as number]\n                .__slideVideoInfo || {};\n        const currentGalleryItem = this.core.galleryItems[index];\n        let videoTitle = currentGalleryItem.title || currentGalleryItem.alt;\n        videoTitle = videoTitle ? 'title=\"' + videoTitle + '\"' : '';\n        const commonIframeProps = `allowtransparency=\"true\"\n            frameborder=\"0\"\n            scrolling=\"no\"\n            allowfullscreen\n            mozallowfullscreen\n            webkitallowfullscreen\n            oallowfullscreen\n            msallowfullscreen`;\n\n        if (videoInfo.youtube) {\n            const videoId = 'lg-youtube' + index;\n\n            const youTubeParams = getYouTubeParams(\n                videoInfo,\n                this.settings.youTubePlayerParams,\n            );\n\n            const isYouTubeNoCookieURL = isYouTubeNoCookie(src);\n\n            const youtubeURL = isYouTubeNoCookieURL\n                ? '//www.youtube-nocookie.com/'\n                : '//www.youtube.com/';\n\n            video = `<iframe allow=\"autoplay\" id=${videoId} class=\"lg-video-object lg-youtube ${addClass}\" ${videoTitle} src=\"${youtubeURL}embed/${\n                videoInfo.youtube[1] + youTubeParams\n            }\" ${commonIframeProps}></iframe>`;\n        } else if (videoInfo.vimeo) {\n            const videoId = 'lg-vimeo' + index;\n            const playerParams = getVimeoURLParams(\n                this.settings.vimeoPlayerParams,\n                videoInfo,\n            );\n            video = `<iframe allow=\"autoplay\" id=${videoId} class=\"lg-video-object lg-vimeo ${addClass}\" ${videoTitle} src=\"//player.vimeo.com/video/${\n                videoInfo.vimeo[1] + playerParams\n            }\" ${commonIframeProps}></iframe>`;\n        } else if (videoInfo.wistia) {\n            const wistiaId = 'lg-wistia' + index;\n            let playerParams = param(this.settings.wistiaPlayerParams);\n            playerParams = playerParams ? '?' + playerParams : '';\n            video = `<iframe allow=\"autoplay\" id=\"${wistiaId}\" src=\"//fast.wistia.net/embed/iframe/${\n                videoInfo.wistia[4] + playerParams\n            }\" ${videoTitle} class=\"wistia_embed lg-video-object lg-wistia ${addClass}\" name=\"wistia_embed\" ${commonIframeProps}></iframe>`;\n        } else if (videoInfo.html5) {\n            let html5VideoMarkup = '';\n            for (let i = 0; i < html5Video.source.length; i++) {\n                html5VideoMarkup += `<source src=\"${html5Video.source[i].src}\" type=\"${html5Video.source[i].type}\">`;\n            }\n            if (html5Video.tracks) {\n                for (let i = 0; i < html5Video.tracks.length; i++) {\n                    let trackAttributes = '';\n                    const track = html5Video.tracks[i];\n                    Object.keys(track || {}).forEach(function (key) {\n                        trackAttributes += `${key}=\"${(track as any)[key]}\" `;\n                    });\n                    html5VideoMarkup += `<track ${trackAttributes}>`;\n                }\n            }\n\n            let html5VideoAttrs = '';\n            const videoAttributes = html5Video.attributes || {};\n            Object.keys(videoAttributes || {}).forEach(function (key) {\n                html5VideoAttrs += `${key}=\"${(videoAttributes as any)[key]}\" `;\n            });\n            video = `<video class=\"lg-video-object lg-html5 ${\n                this.settings.videojs && this.settings.videojsTheme\n                    ? this.settings.videojsTheme + ' '\n                    : ''\n            } ${this.settings.videojs ? ' video-js' : ''}\" ${html5VideoAttrs}>\n                ${html5VideoMarkup}\n                Your browser does not support HTML5 video.\n            </video>`;\n        }\n\n        return video;\n    }\n\n    /**\n     * @desc - Append videos to the slide\n     *\n     * @param {HTMLElement} el - slide element\n     * @param {Object} videoParams - Video parameters, Contains src, class, index, htmlVideo\n     */\n    appendVideos(\n        el: lgQuery,\n        videoParams: {\n            src: string;\n            addClass: string;\n            index: number;\n            html5Video: any;\n        },\n    ): any {\n        const videoHtml = this.getVideoHtml(\n            videoParams.src,\n            videoParams.addClass,\n            videoParams.index,\n            videoParams.html5Video,\n        );\n        el.find('.lg-video-cont').append(videoHtml);\n        const $videoElement = el.find('.lg-video-object').first();\n        if (videoParams.html5Video) {\n            $videoElement.on('mousedown.lg.video', (e) => {\n                e.stopPropagation();\n            });\n        }\n        if (\n            this.settings.videojs &&\n            this.core.galleryItems[videoParams.index].__slideVideoInfo?.html5\n        ) {\n            try {\n                return videojs(\n                    $videoElement.get(),\n                    this.settings.videojsOptions,\n                );\n            } catch (e) {\n                console.error(\n                    'lightGallery:- Make sure you have included videojs',\n                );\n            }\n        }\n    }\n\n    gotoNextSlideOnVideoEnd(src: any, index: number) {\n        const $videoElement = this.core\n            .getSlideItem(index)\n            .find('.lg-video-object')\n            .first();\n        const videoInfo = this.core.galleryItems[index].__slideVideoInfo || {};\n        if (this.settings.gotoNextSlideOnVideoEnd) {\n            if (videoInfo.html5) {\n                $videoElement.on('ended', () => {\n                    this.core.goToNextSlide();\n                });\n            } else if (videoInfo.vimeo) {\n                try {\n                    // https://github.com/vimeo/player.js/#ended\n                    new Vimeo.Player($videoElement.get()).on('ended', () => {\n                        this.core.goToNextSlide();\n                    });\n                } catch (e) {\n                    console.error(\n                        'lightGallery:- Make sure you have included //github.com/vimeo/player.js',\n                    );\n                }\n            } else if (videoInfo.wistia) {\n                try {\n                    window._wq = window._wq || [];\n\n                    // @todo Event is gettign triggered multiple times\n                    window._wq.push({\n                        id: $videoElement.attr('id'),\n                        onReady: (video: {\n                            bind: (arg0: string, arg1: () => void) => void;\n                        }) => {\n                            video.bind('end', () => {\n                                this.core.goToNextSlide();\n                            });\n                        },\n                    });\n                } catch (e) {\n                    console.error(\n                        'lightGallery:- Make sure you have included //fast.wistia.com/assets/external/E-v1.js',\n                    );\n                }\n            }\n        }\n    }\n\n    controlVideo(index: number, action: string) {\n        const $videoElement = this.core\n            .getSlideItem(index)\n            .find('.lg-video-object')\n            .first();\n        const videoInfo = this.core.galleryItems[index].__slideVideoInfo || {};\n\n        if (!$videoElement.get()) return;\n\n        if (videoInfo.youtube) {\n            try {\n                ($videoElement.get() as any).contentWindow.postMessage(\n                    `{\"event\":\"command\",\"func\":\"${action}Video\",\"args\":\"\"}`,\n                    '*',\n                );\n            } catch (e) {\n                console.error(`lightGallery:- ${e}`);\n            }\n        } else if (videoInfo.vimeo) {\n            try {\n                new Vimeo.Player($videoElement.get())[action]();\n            } catch (e) {\n                console.error(\n                    'lightGallery:- Make sure you have included //github.com/vimeo/player.js',\n                );\n            }\n        } else if (videoInfo.html5) {\n            if (this.settings.videojs) {\n                try {\n                    (videojs($videoElement.get()) as any)[action as any]();\n                } catch (e) {\n                    console.error(\n                        'lightGallery:- Make sure you have included videojs',\n                    );\n                }\n            } else {\n                ($videoElement.get() as any)[action]();\n            }\n        } else if (videoInfo.wistia) {\n            try {\n                window._wq = window._wq || [];\n\n                // @todo Find a way to destroy wistia player instance\n                window._wq.push({\n                    id: $videoElement.attr('id'),\n                    onReady: (video: any) => {\n                        video[action]();\n                    },\n                });\n            } catch (e) {\n                console.error(\n                    'lightGallery:- Make sure you have included //fast.wistia.com/assets/external/E-v1.js',\n                );\n            }\n        }\n    }\n\n    loadVideoOnPosterClick($el: lgQuery, forcePlay?: boolean): void {\n        // check slide has poster\n        if (!$el.hasClass('lg-video-loaded')) {\n            // check already video element present\n            if (!$el.hasClass('lg-has-video')) {\n                $el.addClass('lg-has-video');\n\n                let _html;\n\n                const _src = this.core.galleryItems[this.core.index].src;\n                const video = this.core.galleryItems[this.core.index].video;\n                if (video) {\n                    _html =\n                        typeof video === 'string' ? JSON.parse(video) : video;\n                }\n\n                const videoJsPlayer = this.appendVideos($el, {\n                    src: _src as string,\n                    addClass: '',\n                    index: this.core.index,\n                    html5Video: _html,\n                });\n\n                this.gotoNextSlideOnVideoEnd(_src, this.core.index);\n\n                const $tempImg = $el.find('.lg-object').first().get();\n\n                // @todo make sure it is working\n                $el.find('.lg-video-cont').first().append($tempImg);\n                $el.addClass('lg-video-loading');\n\n                videoJsPlayer &&\n                    videoJsPlayer.ready(() => {\n                        videoJsPlayer.on('loadedmetadata', () => {\n                            this.onVideoLoadAfterPosterClick(\n                                $el,\n                                this.core.index,\n                            );\n                        });\n                    });\n\n                $el.find('.lg-video-object')\n                    .first()\n                    .on('load.lg error.lg loadedmetadata.lg', () => {\n                        setTimeout(() => {\n                            this.onVideoLoadAfterPosterClick(\n                                $el,\n                                this.core.index,\n                            );\n                        }, 50);\n                    });\n            } else {\n                this.playVideo(this.core.index);\n            }\n        } else if (forcePlay) {\n            this.playVideo(this.core.index);\n        }\n    }\n    onVideoLoadAfterPosterClick($el: lgQuery, index: number): void {\n        $el.addClass('lg-video-loaded');\n        this.playVideo(index);\n    }\n    destroy(): void {\n        this.core.LGel.off('.lg.video');\n        this.core.LGel.off('.video');\n    }\n}\n", "import ApplicationController from '../../controllers/application_controller'\nimport { toast } from '../../utils/toast'\n\nexport default class extends ApplicationController {\n  static targets = ['dialog', 'url', 'preview', 'form']\n  static values = {\n    urlRegex: String,\n    fieldName: { type: String, default: 'communities_spaces_post[video_embeds_attributes]' },\n  }\n\n  openDialog() {\n    this.dialogTarget.open = true\n  }\n\n  hideDialog() {\n    this.dialogTarget.open = false\n  }\n\n  resetForm() {\n    this.formTarget.reset()\n    this.formTarget.querySelector('input[type=\"submit\"]').disabled = false\n  }\n\n  async handleSubmit(e) {\n    e.preventDefault()\n    const formData = new FormData(e.target)\n    const videoUrl = formData.get('video_url')\n    const data = await this.fetchVideoData(videoUrl)\n\n    this.insertVideoPreview(videoUrl, data.thumbnail_url, data)\n\n    this.dialogTarget.open = false\n    this.resetForm()\n  }\n\n  /* eslint-disable max-len */\n  insertVideoPreview(videoUrl, thumbnailUrl, data) {\n    const timestamp = Date.now()\n    const previewHtml = `\n      <div class=\"relative group/item shrink-0\" data-video-embed-preview>\n        <input type=\"hidden\" name=\"${this.fieldNameValue}[${timestamp}][url]\" value=\"${videoUrl}\">\n        <input type=\"hidden\" name=\"${this.fieldNameValue}[${timestamp}][data]\" value='${this.safeJsonForHtml(data)}'> \n        <img src=\"${thumbnailUrl}\" class=\"rounded-xs aspect-video h-24 object-cover\" />\n        <div class=\"absolute flex items-center justify-center top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 size-6\">\n          <i class=\"fa-duotone fa-solid fa-circle-play text-2xl\" style=\"--fa-primary-color: #ffffff; --fa-secondary-color: #000000; --fa-secondary-opacity: 1;\"></i>\n        </div>\n        <button\n          type=\"button\"\n          class=\"text-white flex items-center justify-center absolute top-0 right-0 lg:opacity-0 lg:group-hover/item:opacity-100 size-8\"\n          data-action=\"click->video-embeds#removeVideo\"\n        >\n            <i class=\"fa-duotone fa-solid fa-circle-xmark rounded-full border-black border\" style=\"--fa-primary-color: #000; --fa-secondary-color: #FFF; --fa-secondary-opacity: 1;\"></i>\n        </button>\n      </div>\n    `\n    this.previewTarget.insertAdjacentHTML('beforeend', previewHtml)\n  }\n  /* eslint-enable max-len */\n\n  removeVideo(event) {\n    event.target.closest('[data-video-embed-preview]').remove()\n  }\n\n  async fetchVideoData(url) {\n    const videoType = this.getVideoType(url)\n    if (!videoType) {\n      throw new Error('Unsupported video URL')\n    }\n\n    if (videoType === 'voomly') {\n      let data = await this.fetchVoomlyData(url)\n      return this.camelToSnakeCase(data)\n    } else {\n      const oembedUrl = this.getOembedUrl(url, videoType)\n      try {\n        const response = await fetch(oembedUrl)\n        if (!response.ok) {\n          toast('alert', 'Unsupported video url. Please try again.', 'flash')\n          throw new Error('Failed to fetch oEmbed data')\n        }\n        const data = await response.json()\n\n        return data\n      } catch (error) {\n        console.error('Error fetching video data:', error)\n        throw error\n      } finally {\n        this.resetForm()\n      }\n    }\n  }\n\n  getVideoType(url) {\n    if (url.includes('youtube.com') || url.includes('youtu.be')) {\n      return 'youtube'\n    } else if (url.includes('vimeo.com')) {\n      return 'vimeo'\n    } else if (url.includes('loom.com')) {\n      return 'loom'\n    } else if (url.includes('voomly.com')) {\n      return 'voomly'\n    }\n    return null\n  }\n\n  getOembedUrl(url, videoType) {\n    switch (videoType) {\n      case 'youtube':\n        return `https://www.youtube.com/oembed?url=${encodeURIComponent(url)}&format=json`\n      case 'vimeo':\n        return `https://vimeo.com/api/oembed.json?url=${encodeURIComponent(url)}`\n      case 'loom':\n        return `https://www.loom.com/v1/oembed?url=${encodeURIComponent(url)}`\n      default:\n        throw new Error('Unsupported video type')\n    }\n  }\n\n  async fetchVoomlyData(url) {\n    const videoId = this.extractVoomlyId(url)\n    const voomlyEmbedUrl = `https://api.voomly.com/embed-videos/${videoId}`\n\n    try {\n      const response = await fetch(voomlyEmbedUrl)\n\n      if (!response.ok) {\n        toast('alert', 'Unsupported Voomly url. Please try again.', 'flash')\n        throw new Error('Failed to fetch Voomly data')\n      }\n\n      const data = await response.json()\n      return data\n    } catch (error) {\n      console.error('Error fetching video data:', error)\n      throw error\n    } finally {\n      this.resetForm()\n    }\n  }\n\n  extractVoomlyId(url) {\n    const match = url.match(/\\/v\\/([^/]+)/)\n    return match ? match[1] : null\n  }\n\n  camelToSnakeCase(data) {\n    if (Array.isArray(data)) {\n      return data.map((item) => this.camelToSnakeCase(item))\n    } else if (data !== null && typeof data === 'object') {\n      return Object.fromEntries(\n        Object.entries(data).map(([key, value]) => [\n          key.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`),\n          this.camelToSnakeCase(value),\n        ])\n      )\n    }\n    return data\n  }\n\n  escapeHtml(str) {\n    const htmlEscapes = {\n      '&': '&amp;',\n      '<': '&lt;',\n      '>': '&gt;',\n      '\"': '&quot;',\n      \"'\": '&#39;',\n    }\n    return str.replace(/[&<>\"']/g, (match) => htmlEscapes[match])\n  }\n\n  safeJsonForHtml(obj) {\n    return this.escapeHtml(JSON.stringify(obj))\n  }\n}\n", "import ApplicationController from '../../controllers/application_controller'\nimport { Picker } from 'emoji-mart'\n\nexport default class extends ApplicationController {\n  static targets = ['picker']\n  static values = { locale: String }\n\n  connect() {\n    this.initializePicker()\n  }\n\n  async getI18nConfig(language = 'en') {\n    try {\n      const response = await fetch(`https://cdn.jsdelivr.net/npm/@emoji-mart/data/i18n/${language}.json`)\n      if (response.ok) {\n        return await response.json()\n      }\n    } catch {\n      console.warn(`Failed to load i18n for ${language}, falling back to default`)\n    }\n    // Fallback to no i18n config (uses English defaults)\n    return null\n  }\n\n  async initializePicker() {\n    const dataResponse = await fetch('https://cdn.jsdelivr.net/npm/@emoji-mart/data')\n    const locale = this.localeValue || 'en'\n    const i18nConfig = await this.getI18nConfig(locale)\n\n    const pickerOptions = {\n      data: await dataResponse.json(),\n      onEmojiSelect: (emoji) => {\n        let event = new CustomEvent('emoji-select', { detail: emoji, bubbles: true })\n        this.element.dispatchEvent(event)\n        this.hide()\n      },\n    }\n\n    if (i18nConfig) {\n      pickerOptions.i18n = i18nConfig\n    }\n\n    this.picker = new Picker(pickerOptions)\n    this.pickerTarget.appendChild(this.picker)\n  }\n\n  hide() {\n    this.element.open = false\n  }\n}\n", "export { PickerElement as Picker } from './components/Picker'\nexport { EmojiElement as Emoji } from './components/Emoji'\n\nexport { SearchIndex, FrequentlyUsed } from './helpers'\n\nexport { init, Data, I18n } from './config'\n\nexport { getEmojiDataFromNative } from './utils'\n", "export { default as Picker } from './Picker.js'\nexport { default as PickerElement } from './PickerElement.js'\nexport { default as PickerStyles } from 'bundle-text:./PickerStyles.scss'\n", "import { Component, createRef } from 'preact'\n\nimport { deepEqual, sleep, getEmojiData } from '../../utils'\nimport { Data, I18n, init } from '../../config'\nimport { SearchIndex, Store, FrequentlyUsed } from '../../helpers'\nimport Icons from '../../icons'\n\nimport { Emoji } from '../Emoji'\nimport { Navigation } from '../Navigation'\nimport { PureInlineComponent } from '../HOCs'\n\nconst Performance = {\n  rowsPerRender: 10,\n}\n\nexport default class Picker extends Component {\n  constructor(props) {\n    super()\n\n    this.state = {\n      pos: [-1, -1],\n      visibleRows: { 0: true },\n      ...this.getInitialState(props),\n    }\n  }\n\n  getInitialState(props = this.props) {\n    return {\n      skin: Store.get('skin') || props.skin,\n      theme: this.initTheme(props.theme),\n    }\n  }\n\n  componentWillMount() {\n    this.observers = []\n    this.dir = I18n.rtl ? 'rtl' : 'ltr'\n    this.refs = {\n      menu: createRef(),\n      navigation: createRef(),\n      scroll: createRef(),\n      search: createRef(),\n      searchInput: createRef(),\n      skinToneButton: createRef(),\n      skinToneRadio: createRef(),\n    }\n\n    this.initGrid()\n\n    if (\n      this.props.stickySearch == false &&\n      this.props.searchPosition == 'sticky'\n    ) {\n      console.warn(\n        '[EmojiMart] Deprecation warning: `stickySearch` has been renamed `searchPosition`.',\n      )\n\n      this.props.searchPosition = 'static'\n    }\n  }\n\n  componentDidMount() {\n    this.register()\n\n    this.shadowRoot = this.base.parentNode\n\n    if (this.props.autoFocus) {\n      const { searchInput } = this.refs\n      if (searchInput.current) {\n        searchInput.current.focus()\n      }\n    }\n  }\n\n  componentWillReceiveProps(nextProps) {\n    this.nextState || (this.nextState = {})\n\n    for (const k in nextProps) {\n      this.nextState[k] = nextProps[k]\n    }\n\n    clearTimeout(this.nextStateTimer)\n    this.nextStateTimer = setTimeout(() => {\n      let requiresGridReset = false\n\n      for (const k in this.nextState) {\n        this.props[k] = this.nextState[k]\n\n        if (k === 'custom' || k === 'categories') {\n          requiresGridReset = true\n        }\n      }\n\n      delete this.nextState\n      const nextState = this.getInitialState()\n\n      if (requiresGridReset) {\n        return this.reset(nextState)\n      }\n\n      this.setState(nextState)\n    })\n  }\n\n  componentWillUnmount() {\n    this.unregister()\n  }\n\n  async reset(nextState = {}) {\n    await init(this.props)\n\n    this.initGrid()\n    this.unobserve()\n\n    this.setState(nextState, () => {\n      this.observeCategories()\n      this.observeRows()\n    })\n  }\n\n  register() {\n    document.addEventListener('click', this.handleClickOutside)\n    this.observe()\n  }\n\n  unregister() {\n    document.removeEventListener('click', this.handleClickOutside)\n    this.unobserve()\n  }\n\n  observe() {\n    this.observeCategories()\n    this.observeRows()\n  }\n\n  unobserve() {\n    for (const observer of this.observers) {\n      observer.disconnect()\n    }\n  }\n\n  initGrid() {\n    const { categories } = Data\n\n    this.refs.categories = new Map()\n\n    const navKey = Data.categories.map((category) => category.id).join(',')\n    if (this.navKey && this.navKey != navKey) {\n      this.refs.scroll.current && (this.refs.scroll.current.scrollTop = 0)\n    }\n    this.navKey = navKey\n\n    this.grid = []\n    this.grid.setsize = 0\n\n    const addRow = (rows, category) => {\n      const row = []\n      row.__categoryId = category.id\n      row.__index = rows.length\n      this.grid.push(row)\n\n      const rowIndex = this.grid.length - 1\n      const rowRef = rowIndex % Performance.rowsPerRender ? {} : createRef()\n      rowRef.index = rowIndex\n      rowRef.posinset = this.grid.setsize + 1\n      rows.push(rowRef)\n\n      return row\n    }\n\n    for (let category of categories) {\n      const rows = []\n      let row = addRow(rows, category)\n\n      for (let emoji of category.emojis) {\n        if (row.length == this.props.perLine) {\n          row = addRow(rows, category)\n        }\n\n        this.grid.setsize += 1\n        row.push(emoji)\n      }\n\n      this.refs.categories.set(category.id, { root: createRef(), rows })\n    }\n  }\n\n  initTheme(theme) {\n    if (theme != 'auto') return theme\n\n    if (!this.darkMedia) {\n      this.darkMedia = matchMedia('(prefers-color-scheme: dark)')\n      if (this.darkMedia.media.match(/^not/)) return 'light'\n\n      this.darkMedia.addListener(() => {\n        if (this.props.theme != 'auto') return\n        this.setState({ theme: this.darkMedia.matches ? 'dark' : 'light' })\n      })\n    }\n\n    return this.darkMedia.matches ? 'dark' : 'light'\n  }\n\n  handleClickOutside = (e) => {\n    const { element } = this.props\n\n    if (e.target != element) {\n      if (this.state.showSkins) {\n        this.closeSkins()\n      }\n\n      if (this.props.onClickOutside) {\n        this.props.onClickOutside()\n      }\n    }\n  }\n\n  handleBaseClick = (e) => {\n    if (!this.state.showSkins) return\n    if (!e.target.closest('.menu')) {\n      e.preventDefault()\n      e.stopImmediatePropagation()\n\n      this.closeSkins()\n    }\n  }\n\n  handleBaseKeydown = (e) => {\n    if (!this.state.showSkins) return\n    if (e.key == 'Escape') {\n      e.preventDefault()\n      e.stopImmediatePropagation()\n\n      this.closeSkins()\n    }\n  }\n\n  getEmojiByPos([p1, p2]) {\n    const grid = this.state.searchResults || this.grid\n    const emoji = grid[p1] && grid[p1][p2]\n\n    if (!emoji) return\n    return SearchIndex.get(emoji)\n  }\n\n  observeCategories() {\n    const navigation = this.refs.navigation.current\n    if (!navigation) return\n\n    const visibleCategories = new Map()\n    const setFocusedCategory = (categoryId) => {\n      if (categoryId != navigation.state.categoryId) {\n        navigation.setState({ categoryId })\n      }\n    }\n\n    const observerOptions = {\n      root: this.refs.scroll.current,\n      threshold: [0.0, 1.0],\n    }\n\n    const observer = new IntersectionObserver((entries) => {\n      for (const entry of entries) {\n        const id = entry.target.dataset.id\n        visibleCategories.set(id, entry.intersectionRatio)\n      }\n\n      const ratios = [...visibleCategories]\n\n      const lastCategory = ratios[ratios.length - 1]\n      if (lastCategory[1] == 1) {\n        return setFocusedCategory(lastCategory[0])\n      }\n\n      for (const [id, ratio] of ratios) {\n        if (ratio) {\n          setFocusedCategory(id)\n          break\n        }\n      }\n    }, observerOptions)\n\n    for (const { root } of this.refs.categories.values()) {\n      observer.observe(root.current)\n    }\n\n    this.observers.push(observer)\n  }\n\n  observeRows() {\n    const visibleRows = { ...this.state.visibleRows }\n\n    const observer = new IntersectionObserver(\n      (entries) => {\n        for (const entry of entries) {\n          const index = parseInt(entry.target.dataset.index)\n\n          if (entry.isIntersecting) {\n            visibleRows[index] = true\n          } else {\n            delete visibleRows[index]\n          }\n        }\n\n        this.setState({ visibleRows })\n      },\n      {\n        root: this.refs.scroll.current,\n        rootMargin: `${\n          this.props.emojiButtonSize * (Performance.rowsPerRender + 5)\n        }px 0px ${this.props.emojiButtonSize * Performance.rowsPerRender}px`,\n      },\n    )\n\n    for (const { rows } of this.refs.categories.values()) {\n      for (const row of rows) {\n        if (row.current) {\n          observer.observe(row.current)\n        }\n      }\n    }\n\n    this.observers.push(observer)\n  }\n\n  preventDefault(e) {\n    e.preventDefault()\n  }\n\n  handleSearchClick = () => {\n    const emoji = this.getEmojiByPos(this.state.pos)\n    if (!emoji) return\n\n    this.setState({ pos: [-1, -1] })\n  }\n\n  handleSearchInput = async () => {\n    const input = this.refs.searchInput.current\n    if (!input) return\n\n    const { value } = input\n    const searchResults = await SearchIndex.search(value)\n    const afterRender = () => {\n      if (!this.refs.scroll.current) return\n      this.refs.scroll.current.scrollTop = 0\n    }\n\n    if (!searchResults) {\n      return this.setState({ searchResults, pos: [-1, -1] }, afterRender)\n    }\n\n    const pos = input.selectionStart == input.value.length ? [0, 0] : [-1, -1]\n    const grid = []\n    grid.setsize = searchResults.length\n    let row = null\n\n    for (let emoji of searchResults) {\n      if (!grid.length || row.length == this.props.perLine) {\n        row = []\n        row.__categoryId = 'search'\n        row.__index = grid.length\n        grid.push(row)\n      }\n\n      row.push(emoji)\n    }\n\n    this.ignoreMouse()\n    this.setState({ searchResults: grid, pos }, afterRender)\n  }\n\n  handleSearchKeyDown = (e) => {\n    // const specialKey = e.altKey || e.ctrlKey || e.metaKey\n    const input = e.currentTarget\n    e.stopImmediatePropagation()\n\n    switch (e.key) {\n      case 'ArrowLeft':\n        // if (specialKey) return\n        // e.preventDefault()\n        this.navigate({ e, input, left: true })\n        break\n\n      case 'ArrowRight':\n        // if (specialKey) return\n        // e.preventDefault()\n        this.navigate({ e, input, right: true })\n        break\n\n      case 'ArrowUp':\n        // if (specialKey) return\n        // e.preventDefault()\n        this.navigate({ e, input, up: true })\n        break\n\n      case 'ArrowDown':\n        // if (specialKey) return\n        // e.preventDefault()\n        this.navigate({ e, input, down: true })\n        break\n\n      case 'Enter':\n        e.preventDefault()\n        this.handleEmojiClick({ pos: this.state.pos })\n        break\n\n      case 'Escape':\n        e.preventDefault()\n        if (this.state.searchResults) {\n          this.clearSearch()\n        } else {\n          this.unfocusSearch()\n        }\n        break\n\n      default:\n        break\n    }\n  }\n\n  clearSearch = () => {\n    const input = this.refs.searchInput.current\n    if (!input) return\n\n    input.value = ''\n    input.focus()\n\n    this.handleSearchInput()\n  }\n\n  unfocusSearch() {\n    const input = this.refs.searchInput.current\n    if (!input) return\n\n    input.blur()\n  }\n\n  navigate({ e, input, left, right, up, down }) {\n    const grid = this.state.searchResults || this.grid\n    if (!grid.length) return\n\n    let [p1, p2] = this.state.pos\n\n    const pos = (() => {\n      if (p1 == 0) {\n        if (p2 == 0 && !e.repeat && (left || up)) {\n          return null\n        }\n      }\n\n      if (p1 == -1) {\n        if (\n          !e.repeat &&\n          (right || down) &&\n          input.selectionStart == input.value.length\n        ) {\n          return [0, 0]\n        }\n\n        return null\n      }\n\n      if (left || right) {\n        let row = grid[p1]\n        const increment = left ? -1 : 1\n\n        p2 += increment\n        if (!row[p2]) {\n          p1 += increment\n          row = grid[p1]\n\n          if (!row) {\n            p1 = left ? 0 : grid.length - 1\n            p2 = left ? 0 : grid[p1].length - 1\n\n            return [p1, p2]\n          }\n\n          p2 = left ? row.length - 1 : 0\n        }\n\n        return [p1, p2]\n      }\n\n      if (up || down) {\n        p1 += up ? -1 : 1\n        const row = grid[p1]\n\n        if (!row) {\n          p1 = up ? 0 : grid.length - 1\n          p2 = up ? 0 : grid[p1].length - 1\n\n          return [p1, p2]\n        }\n\n        if (!row[p2]) {\n          p2 = row.length - 1\n        }\n\n        return [p1, p2]\n      }\n    })()\n\n    if (pos) {\n      e.preventDefault()\n    } else {\n      if (this.state.pos[0] > -1) {\n        this.setState({ pos: [-1, -1] })\n      }\n\n      return\n    }\n\n    this.setState({ pos, keyboard: true }, () => {\n      this.scrollTo({ row: pos[0] })\n    })\n  }\n\n  scrollTo({ categoryId, row }) {\n    const grid = this.state.searchResults || this.grid\n    if (!grid.length) return\n\n    const scroll = this.refs.scroll.current\n    const scrollRect = scroll.getBoundingClientRect()\n\n    let scrollTop = 0\n\n    if (row >= 0) {\n      categoryId = grid[row].__categoryId\n    }\n\n    if (categoryId) {\n      const ref =\n        this.refs[categoryId] || this.refs.categories.get(categoryId).root\n      const categoryRect = ref.current.getBoundingClientRect()\n\n      scrollTop = categoryRect.top - (scrollRect.top - scroll.scrollTop) + 1\n    }\n\n    if (row >= 0) {\n      if (!row) {\n        scrollTop = 0\n      } else {\n        const rowIndex = grid[row].__index\n        const rowTop = scrollTop + rowIndex * this.props.emojiButtonSize\n        const rowBot =\n          rowTop +\n          this.props.emojiButtonSize +\n          this.props.emojiButtonSize * 0.88\n\n        if (rowTop < scroll.scrollTop) {\n          scrollTop = rowTop\n        } else if (rowBot > scroll.scrollTop + scrollRect.height) {\n          scrollTop = rowBot - scrollRect.height\n        } else {\n          return\n        }\n      }\n    }\n\n    this.ignoreMouse()\n    scroll.scrollTop = scrollTop\n  }\n\n  ignoreMouse() {\n    this.mouseIsIgnored = true\n    clearTimeout(this.ignoreMouseTimer)\n    this.ignoreMouseTimer = setTimeout(() => {\n      delete this.mouseIsIgnored\n    }, 100)\n  }\n\n  handleCategoryClick = ({ category, i }) => {\n    this.scrollTo(i == 0 ? { row: -1 } : { categoryId: category.id })\n  }\n\n  handleEmojiOver(pos) {\n    if (this.mouseIsIgnored || this.state.showSkins) return\n    this.setState({ pos: pos || [-1, -1], keyboard: false })\n  }\n\n  handleEmojiClick({ emoji, pos }) {\n    if (!this.props.onEmojiSelect) return\n\n    if (!emoji && pos) {\n      emoji = this.getEmojiByPos(pos)\n    }\n\n    if (emoji) {\n      const emojiData = getEmojiData(emoji, { skinIndex: this.state.skin - 1 })\n\n      if (this.props.maxFrequentRows) {\n        FrequentlyUsed.add(emojiData, this.props)\n      }\n\n      this.props.onEmojiSelect(emojiData)\n    }\n  }\n\n  openSkins = (e) => {\n    const { currentTarget } = e\n    const rect = currentTarget.getBoundingClientRect()\n\n    this.setState({ showSkins: rect }, async () => {\n      // Firefox requires 2 frames for the transition to consistenly work\n      await sleep(2)\n\n      const menu = this.refs.menu.current\n      if (!menu) return\n\n      menu.classList.remove('hidden')\n      this.refs.skinToneRadio.current.focus()\n\n      this.base.addEventListener('click', this.handleBaseClick, true)\n      this.base.addEventListener('keydown', this.handleBaseKeydown, true)\n    })\n  }\n\n  closeSkins() {\n    if (!this.state.showSkins) return\n    this.setState({ showSkins: null, tempSkin: null })\n\n    this.base.removeEventListener('click', this.handleBaseClick)\n    this.base.removeEventListener('keydown', this.handleBaseKeydown)\n  }\n\n  handleSkinMouseOver(tempSkin) {\n    this.setState({ tempSkin })\n  }\n\n  handleSkinClick(skin) {\n    this.ignoreMouse()\n    this.closeSkins()\n\n    this.setState({ skin, tempSkin: null })\n    Store.set('skin', skin)\n  }\n\n  renderNav() {\n    return (\n      <Navigation\n        key={this.navKey}\n        ref={this.refs.navigation}\n        icons={this.props.icons}\n        theme={this.state.theme}\n        unfocused={!!this.state.searchResults}\n        position={this.props.navPosition}\n        onClick={this.handleCategoryClick}\n      />\n    )\n  }\n\n  renderPreview() {\n    const emoji = this.getEmojiByPos(this.state.pos)\n    const noSearchResults =\n      this.state.searchResults && !this.state.searchResults.length\n\n    return (\n      <div\n        id=\"preview\"\n        class=\"flex flex-middle\"\n        dir={this.dir}\n        data-position={this.props.previewPosition}\n      >\n        <div class=\"flex flex-middle flex-grow\">\n          <div\n            class=\"flex flex-auto flex-middle flex-center\"\n            style={{\n              height: this.props.emojiButtonSize,\n              fontSize: this.props.emojiButtonSize,\n            }}\n          >\n            <Emoji\n              emoji={emoji}\n              id={\n                noSearchResults\n                  ? this.props.noResultsEmoji || 'cry'\n                  : this.props.previewEmoji ||\n                    (this.props.previewPosition == 'top'\n                      ? 'point_down'\n                      : 'point_up')\n              }\n              set={this.props.set}\n              size={this.props.emojiButtonSize}\n              skin={this.state.tempSkin || this.state.skin}\n              spritesheet={true}\n              getSpritesheetURL={this.props.getSpritesheetURL}\n            />\n          </div>\n\n          <div class={`margin-${this.dir[0]}`}>\n            {emoji ? (\n              <div class={`padding-${this.dir[2]} align-${this.dir[0]}`}>\n                <div class=\"ellipsis\" style={{ fontSize: '1.1em' }}>\n                  {emoji.name}\n                </div>\n                <div class=\"ellipsis color-c\" style={{ fontSize: '.9em' }}>\n                  {emoji.skins[0].shortcodes}\n                </div>\n              </div>\n            ) : noSearchResults ? (\n              <div class={`padding-${this.dir[2]} align-${this.dir[0]}`}>\n                <div class=\"ellipsis\" style={{ fontSize: '1.1em' }}>\n                  {I18n.search_no_results_1}\n                </div>\n                <div class=\"ellipsis color-c\" style={{ fontSize: '.9em' }}>\n                  {I18n.search_no_results_2}\n                </div>\n              </div>\n            ) : (\n              <div class=\"color-c\" style={{ fontSize: 21 }}>\n                {I18n.pick}\n              </div>\n            )}\n          </div>\n        </div>\n\n        {!emoji &&\n          this.props.skinTonePosition == 'preview' &&\n          this.renderSkinToneButton()}\n      </div>\n    )\n  }\n\n  renderEmojiButton(emoji, { pos, posinset, grid }) {\n    const size = this.props.emojiButtonSize\n    const skin = this.state.tempSkin || this.state.skin\n    const emojiSkin = emoji.skins[skin - 1] || emoji.skins[0]\n    const native = emojiSkin.native\n    const selected = deepEqual(this.state.pos, pos)\n    const key = pos.concat(emoji.id).join('')\n\n    return (\n      <PureInlineComponent key={key} {...{ selected, skin, size }}>\n        <button\n          aria-label={native}\n          aria-selected={selected || undefined}\n          aria-posinset={posinset}\n          aria-setsize={grid.setsize}\n          data-keyboard={this.state.keyboard}\n          title={this.props.previewPosition == 'none' ? emoji.name : undefined}\n          type=\"button\"\n          class=\"flex flex-center flex-middle\"\n          tabindex=\"-1\"\n          onClick={() => this.handleEmojiClick({ emoji })}\n          onMouseEnter={() => this.handleEmojiOver(pos)}\n          onMouseLeave={() => this.handleEmojiOver()}\n          style={{\n            width: this.props.emojiButtonSize,\n            height: this.props.emojiButtonSize,\n            fontSize: this.props.emojiSize,\n            lineHeight: 0,\n          }}\n        >\n          <div\n            aria-hidden=\"true\"\n            class=\"background\"\n            style={{\n              borderRadius: this.props.emojiButtonRadius,\n              backgroundColor: this.props.emojiButtonColors\n                ? this.props.emojiButtonColors[\n                    (posinset - 1) % this.props.emojiButtonColors.length\n                  ]\n                : undefined,\n            }}\n          ></div>\n          <Emoji\n            emoji={emoji}\n            set={this.props.set}\n            size={this.props.emojiSize}\n            skin={skin}\n            spritesheet={true}\n            getSpritesheetURL={this.props.getSpritesheetURL}\n          />\n        </button>\n      </PureInlineComponent>\n    )\n  }\n\n  renderSearch() {\n    const renderSkinTone =\n      this.props.previewPosition == 'none' ||\n      this.props.skinTonePosition == 'search'\n\n    return (\n      <div>\n        <div class=\"spacer\"></div>\n        <div class=\"flex flex-middle\">\n          {renderSkinTone && this.dir == 'rtl' && this.renderSkinToneButton()}\n\n          <div class=\"search relative flex-grow\">\n            <input\n              type=\"search\"\n              ref={this.refs.searchInput}\n              placeholder={I18n.search}\n              onClick={this.handleSearchClick}\n              onInput={this.handleSearchInput}\n              onKeyDown={this.handleSearchKeyDown}\n              autoComplete=\"off\"\n            ></input>\n            <span class=\"icon loupe flex\">{Icons.search.loupe}</span>\n            {this.state.searchResults && (\n              <button\n                title=\"Clear\"\n                aria-label=\"Clear\"\n                type=\"button\"\n                class=\"icon delete flex\"\n                onClick={this.clearSearch}\n                onMouseDown={this.preventDefault}\n              >\n                {Icons.search.delete}\n              </button>\n            )}\n          </div>\n\n          {renderSkinTone && this.dir == 'ltr' && this.renderSkinToneButton()}\n        </div>\n      </div>\n    )\n  }\n\n  renderSearchResults() {\n    const { searchResults } = this.state\n    if (!searchResults) return null\n\n    return (\n      <div class=\"category\" ref={this.refs.search}>\n        <div class={`sticky padding-small align-${this.dir[0]}`}>\n          {I18n.categories.search}\n        </div>\n        <div>\n          {!searchResults.length ? (\n            <div class={`padding-small align-${this.dir[0]}`}>\n              {this.props.onAddCustomEmoji && (\n                <a onClick={this.props.onAddCustomEmoji}>{I18n.add_custom}</a>\n              )}\n            </div>\n          ) : (\n            searchResults.map((row, i) => {\n              return (\n                <div class=\"flex\">\n                  {row.map((emoji, ii) => {\n                    return this.renderEmojiButton(emoji, {\n                      pos: [i, ii],\n                      posinset: i * this.props.perLine + ii + 1,\n                      grid: searchResults,\n                    })\n                  })}\n                </div>\n              )\n            })\n          )}\n        </div>\n      </div>\n    )\n  }\n\n  renderCategories() {\n    const { categories } = Data\n    const hidden = !!this.state.searchResults\n\n    return (\n      <div\n        style={{\n          visibility: hidden ? 'hidden' : undefined,\n          display: hidden ? 'none' : undefined,\n        }}\n      >\n        {categories.map((category) => {\n          const { root, rows } = this.refs.categories.get(category.id)\n\n          return (\n            <div\n              data-id={category.target ? category.target.id : category.id}\n              class=\"category\"\n              ref={root}\n            >\n              <div class={`sticky padding-small align-${this.dir[0]}`}>\n                {category.name || I18n.categories[category.id]}\n              </div>\n              <div\n                class=\"relative\"\n                style={{\n                  height: rows.length * this.props.emojiButtonSize,\n                }}\n              >\n                {rows.map((row, i) => {\n                  const targetRow =\n                    row.index - (row.index % Performance.rowsPerRender)\n                  const visible = this.state.visibleRows[targetRow]\n                  const ref = 'current' in row ? row : undefined\n\n                  if (!visible && !ref) {\n                    return null\n                  }\n\n                  const start = i * this.props.perLine\n                  const end = start + this.props.perLine\n                  const emojiIds = category.emojis.slice(start, end)\n\n                  return (\n                    <div\n                      key={row.index}\n                      data-index={row.index}\n                      ref={ref}\n                      class=\"flex row\"\n                      style={{ top: i * this.props.emojiButtonSize }}\n                    >\n                      {visible &&\n                        emojiIds.map((emojiId, ii) => {\n                          const emoji = SearchIndex.get(emojiId)\n\n                          return this.renderEmojiButton(emoji, {\n                            pos: [row.index, ii],\n                            posinset: row.posinset + ii,\n                            grid: this.grid,\n                          })\n                        })}\n                    </div>\n                  )\n                })}\n              </div>\n            </div>\n          )\n        })}\n      </div>\n    )\n  }\n\n  renderSkinToneButton() {\n    if (this.props.skinTonePosition == 'none') {\n      return null\n    }\n\n    return (\n      <div\n        class=\"flex flex-auto flex-center flex-middle\"\n        style={{\n          position: 'relative',\n          width: this.props.emojiButtonSize,\n          height: this.props.emojiButtonSize,\n        }}\n      >\n        <button\n          type=\"button\"\n          ref={this.refs.skinToneButton}\n          class=\"skin-tone-button flex flex-auto flex-center flex-middle\"\n          aria-selected={this.state.showSkins ? '' : undefined}\n          aria-label={I18n.skins.choose}\n          title={I18n.skins.choose}\n          onClick={this.openSkins}\n          style={{\n            width: this.props.emojiSize,\n            height: this.props.emojiSize,\n          }}\n        >\n          <span class={`skin-tone skin-tone-${this.state.skin}`}></span>\n        </button>\n      </div>\n    )\n  }\n\n  renderLiveRegion() {\n    const emoji = this.getEmojiByPos(this.state.pos)\n    const contents = emoji ? emoji.name : ''\n\n    return (\n      <div aria-live=\"polite\" class=\"sr-only\">\n        {contents}\n      </div>\n    )\n  }\n\n  renderSkins() {\n    const skinToneButton = this.refs.skinToneButton.current\n    const skinToneButtonRect = skinToneButton.getBoundingClientRect()\n    const baseRect = this.base.getBoundingClientRect()\n\n    const position = {}\n\n    if (this.dir == 'ltr') {\n      position.right = baseRect.right - skinToneButtonRect.right - 3\n    } else {\n      position.left = skinToneButtonRect.left - baseRect.left - 3\n    }\n\n    if (\n      this.props.previewPosition == 'bottom' &&\n      this.props.skinTonePosition == 'preview'\n    ) {\n      position.bottom = baseRect.bottom - skinToneButtonRect.top + 6\n    } else {\n      position.top = skinToneButtonRect.bottom - baseRect.top + 3\n      position.bottom = 'auto'\n    }\n\n    return (\n      <div\n        ref={this.refs.menu}\n        role=\"radiogroup\"\n        dir={this.dir}\n        aria-label={I18n.skins.choose}\n        class=\"menu hidden\"\n        data-position={position.top ? 'top' : 'bottom'}\n        style={position}\n      >\n        {[...Array(6).keys()].map((i) => {\n          const skin = i + 1\n          const checked = this.state.skin == skin\n\n          return (\n            <div>\n              <input\n                type=\"radio\"\n                name=\"skin-tone\"\n                value={skin}\n                aria-label={I18n.skins[skin]}\n                ref={checked ? this.refs.skinToneRadio : null}\n                defaultChecked={checked}\n                onChange={() => this.handleSkinMouseOver(skin)}\n                onKeyDown={(e) => {\n                  if (\n                    e.code == 'Enter' ||\n                    e.code == 'Space' ||\n                    e.code == 'Tab'\n                  ) {\n                    e.preventDefault()\n                    this.handleSkinClick(skin)\n                  }\n                }}\n              ></input>\n\n              <button\n                aria-hidden=\"true\"\n                tabindex=\"-1\"\n                onClick={() => this.handleSkinClick(skin)}\n                onMouseEnter={() => this.handleSkinMouseOver(skin)}\n                onMouseLeave={() => this.handleSkinMouseOver()}\n                class=\"option flex flex-grow flex-middle\"\n              >\n                <span class={`skin-tone skin-tone-${skin}`}></span>\n                <span class=\"margin-small-lr\">{I18n.skins[skin]}</span>\n              </button>\n            </div>\n          )\n        })}\n      </div>\n    )\n  }\n\n  render() {\n    return (\n      <section\n        id=\"root\"\n        class=\"flex flex-column\"\n        style={{\n          width: this.props.perLine * this.props.emojiButtonSize + (12 + 16),\n        }}\n        data-emoji-set={this.props.set}\n        data-theme={this.state.theme}\n        data-menu={this.state.showSkins ? '' : undefined}\n      >\n        {this.props.previewPosition == 'top' && this.renderPreview()}\n        {this.props.navPosition == 'top' && this.renderNav()}\n        {this.props.searchPosition == 'sticky' && (\n          <div class=\"padding-lr\">{this.renderSearch()}</div>\n        )}\n\n        <div ref={this.refs.scroll} class=\"scroll flex-grow padding-lr\">\n          <div\n            style={{\n              width: this.props.perLine * this.props.emojiButtonSize,\n            }}\n          >\n            {this.props.searchPosition == 'static' && this.renderSearch()}\n            {this.renderSearchResults()}\n            {this.renderCategories()}\n\n            <div class=\"spacer\"></div>\n          </div>\n        </div>\n\n        {this.props.navPosition == 'bottom' && this.renderNav()}\n        {this.props.previewPosition == 'bottom' && this.renderPreview()}\n        {this.state.showSkins && this.renderSkins()}\n        {this.renderLiveRegion()}\n      </section>\n    )\n  }\n}\n", "export { default as applyDecoratedDescriptor } from './_apply_decorated_descriptor';\nexport { default as arrayWithHoles } from './_array_with_holes';\nexport { default as arrayWithoutHoles } from './_array_without_holes';\nexport { default as assertThisInitialized } from './_assert_this_initialized';\nexport { default as asyncGenerator } from './_async_generator';\nexport { default as asyncGeneratorDelegate } from './_async_generator_delegate';\nexport { default as asyncIterator } from './_async_iterator';\nexport { default as asyncToGenerator } from './_async_to_generator';\nexport { default as awaitAsyncGenerator } from './_await_async_generator';\nexport { default as awaitValue } from './_await_value';\nexport { default as classCallCheck } from './_class_call_check';\nexport { default as classNameTDZError } from './_class_name_tdz_error';\nexport { default as classPrivateFieldGet } from './_class_private_field_get';\nexport { default as classPrivateFieldLooseBase } from './_class_private_field_loose_base';\nexport { default as classPrivateFieldSet } from './_class_private_field_set';\nexport { default as classPrivateMethodGet } from './_class_private_method_get';\nexport { default as classPrivateMethodSet } from './_class_private_method_set';\nexport { default as classStaticPrivateFieldSpecGet } from './_class_static_private_field_spec_get';\nexport { default as classStaticPrivateFieldSpecSet } from './_class_static_private_field_spec_set';\nexport { default as construct } from './_construct';\nexport { default as createClass } from './_create_class';\nexport { default as decorate } from './_decorate';\nexport { default as defaults } from './_defaults';\nexport { default as defineEnumerableProperties } from './_define_enumerable_properties';\nexport { default as defineProperty } from './_define_property';\nexport { default as extends } from './_extends';\nexport { default as get } from './_get';\nexport { default as getPrototypeOf } from './_get_prototype_of';\nexport { default as inherits } from './_inherits';\nexport { default as inheritsLoose } from './_inherits_loose';\nexport { default as initializerDefineProperty } from './_initializer_define_property';\nexport { default as initializerWarningHelper } from './_initializer_warning_helper';\nexport { default as _instanceof } from './_instanceof';\nexport { default as interopRequireDefault } from './_interop_require_default';\nexport { default as interopRequireWildcard } from './_interop_require_wildcard';\nexport { default as isNativeFunction } from './_is_native_function';\nexport { default as iterableToArray } from './_iterable_to_array';\nexport { default as iterableToArrayLimit } from './_iterable_to_array_limit';\nexport { default as iterableToArrayLimitLoose } from './_iterable_to_array_limit_loose';\nexport { default as jsx } from './_jsx';\nexport { default as newArrowCheck } from './_new_arrow_check';\nexport { default as nonIterableRest } from './_non_iterable_rest';\nexport { default as nonIterableSpread } from './_non_iterable_spread';\nexport { default as objectSpread } from './_object_spread';\nexport { default as objectWithoutProperties } from './_object_without_properties';\nexport { default as objectWithoutPropertiesLoose } from './_object_without_properties_loose';\nexport { default as possibleConstructorReturn } from './_possible_constructor_return';\nexport { default as readOnlyError } from './_read_only_error';\nexport { default as set } from './_set';\nexport { default as setPrototypeOf } from './_set_prototype_of';\nexport { default as skipFirstGeneratorNext } from './_skip_first_generator_next';\nexport { default as slicedToArray } from './_sliced_to_array';\nexport { default as slicedToArrayLoose } from './_sliced_to_array_loose';\nexport { default as superPropBase } from './_super_prop_base';\nexport { default as taggedTemplateLiteral } from './_tagged_template_literal';\nexport { default as taggedTemplateLiteralLoose } from './_tagged_template_literal_loose';\nexport { default as _throw } from './_throw';\nexport { default as toArray } from './_to_array';\nexport { default as toConsumableArray } from './_to_consumable_array';\nexport { default as toPrimitive } from './_to_primitive';\nexport { default as toPropertyKey } from './_to_property_key';\nexport { default as typeOf } from './_type_of';\nexport { default as wrapAsyncGenerator } from './_wrap_async_generator';\nexport { default as wrapNativeSuper } from './_wrap_native_super';\nexport { default as createSuper } from './_create_super';\nexport { default as isNativeReflectConstruct } from './_is_native_reflect_construct';\n", "export default function _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n", "import{options as r,Fragment as _}from\"preact\";export{Fragment}from\"preact\";var o=0;function e(_,e,n,t,f){var l,s,u={};for(s in e)\"ref\"==s?l=e[s]:u[s]=e[s];var a={type:_,props:u,key:n,ref:l,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:--o,__source:t,__self:f};if(\"function\"==typeof _&&(l=_.defaultProps))for(s in l)void 0===u[s]&&(u[s]=l[s]);return r.vnode&&r.vnode(a),a}export{e as jsx,e as jsxs,e as jsxDEV};\n//# sourceMappingURL=jsxRuntime.module.js.map\n", "import { options, Fragment } from 'preact';\r\n\r\n/** @typedef {import('preact').VNode} VNode */\r\n\r\nlet vnodeId = 0;\r\n\r\n/**\r\n * @fileoverview\r\n * This file exports various methods that implement Babel's \"automatic\" JSX runtime API:\r\n * - jsx(type, props, key)\r\n * - jsxs(type, props, key)\r\n * - jsxDEV(type, props, key, __source, __self)\r\n *\r\n * The implementation of createVNode here is optimized for performance.\r\n * Benchmarks: https://esbench.com/bench/5f6b54a0b4632100a7dcd2b3\r\n */\r\n\r\n/**\r\n * JSX.Element factory used by Babel's {runtime:\"automatic\"} JSX transform\r\n * @param {VNode['type']} type\r\n * @param {VNode['props']} props\r\n * @param {VNode['key']} [key]\r\n * @param {string} [__source]\r\n * @param {string} [__self]\r\n */\r\nfunction createVNode(type, props, key, __source, __self) {\r\n\t// We'll want to preserve `ref` in props to get rid of the need for\r\n\t// forwardRef components in the future, but that should happen via\r\n\t// a separate PR.\r\n\tlet normalizedProps = {},\r\n\t\tref,\r\n\t\ti;\r\n\tfor (i in props) {\r\n\t\tif (i == 'ref') {\r\n\t\t\tref = props[i];\r\n\t\t} else {\r\n\t\t\tnormalizedProps[i] = props[i];\r\n\t\t}\r\n\t}\r\n\r\n\tconst vnode = {\r\n\t\ttype,\r\n\t\tprops: normalizedProps,\r\n\t\tkey,\r\n\t\tref,\r\n\t\t_children: null,\r\n\t\t_parent: null,\r\n\t\t_depth: 0,\r\n\t\t_dom: null,\r\n\t\t_nextDom: undefined,\r\n\t\t_component: null,\r\n\t\t_hydrating: null,\r\n\t\tconstructor: undefined,\r\n\t\t_original: --vnodeId,\r\n\t\t__source,\r\n\t\t__self\r\n\t};\r\n\r\n\t// If a Component VNode, check for and apply defaultProps.\r\n\t// Note: `type` is often a String, and can be `undefined` in development.\r\n\tif (typeof type === 'function' && (ref = type.defaultProps)) {\r\n\t\tfor (i in ref)\r\n\t\t\tif (typeof normalizedProps[i] === 'undefined') {\r\n\t\t\t\tnormalizedProps[i] = ref[i];\r\n\t\t\t}\r\n\t}\r\n\r\n\tif (options.vnode) options.vnode(vnode);\r\n\treturn vnode;\r\n}\r\n\r\nexport {\r\n\tcreateVNode as jsx,\r\n\tcreateVNode as jsxs,\r\n\tcreateVNode as jsxDEV,\r\n\tFragment\r\n};\r\n", "var n,l,u,i,t,r,o,f,e={},c=[],s=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function a(n,l){for(var u in l)n[u]=l[u];return n}function h(n){var l=n.parentNode;l&&l.removeChild(n)}function v(l,u,i){var t,r,o,f={};for(o in u)\"key\"==o?t=u[o]:\"ref\"==o?r=u[o]:f[o]=u[o];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):i),\"function\"==typeof l&&null!=l.defaultProps)for(o in l.defaultProps)void 0===f[o]&&(f[o]=l.defaultProps[o]);return y(l,f,t,r,null)}function y(n,i,t,r,o){var f={type:n,props:i,key:t,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++u:o};return null==o&&null!=l.vnode&&l.vnode(f),f}function p(){return{current:null}}function d(n){return n.children}function _(n,l){this.props=n,this.context=l}function k(n,l){if(null==l)return n.__?k(n.__,n.__.__k.indexOf(n)+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return\"function\"==typeof n.type?k(n):null}function b(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return b(n)}}function m(n){(!n.__d&&(n.__d=!0)&&t.push(n)&&!g.__r++||o!==l.debounceRendering)&&((o=l.debounceRendering)||r)(g)}function g(){for(var n;g.__r=t.length;)n=t.sort(function(n,l){return n.__v.__b-l.__v.__b}),t=[],n.some(function(n){var l,u,i,t,r,o;n.__d&&(r=(t=(l=n).__v).__e,(o=l.__P)&&(u=[],(i=a({},t)).__v=t.__v+1,j(o,t,i,l.__n,void 0!==o.ownerSVGElement,null!=t.__h?[r]:null,u,null==r?k(t):r,t.__h),z(u,t),t.__e!=r&&b(t)))})}function w(n,l,u,i,t,r,o,f,s,a){var h,v,p,_,b,m,g,w=i&&i.__k||c,A=w.length;for(u.__k=[],h=0;h<l.length;h++)if(null!=(_=u.__k[h]=null==(_=l[h])||\"boolean\"==typeof _?null:\"string\"==typeof _||\"number\"==typeof _||\"bigint\"==typeof _?y(null,_,null,null,_):Array.isArray(_)?y(d,{children:_},null,null,null):_.__b>0?y(_.type,_.props,_.key,null,_.__v):_)){if(_.__=u,_.__b=u.__b+1,null===(p=w[h])||p&&_.key==p.key&&_.type===p.type)w[h]=void 0;else for(v=0;v<A;v++){if((p=w[v])&&_.key==p.key&&_.type===p.type){w[v]=void 0;break}p=null}j(n,_,p=p||e,t,r,o,f,s,a),b=_.__e,(v=_.ref)&&p.ref!=v&&(g||(g=[]),p.ref&&g.push(p.ref,null,_),g.push(v,_.__c||b,_)),null!=b?(null==m&&(m=b),\"function\"==typeof _.type&&_.__k===p.__k?_.__d=s=x(_,s,n):s=P(n,_,p,w,b,s),\"function\"==typeof u.type&&(u.__d=s)):s&&p.__e==s&&s.parentNode!=n&&(s=k(p))}for(u.__e=m,h=A;h--;)null!=w[h]&&(\"function\"==typeof u.type&&null!=w[h].__e&&w[h].__e==u.__d&&(u.__d=k(i,h+1)),N(w[h],w[h]));if(g)for(h=0;h<g.length;h++)M(g[h],g[++h],g[++h])}function x(n,l,u){for(var i,t=n.__k,r=0;t&&r<t.length;r++)(i=t[r])&&(i.__=n,l=\"function\"==typeof i.type?x(i,l,u):P(u,i,i,t,i.__e,l));return l}function A(n,l){return l=l||[],null==n||\"boolean\"==typeof n||(Array.isArray(n)?n.some(function(n){A(n,l)}):l.push(n)),l}function P(n,l,u,i,t,r){var o,f,e;if(void 0!==l.__d)o=l.__d,l.__d=void 0;else if(null==u||t!=r||null==t.parentNode)n:if(null==r||r.parentNode!==n)n.appendChild(t),o=null;else{for(f=r,e=0;(f=f.nextSibling)&&e<i.length;e+=2)if(f==t)break n;n.insertBefore(t,r),o=r}return void 0!==o?o:t.nextSibling}function C(n,l,u,i,t){var r;for(r in u)\"children\"===r||\"key\"===r||r in l||H(n,r,null,u[r],i);for(r in l)t&&\"function\"!=typeof l[r]||\"children\"===r||\"key\"===r||\"value\"===r||\"checked\"===r||u[r]===l[r]||H(n,r,l[r],u[r],i)}function $(n,l,u){\"-\"===l[0]?n.setProperty(l,u):n[l]=null==u?\"\":\"number\"!=typeof u||s.test(l)?u:u+\"px\"}function H(n,l,u,i,t){var r;n:if(\"style\"===l)if(\"string\"==typeof u)n.style.cssText=u;else{if(\"string\"==typeof i&&(n.style.cssText=i=\"\"),i)for(l in i)u&&l in u||$(n.style,l,\"\");if(u)for(l in u)i&&u[l]===i[l]||$(n.style,l,u[l])}else if(\"o\"===l[0]&&\"n\"===l[1])r=l!==(l=l.replace(/Capture$/,\"\")),l=l.toLowerCase()in n?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+r]=u,u?i||n.addEventListener(l,r?T:I,r):n.removeEventListener(l,r?T:I,r);else if(\"dangerouslySetInnerHTML\"!==l){if(t)l=l.replace(/xlink[H:h]/,\"h\").replace(/sName$/,\"s\");else if(\"href\"!==l&&\"list\"!==l&&\"form\"!==l&&\"tabIndex\"!==l&&\"download\"!==l&&l in n)try{n[l]=null==u?\"\":u;break n}catch(n){}\"function\"==typeof u||(null!=u&&(!1!==u||\"a\"===l[0]&&\"r\"===l[1])?n.setAttribute(l,u):n.removeAttribute(l))}}function I(n){this.l[n.type+!1](l.event?l.event(n):n)}function T(n){this.l[n.type+!0](l.event?l.event(n):n)}function j(n,u,i,t,r,o,f,e,c){var s,h,v,y,p,k,b,m,g,x,A,P=u.type;if(void 0!==u.constructor)return null;null!=i.__h&&(c=i.__h,e=u.__e=i.__e,u.__h=null,o=[e]),(s=l.__b)&&s(u);try{n:if(\"function\"==typeof P){if(m=u.props,g=(s=P.contextType)&&t[s.__c],x=s?g?g.props.value:s.__:t,i.__c?b=(h=u.__c=i.__c).__=h.__E:(\"prototype\"in P&&P.prototype.render?u.__c=h=new P(m,x):(u.__c=h=new _(m,x),h.constructor=P,h.render=O),g&&g.sub(h),h.props=m,h.state||(h.state={}),h.context=x,h.__n=t,v=h.__d=!0,h.__h=[]),null==h.__s&&(h.__s=h.state),null!=P.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=a({},h.__s)),a(h.__s,P.getDerivedStateFromProps(m,h.__s))),y=h.props,p=h.state,v)null==P.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else{if(null==P.getDerivedStateFromProps&&m!==y&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(m,x),!h.__e&&null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(m,h.__s,x)||u.__v===i.__v){h.props=m,h.state=h.__s,u.__v!==i.__v&&(h.__d=!1),h.__v=u,u.__e=i.__e,u.__k=i.__k,u.__k.forEach(function(n){n&&(n.__=u)}),h.__h.length&&f.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(m,h.__s,x),null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(y,p,k)})}h.context=x,h.props=m,h.state=h.__s,(s=l.__r)&&s(u),h.__d=!1,h.__v=u,h.__P=n,s=h.render(h.props,h.state,h.context),h.state=h.__s,null!=h.getChildContext&&(t=a(a({},t),h.getChildContext())),v||null==h.getSnapshotBeforeUpdate||(k=h.getSnapshotBeforeUpdate(y,p)),A=null!=s&&s.type===d&&null==s.key?s.props.children:s,w(n,Array.isArray(A)?A:[A],u,i,t,r,o,f,e,c),h.base=u.__e,u.__h=null,h.__h.length&&f.push(h),b&&(h.__E=h.__=null),h.__e=!1}else null==o&&u.__v===i.__v?(u.__k=i.__k,u.__e=i.__e):u.__e=L(i.__e,u,i,t,r,o,f,c);(s=l.diffed)&&s(u)}catch(n){u.__v=null,(c||null!=o)&&(u.__e=e,u.__h=!!c,o[o.indexOf(e)]=null),l.__e(n,u,i)}}function z(n,u){l.__c&&l.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u)})}catch(n){l.__e(n,u.__v)}})}function L(l,u,i,t,r,o,f,c){var s,a,v,y=i.props,p=u.props,d=u.type,_=0;if(\"svg\"===d&&(r=!0),null!=o)for(;_<o.length;_++)if((s=o[_])&&\"setAttribute\"in s==!!d&&(d?s.localName===d:3===s.nodeType)){l=s,o[_]=null;break}if(null==l){if(null===d)return document.createTextNode(p);l=r?document.createElementNS(\"http://www.w3.org/2000/svg\",d):document.createElement(d,p.is&&p),o=null,c=!1}if(null===d)y===p||c&&l.data===p||(l.data=p);else{if(o=o&&n.call(l.childNodes),a=(y=i.props||e).dangerouslySetInnerHTML,v=p.dangerouslySetInnerHTML,!c){if(null!=o)for(y={},_=0;_<l.attributes.length;_++)y[l.attributes[_].name]=l.attributes[_].value;(v||a)&&(v&&(a&&v.__html==a.__html||v.__html===l.innerHTML)||(l.innerHTML=v&&v.__html||\"\"))}if(C(l,p,y,r,c),v)u.__k=[];else if(_=u.props.children,w(l,Array.isArray(_)?_:[_],u,i,t,r&&\"foreignObject\"!==d,o,f,o?o[0]:i.__k&&k(i,0),c),null!=o)for(_=o.length;_--;)null!=o[_]&&h(o[_]);c||(\"value\"in p&&void 0!==(_=p.value)&&(_!==y.value||_!==l.value||\"progress\"===d&&!_)&&H(l,\"value\",_,y.value,!1),\"checked\"in p&&void 0!==(_=p.checked)&&_!==l.checked&&H(l,\"checked\",_,y.checked,!1))}return l}function M(n,u,i){try{\"function\"==typeof n?n(u):n.current=u}catch(n){l.__e(n,i)}}function N(n,u,i){var t,r;if(l.unmount&&l.unmount(n),(t=n.ref)&&(t.current&&t.current!==n.__e||M(t,null,u)),null!=(t=n.__c)){if(t.componentWillUnmount)try{t.componentWillUnmount()}catch(n){l.__e(n,u)}t.base=t.__P=null}if(t=n.__k)for(r=0;r<t.length;r++)t[r]&&N(t[r],u,\"function\"!=typeof n.type);i||null==n.__e||h(n.__e),n.__e=n.__d=void 0}function O(n,l,u){return this.constructor(n,u)}function S(u,i,t){var r,o,f;l.__&&l.__(u,i),o=(r=\"function\"==typeof t)?null:t&&t.__k||i.__k,f=[],j(i,u=(!r&&t||i).__k=v(d,null,[u]),o||e,e,void 0!==i.ownerSVGElement,!r&&t?[t]:o?null:i.firstChild?n.call(i.childNodes):null,f,!r&&t?t:o?o.__e:i.firstChild,r),z(f,u)}function q(n,l){S(n,l,q)}function B(l,u,i){var t,r,o,f=a({},l.props);for(o in u)\"key\"==o?t=u[o]:\"ref\"==o?r=u[o]:f[o]=u[o];return arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):i),y(l.type,f,t||l.key,r||l.ref,null)}function D(n,l){var u={__c:l=\"__cC\"+f++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,i;return this.getChildContext||(u=[],(i={})[l]=this,this.getChildContext=function(){return i},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(m)},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u.splice(u.indexOf(n),1),l&&l.call(n)}}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=c.slice,l={__e:function(n,l){for(var u,i,t;l=l.__;)if((u=l.__c)&&!u.__)try{if((i=u.constructor)&&null!=i.getDerivedStateFromError&&(u.setState(i.getDerivedStateFromError(n)),t=u.__d),null!=u.componentDidCatch&&(u.componentDidCatch(n),t=u.__d),t)return u.__E=u}catch(l){n=l}throw n}},u=0,i=function(n){return null!=n&&void 0===n.constructor},_.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=a({},this.state),\"function\"==typeof n&&(n=n(a({},u),this.props)),n&&a(u,n),null!=n&&this.__v&&(l&&this.__h.push(l),m(this))},_.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),m(this))},_.prototype.render=d,t=[],r=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,g.__r=0,f=0;export{S as render,q as hydrate,v as createElement,v as h,d as Fragment,p as createRef,i as isValidElement,_ as Component,B as cloneElement,D as createContext,A as toChildArray,l as options};\n//# sourceMappingURL=preact.module.js.map\n", "export const EMPTY_OBJ = {};\r\nexport const EMPTY_ARR = [];\r\nexport const IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;\r\n", "import { EMPTY_ARR } from \"./constants\";\r\n\r\n/**\r\n * Assign properties from `props` to `obj`\r\n * @template O, P The obj and props types\r\n * @param {O} obj The object to copy properties to\r\n * @param {P} props The object to copy properties from\r\n * @returns {O & P}\r\n */\r\nexport function assign(obj, props) {\r\n\t// @ts-ignore We change the type of `obj` to be `O & P`\r\n\tfor (let i in props) obj[i] = props[i];\r\n\treturn /** @type {O & P} */ (obj);\r\n}\r\n\r\n/**\r\n * Remove a child node from its parent if attached. This is a workaround for\r\n * IE11 which doesn't support `Element.prototype.remove()`. Using this function\r\n * is smaller than including a dedicated polyfill.\r\n * @param {Node} node The node to remove\r\n */\r\nexport function removeNode(node) {\r\n\tlet parentNode = node.parentNode;\r\n\tif (parentNode) parentNode.removeChild(node);\r\n}\r\n\r\nexport const slice = EMPTY_ARR.slice;\r\n", "import { _catchError } from './diff/catch-error';\r\n\r\n/**\r\n * The `option` object can potentially contain callback functions\r\n * that are called during various stages of our renderer. This is the\r\n * foundation on which all our addons like `preact/debug`, `preact/compat`,\r\n * and `preact/hooks` are based on. See the `Options` type in `internal.d.ts`\r\n * for a full list of available option hooks (most editors/IDEs allow you to\r\n * ctrl+click or cmd+click on mac the type definition below).\r\n * @type {import('./internal').Options}\r\n */\r\nconst options = {\r\n\t_catchError\r\n};\r\n\r\nexport default options;\r\n", "import { slice } from './util';\r\nimport options from './options';\r\n\r\nlet vnodeId = 0;\r\n\r\n/**\r\n * Create an virtual node (used for JSX)\r\n * @param {import('./internal').VNode[\"type\"]} type The node name or Component\r\n * constructor for this virtual node\r\n * @param {object | null | undefined} [props] The properties of the virtual node\r\n * @param {Array<import('.').ComponentChildren>} [children] The children of the virtual node\r\n * @returns {import('./internal').VNode}\r\n */\r\nexport function createElement(type, props, children) {\r\n\tlet normalizedProps = {},\r\n\t\tkey,\r\n\t\tref,\r\n\t\ti;\r\n\tfor (i in props) {\r\n\t\tif (i == 'key') key = props[i];\r\n\t\telse if (i == 'ref') ref = props[i];\r\n\t\telse normalizedProps[i] = props[i];\r\n\t}\r\n\r\n\tif (arguments.length > 2) {\r\n\t\tnormalizedProps.children =\r\n\t\t\targuments.length > 3 ? slice.call(arguments, 2) : children;\r\n\t}\r\n\r\n\t// If a Component VNode, check for and apply defaultProps\r\n\t// Note: type may be undefined in development, must never error here.\r\n\tif (typeof type == 'function' && type.defaultProps != null) {\r\n\t\tfor (i in type.defaultProps) {\r\n\t\t\tif (normalizedProps[i] === undefined) {\r\n\t\t\t\tnormalizedProps[i] = type.defaultProps[i];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn createVNode(type, normalizedProps, key, ref, null);\r\n}\r\n\r\n/**\r\n * Create a VNode (used internally by Preact)\r\n * @param {import('./internal').VNode[\"type\"]} type The node name or Component\r\n * Constructor for this virtual node\r\n * @param {object | string | number | null} props The properties of this virtual node.\r\n * If this virtual node represents a text node, this is the text of the node (string or number).\r\n * @param {string | number | null} key The key for this virtual node, used when\r\n * diffing it against its children\r\n * @param {import('./internal').VNode[\"ref\"]} ref The ref property that will\r\n * receive a reference to its created child\r\n * @returns {import('./internal').VNode}\r\n */\r\nexport function createVNode(type, props, key, ref, original) {\r\n\t// V8 seems to be better at detecting type shapes if the object is allocated from the same call site\r\n\t// Do not inline into createElement and coerceToVNode!\r\n\tconst vnode = {\r\n\t\ttype,\r\n\t\tprops,\r\n\t\tkey,\r\n\t\tref,\r\n\t\t_children: null,\r\n\t\t_parent: null,\r\n\t\t_depth: 0,\r\n\t\t_dom: null,\r\n\t\t// _nextDom must be initialized to undefined b/c it will eventually\r\n\t\t// be set to dom.nextSibling which can return `null` and it is important\r\n\t\t// to be able to distinguish between an uninitialized _nextDom and\r\n\t\t// a _nextDom that has been set to `null`\r\n\t\t_nextDom: undefined,\r\n\t\t_component: null,\r\n\t\t_hydrating: null,\r\n\t\tconstructor: undefined,\r\n\t\t_original: original == null ? ++vnodeId : original\r\n\t};\r\n\r\n\t// Only invoke the vnode hook if this was *not* a direct copy:\r\n\tif (original == null && options.vnode != null) options.vnode(vnode);\r\n\r\n\treturn vnode;\r\n}\r\n\r\nexport function createRef() {\r\n\treturn { current: null };\r\n}\r\n\r\nexport function Fragment(props) {\r\n\treturn props.children;\r\n}\r\n\r\n/**\r\n * Check if a the argument is a valid Preact VNode.\r\n * @param {*} vnode\r\n * @returns {vnode is import('./internal').VNode}\r\n */\r\nexport const isValidElement = vnode =>\r\n\tvnode != null && vnode.constructor === undefined;\r\n", "import { assign } from './util';\r\nimport { diff, commitRoot } from './diff/index';\r\nimport options from './options';\r\nimport { Fragment } from './create-element';\r\n\r\n/**\r\n * Base Component class. Provides `setState()` and `forceUpdate()`, which\r\n * trigger rendering\r\n * @param {object} props The initial component props\r\n * @param {object} context The initial context from parent components'\r\n * getChildContext\r\n */\r\nexport function Component(props, context) {\r\n\tthis.props = props;\r\n\tthis.context = context;\r\n}\r\n\r\n/**\r\n * Update component state and schedule a re-render.\r\n * @this {import('./internal').Component}\r\n * @param {object | ((s: object, p: object) => object)} update A hash of state\r\n * properties to update with new values or a function that given the current\r\n * state and props returns a new partial state\r\n * @param {() => void} [callback] A function to be called once component state is\r\n * updated\r\n */\r\nComponent.prototype.setState = function(update, callback) {\r\n\t// only clone state when copying to nextState the first time.\r\n\tlet s;\r\n\tif (this._nextState != null && this._nextState !== this.state) {\r\n\t\ts = this._nextState;\r\n\t} else {\r\n\t\ts = this._nextState = assign({}, this.state);\r\n\t}\r\n\r\n\tif (typeof update == 'function') {\r\n\t\t// Some libraries like `immer` mark the current state as readonly,\r\n\t\t// preventing us from mutating it, so we need to clone it. See #2716\r\n\t\tupdate = update(assign({}, s), this.props);\r\n\t}\r\n\r\n\tif (update) {\r\n\t\tassign(s, update);\r\n\t}\r\n\r\n\t// Skip update if updater function returned null\r\n\tif (update == null) return;\r\n\r\n\tif (this._vnode) {\r\n\t\tif (callback) this._renderCallbacks.push(callback);\r\n\t\tenqueueRender(this);\r\n\t}\r\n};\r\n\r\n/**\r\n * Immediately perform a synchronous re-render of the component\r\n * @this {import('./internal').Component}\r\n * @param {() => void} [callback] A function to be called after component is\r\n * re-rendered\r\n */\r\nComponent.prototype.forceUpdate = function(callback) {\r\n\tif (this._vnode) {\r\n\t\t// Set render mode so that we can differentiate where the render request\r\n\t\t// is coming from. We need this because forceUpdate should never call\r\n\t\t// shouldComponentUpdate\r\n\t\tthis._force = true;\r\n\t\tif (callback) this._renderCallbacks.push(callback);\r\n\t\tenqueueRender(this);\r\n\t}\r\n};\r\n\r\n/**\r\n * Accepts `props` and `state`, and returns a new Virtual DOM tree to build.\r\n * Virtual DOM is generally constructed via [JSX](http://jasonformat.com/wtf-is-jsx).\r\n * @param {object} props Props (eg: JSX attributes) received from parent\r\n * element/component\r\n * @param {object} state The component's current state\r\n * @param {object} context Context object, as returned by the nearest\r\n * ancestor's `getChildContext()`\r\n * @returns {import('./index').ComponentChildren | void}\r\n */\r\nComponent.prototype.render = Fragment;\r\n\r\n/**\r\n * @param {import('./internal').VNode} vnode\r\n * @param {number | null} [childIndex]\r\n */\r\nexport function getDomSibling(vnode, childIndex) {\r\n\tif (childIndex == null) {\r\n\t\t// Use childIndex==null as a signal to resume the search from the vnode's sibling\r\n\t\treturn vnode._parent\r\n\t\t\t? getDomSibling(vnode._parent, vnode._parent._children.indexOf(vnode) + 1)\r\n\t\t\t: null;\r\n\t}\r\n\r\n\tlet sibling;\r\n\tfor (; childIndex < vnode._children.length; childIndex++) {\r\n\t\tsibling = vnode._children[childIndex];\r\n\r\n\t\tif (sibling != null && sibling._dom != null) {\r\n\t\t\t// Since updateParentDomPointers keeps _dom pointer correct,\r\n\t\t\t// we can rely on _dom to tell us if this subtree contains a\r\n\t\t\t// rendered DOM node, and what the first rendered DOM node is\r\n\t\t\treturn sibling._dom;\r\n\t\t}\r\n\t}\r\n\r\n\t// If we get here, we have not found a DOM node in this vnode's children.\r\n\t// We must resume from this vnode's sibling (in it's parent _children array)\r\n\t// Only climb up and search the parent if we aren't searching through a DOM\r\n\t// VNode (meaning we reached the DOM parent of the original vnode that began\r\n\t// the search)\r\n\treturn typeof vnode.type == 'function' ? getDomSibling(vnode) : null;\r\n}\r\n\r\n/**\r\n * Trigger in-place re-rendering of a component.\r\n * @param {import('./internal').Component} component The component to rerender\r\n */\r\nfunction renderComponent(component) {\r\n\tlet vnode = component._vnode,\r\n\t\toldDom = vnode._dom,\r\n\t\tparentDom = component._parentDom;\r\n\r\n\tif (parentDom) {\r\n\t\tlet commitQueue = [];\r\n\t\tconst oldVNode = assign({}, vnode);\r\n\t\toldVNode._original = vnode._original + 1;\r\n\r\n\t\tdiff(\r\n\t\t\tparentDom,\r\n\t\t\tvnode,\r\n\t\t\toldVNode,\r\n\t\t\tcomponent._globalContext,\r\n\t\t\tparentDom.ownerSVGElement !== undefined,\r\n\t\t\tvnode._hydrating != null ? [oldDom] : null,\r\n\t\t\tcommitQueue,\r\n\t\t\toldDom == null ? getDomSibling(vnode) : oldDom,\r\n\t\t\tvnode._hydrating\r\n\t\t);\r\n\t\tcommitRoot(commitQueue, vnode);\r\n\r\n\t\tif (vnode._dom != oldDom) {\r\n\t\t\tupdateParentDomPointers(vnode);\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * @param {import('./internal').VNode} vnode\r\n */\r\nfunction updateParentDomPointers(vnode) {\r\n\tif ((vnode = vnode._parent) != null && vnode._component != null) {\r\n\t\tvnode._dom = vnode._component.base = null;\r\n\t\tfor (let i = 0; i < vnode._children.length; i++) {\r\n\t\t\tlet child = vnode._children[i];\r\n\t\t\tif (child != null && child._dom != null) {\r\n\t\t\t\tvnode._dom = vnode._component.base = child._dom;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn updateParentDomPointers(vnode);\r\n\t}\r\n}\r\n\r\n/**\r\n * The render queue\r\n * @type {Array<import('./internal').Component>}\r\n */\r\nlet rerenderQueue = [];\r\n\r\n/**\r\n * Asynchronously schedule a callback\r\n * @type {(cb: () => void) => void}\r\n */\r\n/* istanbul ignore next */\r\n// Note the following line isn't tree-shaken by rollup cuz of rollup/rollup#2566\r\nconst defer =\r\n\ttypeof Promise == 'function'\r\n\t\t? Promise.prototype.then.bind(Promise.resolve())\r\n\t\t: setTimeout;\r\n\r\n/*\r\n * The value of `Component.debounce` must asynchronously invoke the passed in callback. It is\r\n * important that contributors to Preact can consistently reason about what calls to `setState`, etc.\r\n * do, and when their effects will be applied. See the links below for some further reading on designing\r\n * asynchronous APIs.\r\n * * [Designing APIs for Asynchrony](https://blog.izs.me/2013/08/designing-apis-for-asynchrony)\r\n * * [Callbacks synchronous and asynchronous](https://blog.ometer.com/2011/07/24/callbacks-synchronous-and-asynchronous/)\r\n */\r\n\r\nlet prevDebounce;\r\n\r\n/**\r\n * Enqueue a rerender of a component\r\n * @param {import('./internal').Component} c The component to rerender\r\n */\r\nexport function enqueueRender(c) {\r\n\tif (\r\n\t\t(!c._dirty &&\r\n\t\t\t(c._dirty = true) &&\r\n\t\t\trerenderQueue.push(c) &&\r\n\t\t\t!process._rerenderCount++) ||\r\n\t\tprevDebounce !== options.debounceRendering\r\n\t) {\r\n\t\tprevDebounce = options.debounceRendering;\r\n\t\t(prevDebounce || defer)(process);\r\n\t}\r\n}\r\n\r\n/** Flush the render queue by rerendering all queued components */\r\nfunction process() {\r\n\tlet queue;\r\n\twhile ((process._rerenderCount = rerenderQueue.length)) {\r\n\t\tqueue = rerenderQueue.sort((a, b) => a._vnode._depth - b._vnode._depth);\r\n\t\trerenderQueue = [];\r\n\t\t// Don't update `renderCount` yet. Keep its value non-zero to prevent unnecessary\r\n\t\t// process() calls from getting scheduled while `queue` is still being consumed.\r\n\t\tqueue.some(c => {\r\n\t\t\tif (c._dirty) renderComponent(c);\r\n\t\t});\r\n\t}\r\n}\r\nprocess._rerenderCount = 0;\r\n", "import { enqueueRender } from './component';\r\n\r\nexport let i = 0;\r\n\r\nexport function createContext(defaultValue, contextId) {\r\n\tcontextId = '__cC' + i++;\r\n\r\n\tconst context = {\r\n\t\t_id: contextId,\r\n\t\t_defaultValue: defaultValue,\r\n\t\t/** @type {import('./internal').FunctionComponent} */\r\n\t\tConsumer(props, contextValue) {\r\n\t\t\t// return props.children(\r\n\t\t\t// \tcontext[contextId] ? context[contextId].props.value : defaultValue\r\n\t\t\t// );\r\n\t\t\treturn props.children(contextValue);\r\n\t\t},\r\n\t\t/** @type {import('./internal').FunctionComponent} */\r\n\t\tProvider(props) {\r\n\t\t\tif (!this.getChildContext) {\r\n\t\t\t\tlet subs = [];\r\n\t\t\t\tlet ctx = {};\r\n\t\t\t\tctx[contextId] = this;\r\n\r\n\t\t\t\tthis.getChildContext = () => ctx;\r\n\r\n\t\t\t\tthis.shouldComponentUpdate = function(_props) {\r\n\t\t\t\t\tif (this.props.value !== _props.value) {\r\n\t\t\t\t\t\t// I think the forced value propagation here was only needed when `options.debounceRendering` was being bypassed:\r\n\t\t\t\t\t\t// https://github.com/preactjs/preact/commit/4d339fb803bea09e9f198abf38ca1bf8ea4b7771#diff-54682ce380935a717e41b8bfc54737f6R358\r\n\t\t\t\t\t\t// In those cases though, even with the value corrected, we're double-rendering all nodes.\r\n\t\t\t\t\t\t// It might be better to just tell folks not to use force-sync mode.\r\n\t\t\t\t\t\t// Currently, using `useContext()` in a class component will overwrite its `this.context` value.\r\n\t\t\t\t\t\t// subs.some(c => {\r\n\t\t\t\t\t\t// \tc.context = _props.value;\r\n\t\t\t\t\t\t// \tenqueueRender(c);\r\n\t\t\t\t\t\t// });\r\n\r\n\t\t\t\t\t\t// subs.some(c => {\r\n\t\t\t\t\t\t// \tc.context[contextId] = _props.value;\r\n\t\t\t\t\t\t// \tenqueueRender(c);\r\n\t\t\t\t\t\t// });\r\n\t\t\t\t\t\tsubs.some(enqueueRender);\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tthis.sub = c => {\r\n\t\t\t\t\tsubs.push(c);\r\n\t\t\t\t\tlet old = c.componentWillUnmount;\r\n\t\t\t\t\tc.componentWillUnmount = () => {\r\n\t\t\t\t\t\tsubs.splice(subs.indexOf(c), 1);\r\n\t\t\t\t\t\tif (old) old.call(c);\r\n\t\t\t\t\t};\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\treturn props.children;\r\n\t\t}\r\n\t};\r\n\r\n\t// Devtools needs access to the context object when it\r\n\t// encounters a Provider. This is necessary to support\r\n\t// setting `displayName` on the context object instead\r\n\t// of on the component itself. See:\r\n\t// https://reactjs.org/docs/context.html#contextdisplayname\r\n\r\n\treturn (context.Provider._contextRef = context.Consumer.contextType = context);\r\n}\r\n", "import { diff, unmount, applyRef } from './index';\r\nimport { createVNode, Fragment } from '../create-element';\r\nimport { EMPTY_OBJ, EMPTY_ARR } from '../constants';\r\nimport { getDomSibling } from '../component';\r\n\r\n/**\r\n * Diff the children of a virtual node\r\n * @param {import('../internal').PreactElement} parentDom The DOM element whose\r\n * children are being diffed\r\n * @param {import('../internal').ComponentChildren[]} renderResult\r\n * @param {import('../internal').VNode} newParentVNode The new virtual\r\n * node whose children should be diff'ed against oldParentVNode\r\n * @param {import('../internal').VNode} oldParentVNode The old virtual\r\n * node whose children should be diff'ed against newParentVNode\r\n * @param {object} globalContext The current context object - modified by getChildContext\r\n * @param {boolean} isSvg Whether or not this DOM node is an SVG node\r\n * @param {Array<import('../internal').PreactElement>} excessDomChildren\r\n * @param {Array<import('../internal').Component>} commitQueue List of components\r\n * which have callbacks to invoke in commitRoot\r\n * @param {import('../internal').PreactElement} oldDom The current attached DOM\r\n * element any new dom elements should be placed around. Likely `null` on first\r\n * render (except when hydrating). Can be a sibling DOM element when diffing\r\n * Fragments that have siblings. In most cases, it starts out as `oldChildren[0]._dom`.\r\n * @param {boolean} isHydrating Whether or not we are in hydration\r\n */\r\nexport function diffChildren(\r\n\tparentDom,\r\n\trenderResult,\r\n\tnewParentVNode,\r\n\toldParentVNode,\r\n\tglobalContext,\r\n\tisSvg,\r\n\texcessDomChildren,\r\n\tcommitQueue,\r\n\toldDom,\r\n\tisHydrating\r\n) {\r\n\tlet i, j, oldVNode, childVNode, newDom, firstChildDom, refs;\r\n\r\n\t// This is a compression of oldParentVNode!=null && oldParentVNode != EMPTY_OBJ && oldParentVNode._children || EMPTY_ARR\r\n\t// as EMPTY_OBJ._children should be `undefined`.\r\n\tlet oldChildren = (oldParentVNode && oldParentVNode._children) || EMPTY_ARR;\r\n\r\n\tlet oldChildrenLength = oldChildren.length;\r\n\r\n\tnewParentVNode._children = [];\r\n\tfor (i = 0; i < renderResult.length; i++) {\r\n\t\tchildVNode = renderResult[i];\r\n\r\n\t\tif (childVNode == null || typeof childVNode == 'boolean') {\r\n\t\t\tchildVNode = newParentVNode._children[i] = null;\r\n\t\t}\r\n\t\t// If this newVNode is being reused (e.g. <div>{reuse}{reuse}</div>) in the same diff,\r\n\t\t// or we are rendering a component (e.g. setState) copy the oldVNodes so it can have\r\n\t\t// it's own DOM & etc. pointers\r\n\t\telse if (\r\n\t\t\ttypeof childVNode == 'string' ||\r\n\t\t\ttypeof childVNode == 'number' ||\r\n\t\t\t// eslint-disable-next-line valid-typeof\r\n\t\t\ttypeof childVNode == 'bigint'\r\n\t\t) {\r\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\r\n\t\t\t\tnull,\r\n\t\t\t\tchildVNode,\r\n\t\t\t\tnull,\r\n\t\t\t\tnull,\r\n\t\t\t\tchildVNode\r\n\t\t\t);\r\n\t\t} else if (Array.isArray(childVNode)) {\r\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\r\n\t\t\t\tFragment,\r\n\t\t\t\t{ children: childVNode },\r\n\t\t\t\tnull,\r\n\t\t\t\tnull,\r\n\t\t\t\tnull\r\n\t\t\t);\r\n\t\t} else if (childVNode._depth > 0) {\r\n\t\t\t// VNode is already in use, clone it. This can happen in the following\r\n\t\t\t// scenario:\r\n\t\t\t//   const reuse = <div />\r\n\t\t\t//   <div>{reuse}<span />{reuse}</div>\r\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\r\n\t\t\t\tchildVNode.type,\r\n\t\t\t\tchildVNode.props,\r\n\t\t\t\tchildVNode.key,\r\n\t\t\t\tnull,\r\n\t\t\t\tchildVNode._original\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\tchildVNode = newParentVNode._children[i] = childVNode;\r\n\t\t}\r\n\r\n\t\t// Terser removes the `continue` here and wraps the loop body\r\n\t\t// in a `if (childVNode) { ... } condition\r\n\t\tif (childVNode == null) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tchildVNode._parent = newParentVNode;\r\n\t\tchildVNode._depth = newParentVNode._depth + 1;\r\n\r\n\t\t// Check if we find a corresponding element in oldChildren.\r\n\t\t// If found, delete the array item by setting to `undefined`.\r\n\t\t// We use `undefined`, as `null` is reserved for empty placeholders\r\n\t\t// (holes).\r\n\t\toldVNode = oldChildren[i];\r\n\r\n\t\tif (\r\n\t\t\toldVNode === null ||\r\n\t\t\t(oldVNode &&\r\n\t\t\t\tchildVNode.key == oldVNode.key &&\r\n\t\t\t\tchildVNode.type === oldVNode.type)\r\n\t\t) {\r\n\t\t\toldChildren[i] = undefined;\r\n\t\t} else {\r\n\t\t\t// Either oldVNode === undefined or oldChildrenLength > 0,\r\n\t\t\t// so after this loop oldVNode == null or oldVNode is a valid value.\r\n\t\t\tfor (j = 0; j < oldChildrenLength; j++) {\r\n\t\t\t\toldVNode = oldChildren[j];\r\n\t\t\t\t// If childVNode is unkeyed, we only match similarly unkeyed nodes, otherwise we match by key.\r\n\t\t\t\t// We always match by type (in either case).\r\n\t\t\t\tif (\r\n\t\t\t\t\toldVNode &&\r\n\t\t\t\t\tchildVNode.key == oldVNode.key &&\r\n\t\t\t\t\tchildVNode.type === oldVNode.type\r\n\t\t\t\t) {\r\n\t\t\t\t\toldChildren[j] = undefined;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\toldVNode = null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\toldVNode = oldVNode || EMPTY_OBJ;\r\n\r\n\t\t// Morph the old element into the new one, but don't append it to the dom yet\r\n\t\tdiff(\r\n\t\t\tparentDom,\r\n\t\t\tchildVNode,\r\n\t\t\toldVNode,\r\n\t\t\tglobalContext,\r\n\t\t\tisSvg,\r\n\t\t\texcessDomChildren,\r\n\t\t\tcommitQueue,\r\n\t\t\toldDom,\r\n\t\t\tisHydrating\r\n\t\t);\r\n\r\n\t\tnewDom = childVNode._dom;\r\n\r\n\t\tif ((j = childVNode.ref) && oldVNode.ref != j) {\r\n\t\t\tif (!refs) refs = [];\r\n\t\t\tif (oldVNode.ref) refs.push(oldVNode.ref, null, childVNode);\r\n\t\t\trefs.push(j, childVNode._component || newDom, childVNode);\r\n\t\t}\r\n\r\n\t\tif (newDom != null) {\r\n\t\t\tif (firstChildDom == null) {\r\n\t\t\t\tfirstChildDom = newDom;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\ttypeof childVNode.type == 'function' &&\r\n\t\t\t\tchildVNode._children === oldVNode._children\r\n\t\t\t) {\r\n\t\t\t\tchildVNode._nextDom = oldDom = reorderChildren(\r\n\t\t\t\t\tchildVNode,\r\n\t\t\t\t\toldDom,\r\n\t\t\t\t\tparentDom\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\toldDom = placeChild(\r\n\t\t\t\t\tparentDom,\r\n\t\t\t\t\tchildVNode,\r\n\t\t\t\t\toldVNode,\r\n\t\t\t\t\toldChildren,\r\n\t\t\t\t\tnewDom,\r\n\t\t\t\t\toldDom\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (typeof newParentVNode.type == 'function') {\r\n\t\t\t\t// Because the newParentVNode is Fragment-like, we need to set it's\r\n\t\t\t\t// _nextDom property to the nextSibling of its last child DOM node.\r\n\t\t\t\t//\r\n\t\t\t\t// `oldDom` contains the correct value here because if the last child\r\n\t\t\t\t// is a Fragment-like, then oldDom has already been set to that child's _nextDom.\r\n\t\t\t\t// If the last child is a DOM VNode, then oldDom will be set to that DOM\r\n\t\t\t\t// node's nextSibling.\r\n\t\t\t\tnewParentVNode._nextDom = oldDom;\r\n\t\t\t}\r\n\t\t} else if (\r\n\t\t\toldDom &&\r\n\t\t\toldVNode._dom == oldDom &&\r\n\t\t\toldDom.parentNode != parentDom\r\n\t\t) {\r\n\t\t\t// The above condition is to handle null placeholders. See test in placeholder.test.js:\r\n\t\t\t// `efficiently replace null placeholders in parent rerenders`\r\n\t\t\toldDom = getDomSibling(oldVNode);\r\n\t\t}\r\n\t}\r\n\r\n\tnewParentVNode._dom = firstChildDom;\r\n\r\n\t// Remove remaining oldChildren if there are any.\r\n\tfor (i = oldChildrenLength; i--; ) {\r\n\t\tif (oldChildren[i] != null) {\r\n\t\t\tif (\r\n\t\t\t\ttypeof newParentVNode.type == 'function' &&\r\n\t\t\t\toldChildren[i]._dom != null &&\r\n\t\t\t\toldChildren[i]._dom == newParentVNode._nextDom\r\n\t\t\t) {\r\n\t\t\t\t// If the newParentVNode.__nextDom points to a dom node that is about to\r\n\t\t\t\t// be unmounted, then get the next sibling of that vnode and set\r\n\t\t\t\t// _nextDom to it\r\n\t\t\t\tnewParentVNode._nextDom = getDomSibling(oldParentVNode, i + 1);\r\n\t\t\t}\r\n\r\n\t\t\tunmount(oldChildren[i], oldChildren[i]);\r\n\t\t}\r\n\t}\r\n\r\n\t// Set refs only after unmount\r\n\tif (refs) {\r\n\t\tfor (i = 0; i < refs.length; i++) {\r\n\t\t\tapplyRef(refs[i], refs[++i], refs[++i]);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction reorderChildren(childVNode, oldDom, parentDom) {\r\n\t// Note: VNodes in nested suspended trees may be missing _children.\r\n\tlet c = childVNode._children;\r\n\tlet tmp = 0;\r\n\tfor (; c && tmp < c.length; tmp++) {\r\n\t\tlet vnode = c[tmp];\r\n\t\tif (vnode) {\r\n\t\t\t// We typically enter this code path on sCU bailout, where we copy\r\n\t\t\t// oldVNode._children to newVNode._children. If that is the case, we need\r\n\t\t\t// to update the old children's _parent pointer to point to the newVNode\r\n\t\t\t// (childVNode here).\r\n\t\t\tvnode._parent = childVNode;\r\n\r\n\t\t\tif (typeof vnode.type == 'function') {\r\n\t\t\t\toldDom = reorderChildren(vnode, oldDom, parentDom);\r\n\t\t\t} else {\r\n\t\t\t\toldDom = placeChild(\r\n\t\t\t\t\tparentDom,\r\n\t\t\t\t\tvnode,\r\n\t\t\t\t\tvnode,\r\n\t\t\t\t\tc,\r\n\t\t\t\t\tvnode._dom,\r\n\t\t\t\t\toldDom\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn oldDom;\r\n}\r\n\r\n/**\r\n * Flatten and loop through the children of a virtual node\r\n * @param {import('../index').ComponentChildren} children The unflattened\r\n * children of a virtual node\r\n * @returns {import('../internal').VNode[]}\r\n */\r\nexport function toChildArray(children, out) {\r\n\tout = out || [];\r\n\tif (children == null || typeof children == 'boolean') {\r\n\t} else if (Array.isArray(children)) {\r\n\t\tchildren.some(child => {\r\n\t\t\ttoChildArray(child, out);\r\n\t\t});\r\n\t} else {\r\n\t\tout.push(children);\r\n\t}\r\n\treturn out;\r\n}\r\n\r\nfunction placeChild(\r\n\tparentDom,\r\n\tchildVNode,\r\n\toldVNode,\r\n\toldChildren,\r\n\tnewDom,\r\n\toldDom\r\n) {\r\n\tlet nextDom;\r\n\tif (childVNode._nextDom !== undefined) {\r\n\t\t// Only Fragments or components that return Fragment like VNodes will\r\n\t\t// have a non-undefined _nextDom. Continue the diff from the sibling\r\n\t\t// of last DOM child of this child VNode\r\n\t\tnextDom = childVNode._nextDom;\r\n\r\n\t\t// Eagerly cleanup _nextDom. We don't need to persist the value because\r\n\t\t// it is only used by `diffChildren` to determine where to resume the diff after\r\n\t\t// diffing Components and Fragments. Once we store it the nextDOM local var, we\r\n\t\t// can clean up the property\r\n\t\tchildVNode._nextDom = undefined;\r\n\t} else if (\r\n\t\toldVNode == null ||\r\n\t\tnewDom != oldDom ||\r\n\t\tnewDom.parentNode == null\r\n\t) {\r\n\t\touter: if (oldDom == null || oldDom.parentNode !== parentDom) {\r\n\t\t\tparentDom.appendChild(newDom);\r\n\t\t\tnextDom = null;\r\n\t\t} else {\r\n\t\t\t// `j<oldChildrenLength; j+=2` is an alternative to `j++<oldChildrenLength/2`\r\n\t\t\tfor (\r\n\t\t\t\tlet sibDom = oldDom, j = 0;\r\n\t\t\t\t(sibDom = sibDom.nextSibling) && j < oldChildren.length;\r\n\t\t\t\tj += 2\r\n\t\t\t) {\r\n\t\t\t\tif (sibDom == newDom) {\r\n\t\t\t\t\tbreak outer;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tparentDom.insertBefore(newDom, oldDom);\r\n\t\t\tnextDom = oldDom;\r\n\t\t}\r\n\t}\r\n\r\n\t// If we have pre-calculated the nextDOM node, use it. Else calculate it now\r\n\t// Strictly check for `undefined` here cuz `null` is a valid value of `nextDom`.\r\n\t// See more detail in create-element.js:createVNode\r\n\tif (nextDom !== undefined) {\r\n\t\toldDom = nextDom;\r\n\t} else {\r\n\t\toldDom = newDom.nextSibling;\r\n\t}\r\n\r\n\treturn oldDom;\r\n}\r\n", "import { IS_NON_DIMENSIONAL } from '../constants';\r\nimport options from '../options';\r\n\r\n/**\r\n * Diff the old and new properties of a VNode and apply changes to the DOM node\r\n * @param {import('../internal').PreactElement} dom The DOM node to apply\r\n * changes to\r\n * @param {object} newProps The new props\r\n * @param {object} oldProps The old props\r\n * @param {boolean} isSvg Whether or not this node is an SVG node\r\n * @param {boolean} hydrate Whether or not we are in hydration mode\r\n */\r\nexport function diffProps(dom, newProps, oldProps, isSvg, hydrate) {\r\n\tlet i;\r\n\r\n\tfor (i in oldProps) {\r\n\t\tif (i !== 'children' && i !== 'key' && !(i in newProps)) {\r\n\t\t\tsetProperty(dom, i, null, oldProps[i], isSvg);\r\n\t\t}\r\n\t}\r\n\r\n\tfor (i in newProps) {\r\n\t\tif (\r\n\t\t\t(!hydrate || typeof newProps[i] == 'function') &&\r\n\t\t\ti !== 'children' &&\r\n\t\t\ti !== 'key' &&\r\n\t\t\ti !== 'value' &&\r\n\t\t\ti !== 'checked' &&\r\n\t\t\toldProps[i] !== newProps[i]\r\n\t\t) {\r\n\t\t\tsetProperty(dom, i, newProps[i], oldProps[i], isSvg);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction setStyle(style, key, value) {\r\n\tif (key[0] === '-') {\r\n\t\tstyle.setProperty(key, value);\r\n\t} else if (value == null) {\r\n\t\tstyle[key] = '';\r\n\t} else if (typeof value != 'number' || IS_NON_DIMENSIONAL.test(key)) {\r\n\t\tstyle[key] = value;\r\n\t} else {\r\n\t\tstyle[key] = value + 'px';\r\n\t}\r\n}\r\n\r\n/**\r\n * Set a property value on a DOM node\r\n * @param {import('../internal').PreactElement} dom The DOM node to modify\r\n * @param {string} name The name of the property to set\r\n * @param {*} value The value to set the property to\r\n * @param {*} oldValue The old value the property had\r\n * @param {boolean} isSvg Whether or not this DOM node is an SVG node or not\r\n */\r\nexport function setProperty(dom, name, value, oldValue, isSvg) {\r\n\tlet useCapture;\r\n\r\n\to: if (name === 'style') {\r\n\t\tif (typeof value == 'string') {\r\n\t\t\tdom.style.cssText = value;\r\n\t\t} else {\r\n\t\t\tif (typeof oldValue == 'string') {\r\n\t\t\t\tdom.style.cssText = oldValue = '';\r\n\t\t\t}\r\n\r\n\t\t\tif (oldValue) {\r\n\t\t\t\tfor (name in oldValue) {\r\n\t\t\t\t\tif (!(value && name in value)) {\r\n\t\t\t\t\t\tsetStyle(dom.style, name, '');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (value) {\r\n\t\t\t\tfor (name in value) {\r\n\t\t\t\t\tif (!oldValue || value[name] !== oldValue[name]) {\r\n\t\t\t\t\t\tsetStyle(dom.style, name, value[name]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t// Benchmark for comparison: https://esbench.com/bench/574c954bdb965b9a00965ac6\r\n\telse if (name[0] === 'o' && name[1] === 'n') {\r\n\t\tuseCapture = name !== (name = name.replace(/Capture$/, ''));\r\n\r\n\t\t// Infer correct casing for DOM built-in events:\r\n\t\tif (name.toLowerCase() in dom) name = name.toLowerCase().slice(2);\r\n\t\telse name = name.slice(2);\r\n\r\n\t\tif (!dom._listeners) dom._listeners = {};\r\n\t\tdom._listeners[name + useCapture] = value;\r\n\r\n\t\tif (value) {\r\n\t\t\tif (!oldValue) {\r\n\t\t\t\tconst handler = useCapture ? eventProxyCapture : eventProxy;\r\n\t\t\t\tdom.addEventListener(name, handler, useCapture);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tconst handler = useCapture ? eventProxyCapture : eventProxy;\r\n\t\t\tdom.removeEventListener(name, handler, useCapture);\r\n\t\t}\r\n\t} else if (name !== 'dangerouslySetInnerHTML') {\r\n\t\tif (isSvg) {\r\n\t\t\t// Normalize incorrect prop usage for SVG:\r\n\t\t\t// - xlink:href / xlinkHref --> href (xlink:href was removed from SVG and isn't needed)\r\n\t\t\t// - className --> class\r\n\t\t\tname = name.replace(/xlink[H:h]/, 'h').replace(/sName$/, 's');\r\n\t\t} else if (\r\n\t\t\tname !== 'href' &&\r\n\t\t\tname !== 'list' &&\r\n\t\t\tname !== 'form' &&\r\n\t\t\t// Default value in browsers is `-1` and an empty string is\r\n\t\t\t// cast to `0` instead\r\n\t\t\tname !== 'tabIndex' &&\r\n\t\t\tname !== 'download' &&\r\n\t\t\tname in dom\r\n\t\t) {\r\n\t\t\ttry {\r\n\t\t\t\tdom[name] = value == null ? '' : value;\r\n\t\t\t\t// labelled break is 1b smaller here than a return statement (sorry)\r\n\t\t\t\tbreak o;\r\n\t\t\t} catch (e) {}\r\n\t\t}\r\n\r\n\t\t// ARIA-attributes have a different notion of boolean values.\r\n\t\t// The value `false` is different from the attribute not\r\n\t\t// existing on the DOM, so we can't remove it. For non-boolean\r\n\t\t// ARIA-attributes we could treat false as a removal, but the\r\n\t\t// amount of exceptions would cost us too many bytes. On top of\r\n\t\t// that other VDOM frameworks also always stringify `false`.\r\n\r\n\t\tif (typeof value === 'function') {\r\n\t\t\t// never serialize functions as attribute values\r\n\t\t} else if (\r\n\t\t\tvalue != null &&\r\n\t\t\t(value !== false || (name[0] === 'a' && name[1] === 'r'))\r\n\t\t) {\r\n\t\t\tdom.setAttribute(name, value);\r\n\t\t} else {\r\n\t\t\tdom.removeAttribute(name);\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Proxy an event to hooked event handlers\r\n * @param {Event} e The event object from the browser\r\n * @private\r\n */\r\nfunction eventProxy(e) {\r\n\tthis._listeners[e.type + false](options.event ? options.event(e) : e);\r\n}\r\n\r\nfunction eventProxyCapture(e) {\r\n\tthis._listeners[e.type + true](options.event ? options.event(e) : e);\r\n}\r\n", "import { EMPTY_OBJ } from '../constants';\r\nimport { Component, getDomSibling } from '../component';\r\nimport { Fragment } from '../create-element';\r\nimport { diffChildren } from './children';\r\nimport { diffProps, setProperty } from './props';\r\nimport { assign, removeNode, slice } from '../util';\r\nimport options from '../options';\r\n\r\n/**\r\n * Diff two virtual nodes and apply proper changes to the DOM\r\n * @param {import('../internal').PreactElement} parentDom The parent of the DOM element\r\n * @param {import('../internal').VNode} newVNode The new virtual node\r\n * @param {import('../internal').VNode} oldVNode The old virtual node\r\n * @param {object} globalContext The current context object. Modified by getChildContext\r\n * @param {boolean} isSvg Whether or not this element is an SVG node\r\n * @param {Array<import('../internal').PreactElement>} excessDomChildren\r\n * @param {Array<import('../internal').Component>} commitQueue List of components\r\n * which have callbacks to invoke in commitRoot\r\n * @param {import('../internal').PreactElement} oldDom The current attached DOM\r\n * element any new dom elements should be placed around. Likely `null` on first\r\n * render (except when hydrating). Can be a sibling DOM element when diffing\r\n * Fragments that have siblings. In most cases, it starts out as `oldChildren[0]._dom`.\r\n * @param {boolean} [isHydrating] Whether or not we are in hydration\r\n */\r\nexport function diff(\r\n\tparentDom,\r\n\tnewVNode,\r\n\toldVNode,\r\n\tglobalContext,\r\n\tisSvg,\r\n\texcessDomChildren,\r\n\tcommitQueue,\r\n\toldDom,\r\n\tisHydrating\r\n) {\r\n\tlet tmp,\r\n\t\tnewType = newVNode.type;\r\n\r\n\t// When passing through createElement it assigns the object\r\n\t// constructor as undefined. This to prevent JSON-injection.\r\n\tif (newVNode.constructor !== undefined) return null;\r\n\r\n\t// If the previous diff bailed out, resume creating/hydrating.\r\n\tif (oldVNode._hydrating != null) {\r\n\t\tisHydrating = oldVNode._hydrating;\r\n\t\toldDom = newVNode._dom = oldVNode._dom;\r\n\t\t// if we resume, we want the tree to be \"unlocked\"\r\n\t\tnewVNode._hydrating = null;\r\n\t\texcessDomChildren = [oldDom];\r\n\t}\r\n\r\n\tif ((tmp = options._diff)) tmp(newVNode);\r\n\r\n\ttry {\r\n\t\touter: if (typeof newType == 'function') {\r\n\t\t\tlet c, isNew, oldProps, oldState, snapshot, clearProcessingException;\r\n\t\t\tlet newProps = newVNode.props;\r\n\r\n\t\t\t// Necessary for createContext api. Setting this property will pass\r\n\t\t\t// the context value as `this.context` just for this component.\r\n\t\t\ttmp = newType.contextType;\r\n\t\t\tlet provider = tmp && globalContext[tmp._id];\r\n\t\t\tlet componentContext = tmp\r\n\t\t\t\t? provider\r\n\t\t\t\t\t? provider.props.value\r\n\t\t\t\t\t: tmp._defaultValue\r\n\t\t\t\t: globalContext;\r\n\r\n\t\t\t// Get component and set it to `c`\r\n\t\t\tif (oldVNode._component) {\r\n\t\t\t\tc = newVNode._component = oldVNode._component;\r\n\t\t\t\tclearProcessingException = c._processingException = c._pendingError;\r\n\t\t\t} else {\r\n\t\t\t\t// Instantiate the new component\r\n\t\t\t\tif ('prototype' in newType && newType.prototype.render) {\r\n\t\t\t\t\t// @ts-ignore The check above verifies that newType is suppose to be constructed\r\n\t\t\t\t\tnewVNode._component = c = new newType(newProps, componentContext); // eslint-disable-line new-cap\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// @ts-ignore Trust me, Component implements the interface we want\r\n\t\t\t\t\tnewVNode._component = c = new Component(newProps, componentContext);\r\n\t\t\t\t\tc.constructor = newType;\r\n\t\t\t\t\tc.render = doRender;\r\n\t\t\t\t}\r\n\t\t\t\tif (provider) provider.sub(c);\r\n\r\n\t\t\t\tc.props = newProps;\r\n\t\t\t\tif (!c.state) c.state = {};\r\n\t\t\t\tc.context = componentContext;\r\n\t\t\t\tc._globalContext = globalContext;\r\n\t\t\t\tisNew = c._dirty = true;\r\n\t\t\t\tc._renderCallbacks = [];\r\n\t\t\t}\r\n\r\n\t\t\t// Invoke getDerivedStateFromProps\r\n\t\t\tif (c._nextState == null) {\r\n\t\t\t\tc._nextState = c.state;\r\n\t\t\t}\r\n\t\t\tif (newType.getDerivedStateFromProps != null) {\r\n\t\t\t\tif (c._nextState == c.state) {\r\n\t\t\t\t\tc._nextState = assign({}, c._nextState);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tassign(\r\n\t\t\t\t\tc._nextState,\r\n\t\t\t\t\tnewType.getDerivedStateFromProps(newProps, c._nextState)\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\toldProps = c.props;\r\n\t\t\toldState = c.state;\r\n\r\n\t\t\t// Invoke pre-render lifecycle methods\r\n\t\t\tif (isNew) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tnewType.getDerivedStateFromProps == null &&\r\n\t\t\t\t\tc.componentWillMount != null\r\n\t\t\t\t) {\r\n\t\t\t\t\tc.componentWillMount();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (c.componentDidMount != null) {\r\n\t\t\t\t\tc._renderCallbacks.push(c.componentDidMount);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (\r\n\t\t\t\t\tnewType.getDerivedStateFromProps == null &&\r\n\t\t\t\t\tnewProps !== oldProps &&\r\n\t\t\t\t\tc.componentWillReceiveProps != null\r\n\t\t\t\t) {\r\n\t\t\t\t\tc.componentWillReceiveProps(newProps, componentContext);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\t(!c._force &&\r\n\t\t\t\t\t\tc.shouldComponentUpdate != null &&\r\n\t\t\t\t\t\tc.shouldComponentUpdate(\r\n\t\t\t\t\t\t\tnewProps,\r\n\t\t\t\t\t\t\tc._nextState,\r\n\t\t\t\t\t\t\tcomponentContext\r\n\t\t\t\t\t\t) === false) ||\r\n\t\t\t\t\tnewVNode._original === oldVNode._original\r\n\t\t\t\t) {\r\n\t\t\t\t\tc.props = newProps;\r\n\t\t\t\t\tc.state = c._nextState;\r\n\t\t\t\t\t// More info about this here: https://gist.github.com/JoviDeCroock/bec5f2ce93544d2e6070ef8e0036e4e8\r\n\t\t\t\t\tif (newVNode._original !== oldVNode._original) c._dirty = false;\r\n\t\t\t\t\tc._vnode = newVNode;\r\n\t\t\t\t\tnewVNode._dom = oldVNode._dom;\r\n\t\t\t\t\tnewVNode._children = oldVNode._children;\r\n\t\t\t\t\tnewVNode._children.forEach(vnode => {\r\n\t\t\t\t\t\tif (vnode) vnode._parent = newVNode;\r\n\t\t\t\t\t});\r\n\t\t\t\t\tif (c._renderCallbacks.length) {\r\n\t\t\t\t\t\tcommitQueue.push(c);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak outer;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (c.componentWillUpdate != null) {\r\n\t\t\t\t\tc.componentWillUpdate(newProps, c._nextState, componentContext);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (c.componentDidUpdate != null) {\r\n\t\t\t\t\tc._renderCallbacks.push(() => {\r\n\t\t\t\t\t\tc.componentDidUpdate(oldProps, oldState, snapshot);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tc.context = componentContext;\r\n\t\t\tc.props = newProps;\r\n\t\t\tc.state = c._nextState;\r\n\r\n\t\t\tif ((tmp = options._render)) tmp(newVNode);\r\n\r\n\t\t\tc._dirty = false;\r\n\t\t\tc._vnode = newVNode;\r\n\t\t\tc._parentDom = parentDom;\r\n\r\n\t\t\ttmp = c.render(c.props, c.state, c.context);\r\n\r\n\t\t\t// Handle setState called in render, see #2553\r\n\t\t\tc.state = c._nextState;\r\n\r\n\t\t\tif (c.getChildContext != null) {\r\n\t\t\t\tglobalContext = assign(assign({}, globalContext), c.getChildContext());\r\n\t\t\t}\r\n\r\n\t\t\tif (!isNew && c.getSnapshotBeforeUpdate != null) {\r\n\t\t\t\tsnapshot = c.getSnapshotBeforeUpdate(oldProps, oldState);\r\n\t\t\t}\r\n\r\n\t\t\tlet isTopLevelFragment =\r\n\t\t\t\ttmp != null && tmp.type === Fragment && tmp.key == null;\r\n\t\t\tlet renderResult = isTopLevelFragment ? tmp.props.children : tmp;\r\n\r\n\t\t\tdiffChildren(\r\n\t\t\t\tparentDom,\r\n\t\t\t\tArray.isArray(renderResult) ? renderResult : [renderResult],\r\n\t\t\t\tnewVNode,\r\n\t\t\t\toldVNode,\r\n\t\t\t\tglobalContext,\r\n\t\t\t\tisSvg,\r\n\t\t\t\texcessDomChildren,\r\n\t\t\t\tcommitQueue,\r\n\t\t\t\toldDom,\r\n\t\t\t\tisHydrating\r\n\t\t\t);\r\n\r\n\t\t\tc.base = newVNode._dom;\r\n\r\n\t\t\t// We successfully rendered this VNode, unset any stored hydration/bailout state:\r\n\t\t\tnewVNode._hydrating = null;\r\n\r\n\t\t\tif (c._renderCallbacks.length) {\r\n\t\t\t\tcommitQueue.push(c);\r\n\t\t\t}\r\n\r\n\t\t\tif (clearProcessingException) {\r\n\t\t\t\tc._pendingError = c._processingException = null;\r\n\t\t\t}\r\n\r\n\t\t\tc._force = false;\r\n\t\t} else if (\r\n\t\t\texcessDomChildren == null &&\r\n\t\t\tnewVNode._original === oldVNode._original\r\n\t\t) {\r\n\t\t\tnewVNode._children = oldVNode._children;\r\n\t\t\tnewVNode._dom = oldVNode._dom;\r\n\t\t} else {\r\n\t\t\tnewVNode._dom = diffElementNodes(\r\n\t\t\t\toldVNode._dom,\r\n\t\t\t\tnewVNode,\r\n\t\t\t\toldVNode,\r\n\t\t\t\tglobalContext,\r\n\t\t\t\tisSvg,\r\n\t\t\t\texcessDomChildren,\r\n\t\t\t\tcommitQueue,\r\n\t\t\t\tisHydrating\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif ((tmp = options.diffed)) tmp(newVNode);\r\n\t} catch (e) {\r\n\t\tnewVNode._original = null;\r\n\t\t// if hydrating or creating initial tree, bailout preserves DOM:\r\n\t\tif (isHydrating || excessDomChildren != null) {\r\n\t\t\tnewVNode._dom = oldDom;\r\n\t\t\tnewVNode._hydrating = !!isHydrating;\r\n\t\t\texcessDomChildren[excessDomChildren.indexOf(oldDom)] = null;\r\n\t\t\t// ^ could possibly be simplified to:\r\n\t\t\t// excessDomChildren.length = 0;\r\n\t\t}\r\n\t\toptions._catchError(e, newVNode, oldVNode);\r\n\t}\r\n}\r\n\r\n/**\r\n * @param {Array<import('../internal').Component>} commitQueue List of components\r\n * which have callbacks to invoke in commitRoot\r\n * @param {import('../internal').VNode} root\r\n */\r\nexport function commitRoot(commitQueue, root) {\r\n\tif (options._commit) options._commit(root, commitQueue);\r\n\r\n\tcommitQueue.some(c => {\r\n\t\ttry {\r\n\t\t\t// @ts-ignore Reuse the commitQueue variable here so the type changes\r\n\t\t\tcommitQueue = c._renderCallbacks;\r\n\t\t\tc._renderCallbacks = [];\r\n\t\t\tcommitQueue.some(cb => {\r\n\t\t\t\t// @ts-ignore See above ts-ignore on commitQueue\r\n\t\t\t\tcb.call(c);\r\n\t\t\t});\r\n\t\t} catch (e) {\r\n\t\t\toptions._catchError(e, c._vnode);\r\n\t\t}\r\n\t});\r\n}\r\n\r\n/**\r\n * Diff two virtual nodes representing DOM element\r\n * @param {import('../internal').PreactElement} dom The DOM element representing\r\n * the virtual nodes being diffed\r\n * @param {import('../internal').VNode} newVNode The new virtual node\r\n * @param {import('../internal').VNode} oldVNode The old virtual node\r\n * @param {object} globalContext The current context object\r\n * @param {boolean} isSvg Whether or not this DOM node is an SVG node\r\n * @param {*} excessDomChildren\r\n * @param {Array<import('../internal').Component>} commitQueue List of components\r\n * which have callbacks to invoke in commitRoot\r\n * @param {boolean} isHydrating Whether or not we are in hydration\r\n * @returns {import('../internal').PreactElement}\r\n */\r\nfunction diffElementNodes(\r\n\tdom,\r\n\tnewVNode,\r\n\toldVNode,\r\n\tglobalContext,\r\n\tisSvg,\r\n\texcessDomChildren,\r\n\tcommitQueue,\r\n\tisHydrating\r\n) {\r\n\tlet oldProps = oldVNode.props;\r\n\tlet newProps = newVNode.props;\r\n\tlet nodeType = newVNode.type;\r\n\tlet i = 0;\r\n\r\n\t// Tracks entering and exiting SVG namespace when descending through the tree.\r\n\tif (nodeType === 'svg') isSvg = true;\r\n\r\n\tif (excessDomChildren != null) {\r\n\t\tfor (; i < excessDomChildren.length; i++) {\r\n\t\t\tconst child = excessDomChildren[i];\r\n\r\n\t\t\t// if newVNode matches an element in excessDomChildren or the `dom`\r\n\t\t\t// argument matches an element in excessDomChildren, remove it from\r\n\t\t\t// excessDomChildren so it isn't later removed in diffChildren\r\n\t\t\tif (\r\n\t\t\t\tchild &&\r\n\t\t\t\t'setAttribute' in child === !!nodeType &&\r\n\t\t\t\t(nodeType ? child.localName === nodeType : child.nodeType === 3)\r\n\t\t\t) {\r\n\t\t\t\tdom = child;\r\n\t\t\t\texcessDomChildren[i] = null;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (dom == null) {\r\n\t\tif (nodeType === null) {\r\n\t\t\t// @ts-ignore createTextNode returns Text, we expect PreactElement\r\n\t\t\treturn document.createTextNode(newProps);\r\n\t\t}\r\n\r\n\t\tif (isSvg) {\r\n\t\t\tdom = document.createElementNS(\r\n\t\t\t\t'http://www.w3.org/2000/svg',\r\n\t\t\t\t// @ts-ignore We know `newVNode.type` is a string\r\n\t\t\t\tnodeType\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\tdom = document.createElement(\r\n\t\t\t\t// @ts-ignore We know `newVNode.type` is a string\r\n\t\t\t\tnodeType,\r\n\t\t\t\tnewProps.is && newProps\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// we created a new parent, so none of the previously attached children can be reused:\r\n\t\texcessDomChildren = null;\r\n\t\t// we are creating a new node, so we can assume this is a new subtree (in case we are hydrating), this deopts the hydrate\r\n\t\tisHydrating = false;\r\n\t}\r\n\r\n\tif (nodeType === null) {\r\n\t\t// During hydration, we still have to split merged text from SSR'd HTML.\r\n\t\tif (oldProps !== newProps && (!isHydrating || dom.data !== newProps)) {\r\n\t\t\tdom.data = newProps;\r\n\t\t}\r\n\t} else {\r\n\t\t// If excessDomChildren was not null, repopulate it with the current element's children:\r\n\t\texcessDomChildren = excessDomChildren && slice.call(dom.childNodes);\r\n\r\n\t\toldProps = oldVNode.props || EMPTY_OBJ;\r\n\r\n\t\tlet oldHtml = oldProps.dangerouslySetInnerHTML;\r\n\t\tlet newHtml = newProps.dangerouslySetInnerHTML;\r\n\r\n\t\t// During hydration, props are not diffed at all (including dangerouslySetInnerHTML)\r\n\t\t// @TODO we should warn in debug mode when props don't match here.\r\n\t\tif (!isHydrating) {\r\n\t\t\t// But, if we are in a situation where we are using existing DOM (e.g. replaceNode)\r\n\t\t\t// we should read the existing DOM attributes to diff them\r\n\t\t\tif (excessDomChildren != null) {\r\n\t\t\t\toldProps = {};\r\n\t\t\t\tfor (i = 0; i < dom.attributes.length; i++) {\r\n\t\t\t\t\toldProps[dom.attributes[i].name] = dom.attributes[i].value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (newHtml || oldHtml) {\r\n\t\t\t\t// Avoid re-applying the same '__html' if it did not changed between re-render\r\n\t\t\t\tif (\r\n\t\t\t\t\t!newHtml ||\r\n\t\t\t\t\t((!oldHtml || newHtml.__html != oldHtml.__html) &&\r\n\t\t\t\t\t\tnewHtml.__html !== dom.innerHTML)\r\n\t\t\t\t) {\r\n\t\t\t\t\tdom.innerHTML = (newHtml && newHtml.__html) || '';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdiffProps(dom, newProps, oldProps, isSvg, isHydrating);\r\n\r\n\t\t// If the new vnode didn't have dangerouslySetInnerHTML, diff its children\r\n\t\tif (newHtml) {\r\n\t\t\tnewVNode._children = [];\r\n\t\t} else {\r\n\t\t\ti = newVNode.props.children;\r\n\t\t\tdiffChildren(\r\n\t\t\t\tdom,\r\n\t\t\t\tArray.isArray(i) ? i : [i],\r\n\t\t\t\tnewVNode,\r\n\t\t\t\toldVNode,\r\n\t\t\t\tglobalContext,\r\n\t\t\t\tisSvg && nodeType !== 'foreignObject',\r\n\t\t\t\texcessDomChildren,\r\n\t\t\t\tcommitQueue,\r\n\t\t\t\texcessDomChildren\r\n\t\t\t\t\t? excessDomChildren[0]\r\n\t\t\t\t\t: oldVNode._children && getDomSibling(oldVNode, 0),\r\n\t\t\t\tisHydrating\r\n\t\t\t);\r\n\r\n\t\t\t// Remove children that are not part of any vnode.\r\n\t\t\tif (excessDomChildren != null) {\r\n\t\t\t\tfor (i = excessDomChildren.length; i--; ) {\r\n\t\t\t\t\tif (excessDomChildren[i] != null) removeNode(excessDomChildren[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// (as above, don't diff props during hydration)\r\n\t\tif (!isHydrating) {\r\n\t\t\tif (\r\n\t\t\t\t'value' in newProps &&\r\n\t\t\t\t(i = newProps.value) !== undefined &&\r\n\t\t\t\t// #2756 For the <progress>-element the initial value is 0,\r\n\t\t\t\t// despite the attribute not being present. When the attribute\r\n\t\t\t\t// is missing the progress bar is treated as indeterminate.\r\n\t\t\t\t// To fix that we'll always update it when it is 0 for progress elements\r\n\t\t\t\t(i !== oldProps.value ||\r\n\t\t\t\t\ti !== dom.value ||\r\n\t\t\t\t\t(nodeType === 'progress' && !i))\r\n\t\t\t) {\r\n\t\t\t\tsetProperty(dom, 'value', i, oldProps.value, false);\r\n\t\t\t}\r\n\t\t\tif (\r\n\t\t\t\t'checked' in newProps &&\r\n\t\t\t\t(i = newProps.checked) !== undefined &&\r\n\t\t\t\ti !== dom.checked\r\n\t\t\t) {\r\n\t\t\t\tsetProperty(dom, 'checked', i, oldProps.checked, false);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn dom;\r\n}\r\n\r\n/**\r\n * Invoke or update a ref, depending on whether it is a function or object ref.\r\n * @param {object|function} ref\r\n * @param {any} value\r\n * @param {import('../internal').VNode} vnode\r\n */\r\nexport function applyRef(ref, value, vnode) {\r\n\ttry {\r\n\t\tif (typeof ref == 'function') ref(value);\r\n\t\telse ref.current = value;\r\n\t} catch (e) {\r\n\t\toptions._catchError(e, vnode);\r\n\t}\r\n}\r\n\r\n/**\r\n * Unmount a virtual node from the tree and apply DOM changes\r\n * @param {import('../internal').VNode} vnode The virtual node to unmount\r\n * @param {import('../internal').VNode} parentVNode The parent of the VNode that\r\n * initiated the unmount\r\n * @param {boolean} [skipRemove] Flag that indicates that a parent node of the\r\n * current element is already detached from the DOM.\r\n */\r\nexport function unmount(vnode, parentVNode, skipRemove) {\r\n\tlet r;\r\n\tif (options.unmount) options.unmount(vnode);\r\n\r\n\tif ((r = vnode.ref)) {\r\n\t\tif (!r.current || r.current === vnode._dom) applyRef(r, null, parentVNode);\r\n\t}\r\n\r\n\tif ((r = vnode._component) != null) {\r\n\t\tif (r.componentWillUnmount) {\r\n\t\t\ttry {\r\n\t\t\t\tr.componentWillUnmount();\r\n\t\t\t} catch (e) {\r\n\t\t\t\toptions._catchError(e, parentVNode);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tr.base = r._parentDom = null;\r\n\t}\r\n\r\n\tif ((r = vnode._children)) {\r\n\t\tfor (let i = 0; i < r.length; i++) {\r\n\t\t\tif (r[i]) {\r\n\t\t\t\tunmount(r[i], parentVNode, typeof vnode.type != 'function');\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!skipRemove && vnode._dom != null) removeNode(vnode._dom);\r\n\r\n\t// Must be set to `undefined` to properly clean up `_nextDom`\r\n\t// for which `null` is a valid value. See comment in `create-element.js`\r\n\tvnode._dom = vnode._nextDom = undefined;\r\n}\r\n\r\n/** The `.render()` method for a PFC backing instance. */\r\nfunction doRender(props, state, context) {\r\n\treturn this.constructor(props, context);\r\n}\r\n", "import { EMPTY_OBJ } from './constants';\r\nimport { commitRoot, diff } from './diff/index';\r\nimport { createElement, Fragment } from './create-element';\r\nimport options from './options';\r\nimport { slice } from './util';\r\n\r\n/**\r\n * Render a Preact virtual node into a DOM element\r\n * @param {import('./internal').ComponentChild} vnode The virtual node to render\r\n * @param {import('./internal').PreactElement} parentDom The DOM element to\r\n * render into\r\n * @param {import('./internal').PreactElement | object} [replaceNode] Optional: Attempt to re-use an\r\n * existing DOM tree rooted at `replaceNode`\r\n */\r\nexport function render(vnode, parentDom, replaceNode) {\r\n\tif (options._root) options._root(vnode, parentDom);\r\n\r\n\t// We abuse the `replaceNode` parameter in `hydrate()` to signal if we are in\r\n\t// hydration mode or not by passing the `hydrate` function instead of a DOM\r\n\t// element..\r\n\tlet isHydrating = typeof replaceNode === 'function';\r\n\r\n\t// To be able to support calling `render()` multiple times on the same\r\n\t// DOM node, we need to obtain a reference to the previous tree. We do\r\n\t// this by assigning a new `_children` property to DOM nodes which points\r\n\t// to the last rendered tree. By default this property is not present, which\r\n\t// means that we are mounting a new tree for the first time.\r\n\tlet oldVNode = isHydrating\r\n\t\t? null\r\n\t\t: (replaceNode && replaceNode._children) || parentDom._children;\r\n\r\n\tvnode = (\r\n\t\t(!isHydrating && replaceNode) ||\r\n\t\tparentDom\r\n\t)._children = createElement(Fragment, null, [vnode]);\r\n\r\n\t// List of effects that need to be called after diffing.\r\n\tlet commitQueue = [];\r\n\tdiff(\r\n\t\tparentDom,\r\n\t\t// Determine the new vnode tree and store it on the DOM element on\r\n\t\t// our custom `_children` property.\r\n\t\tvnode,\r\n\t\toldVNode || EMPTY_OBJ,\r\n\t\tEMPTY_OBJ,\r\n\t\tparentDom.ownerSVGElement !== undefined,\r\n\t\t!isHydrating && replaceNode\r\n\t\t\t? [replaceNode]\r\n\t\t\t: oldVNode\r\n\t\t\t? null\r\n\t\t\t: parentDom.firstChild\r\n\t\t\t? slice.call(parentDom.childNodes)\r\n\t\t\t: null,\r\n\t\tcommitQueue,\r\n\t\t!isHydrating && replaceNode\r\n\t\t\t? replaceNode\r\n\t\t\t: oldVNode\r\n\t\t\t? oldVNode._dom\r\n\t\t\t: parentDom.firstChild,\r\n\t\tisHydrating\r\n\t);\r\n\r\n\t// Flush all queued effects\r\n\tcommitRoot(commitQueue, vnode);\r\n}\r\n\r\n/**\r\n * Update an existing DOM element with data from a Preact virtual node\r\n * @param {import('./internal').ComponentChild} vnode The virtual node to render\r\n * @param {import('./internal').PreactElement} parentDom The DOM element to\r\n * update\r\n */\r\nexport function hydrate(vnode, parentDom) {\r\n\trender(vnode, parentDom, hydrate);\r\n}\r\n", "import { assign, slice } from './util';\r\nimport { createVNode } from './create-element';\r\n\r\n/**\r\n * Clones the given VNode, optionally adding attributes/props and replacing its children.\r\n * @param {import('./internal').VNode} vnode The virtual DOM element to clone\r\n * @param {object} props Attributes/props to add when cloning\r\n * @param {Array<import('./internal').ComponentChildren>} rest Any additional arguments will be used as replacement children.\r\n * @returns {import('./internal').VNode}\r\n */\r\nexport function cloneElement(vnode, props, children) {\r\n\tlet normalizedProps = assign({}, vnode.props),\r\n\t\tkey,\r\n\t\tref,\r\n\t\ti;\r\n\tfor (i in props) {\r\n\t\tif (i == 'key') key = props[i];\r\n\t\telse if (i == 'ref') ref = props[i];\r\n\t\telse normalizedProps[i] = props[i];\r\n\t}\r\n\r\n\tif (arguments.length > 2) {\r\n\t\tnormalizedProps.children =\r\n\t\t\targuments.length > 3 ? slice.call(arguments, 2) : children;\r\n\t}\r\n\r\n\treturn createVNode(\r\n\t\tvnode.type,\r\n\t\tnormalizedProps,\r\n\t\tkey || vnode.key,\r\n\t\tref || vnode.ref,\r\n\t\tnull\r\n\t);\r\n}\r\n", "/**\r\n * Find the closest error boundary to a thrown error and call it\r\n * @param {object} error The thrown value\r\n * @param {import('../internal').VNode} vnode The vnode that threw\r\n * the error that was caught (except for unmounting when this parameter\r\n * is the highest parent that was being unmounted)\r\n */\r\nexport function _catchError(error, vnode) {\r\n\t/** @type {import('../internal').Component} */\r\n\tlet component, ctor, handled;\r\n\r\n\tfor (; (vnode = vnode._parent); ) {\r\n\t\tif ((component = vnode._component) && !component._processingException) {\r\n\t\t\ttry {\r\n\t\t\t\tctor = component.constructor;\r\n\r\n\t\t\t\tif (ctor && ctor.getDerivedStateFromError != null) {\r\n\t\t\t\t\tcomponent.setState(ctor.getDerivedStateFromError(error));\r\n\t\t\t\t\thandled = component._dirty;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (component.componentDidCatch != null) {\r\n\t\t\t\t\tcomponent.componentDidCatch(error);\r\n\t\t\t\t\thandled = component._dirty;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// This is an error boundary. Mark it as having bailed out, and whether it was mid-hydration.\r\n\t\t\t\tif (handled) {\r\n\t\t\t\t\treturn (component._pendingError = component);\r\n\t\t\t\t}\r\n\t\t\t} catch (e) {\r\n\t\t\t\terror = e;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tthrow error;\r\n}\r\n", "import { SearchIndex } from './helpers'\n\nexport function deepEqual(a, b) {\n  return (\n    Array.isArray(a) &&\n    Array.isArray(b) &&\n    a.length === b.length &&\n    a.every((val, index) => val == b[index])\n  )\n}\n\nexport async function sleep(frames = 1) {\n  for (let _ in [...Array(frames).keys()]) {\n    await new Promise(requestAnimationFrame)\n  }\n}\n\nexport function getEmojiData(emoji, { skinIndex } = {}) {\n  const skin =\n    emoji.skins[skinIndex] ||\n    (() => {\n      skinIndex = 0\n      return emoji.skins[skinIndex]\n    })()\n\n  const emojiData = {\n    id: emoji.id,\n    name: emoji.name,\n    native: skin.native,\n    unified: skin.unified,\n    keywords: emoji.keywords,\n    shortcodes: skin.shortcodes || emoji.shortcodes,\n  }\n\n  if (emoji.skins.length > 1) {\n    emojiData.skin = skinIndex + 1\n  }\n\n  if (skin.src) {\n    emojiData.src = skin.src\n  }\n\n  if (emoji.aliases && emoji.aliases.length) {\n    emojiData.aliases = emoji.aliases\n  }\n\n  if (emoji.emoticons && emoji.emoticons.length) {\n    emojiData.emoticons = emoji.emoticons\n  }\n\n  return emojiData\n}\n\nexport async function getEmojiDataFromNative(nativeString) {\n  const results = await SearchIndex.search(nativeString, {\n    maxResults: 1,\n    caller: 'getEmojiDataFromNative',\n  })\n  if (!results || !results.length) return null\n\n  const emoji = results[0]\n  let skinIndex = 0\n\n  for (let skin of emoji.skins) {\n    if (skin.native == nativeString) {\n      break\n    }\n\n    skinIndex++\n  }\n\n  return getEmojiData(emoji, { skinIndex })\n}\n", "export { default as Store } from './store.js'\n\nexport { default as NativeSupport } from './native-support.js'\nexport { default as FrequentlyUsed } from './frequently-used.js'\nexport { default as SearchIndex } from './search-index.js'\n\nexport const SafeFlags = [\n  'checkered_flag',\n  'crossed_flags',\n  'pirate_flag',\n  'rainbow-flag',\n  'transgender_flag',\n  'triangular_flag_on_post',\n  'waving_black_flag',\n  'waving_white_flag',\n]\n", "function set(key, value) {\n  try {\n    window.localStorage[`emoji-mart.${key}`] = JSON.stringify(value)\n  } catch (error) {}\n}\n\nfunction get(key) {\n  try {\n    const value = window.localStorage[`emoji-mart.${key}`]\n\n    if (value) {\n      return JSON.parse(value)\n    }\n  } catch (error) {}\n}\n\nexport default { set, get }\n", "const CACHE = new Map()\nconst VERSIONS = [\n  { v: 14, emoji: '🫠' },\n  { v: 13.1, emoji: '😶‍🌫️' },\n  { v: 13, emoji: '🥸' },\n  { v: 12.1, emoji: '🧑‍🦰' },\n  { v: 12, emoji: '🥱' },\n  { v: 11, emoji: '🥰' },\n  { v: 5, emoji: '🤩' },\n  { v: 4, emoji: '👱‍♀️' },\n  { v: 3, emoji: '🤣' },\n  { v: 2, emoji: '👋🏻' },\n  { v: 1, emoji: '🙃' },\n]\n\nfunction latestVersion() {\n  for (const { v, emoji } of VERSIONS) {\n    if (isSupported(emoji)) {\n      return v\n    }\n  }\n}\n\nfunction noCountryFlags() {\n  if (isSupported('🇨🇦')) {\n    return false\n  }\n\n  return true\n}\n\nfunction isSupported(emoji) {\n  if (CACHE.has(emoji)) {\n    return CACHE.get(emoji)\n  }\n\n  const supported = isEmojiSupported(emoji)\n  CACHE.set(emoji, supported)\n\n  return supported\n}\n\n// https://github.com/koala-interactive/is-emoji-supported\nconst isEmojiSupported = (() => {\n  let ctx = null\n  try {\n    if (!navigator.userAgent.includes('jsdom')) {\n      ctx = document.createElement('canvas').getContext('2d')\n    }\n  } catch {}\n\n  // Not in browser env\n  if (!ctx) {\n    return () => false\n  }\n\n  const CANVAS_HEIGHT = 25\n  const CANVAS_WIDTH = 20\n  const textSize = Math.floor(CANVAS_HEIGHT / 2)\n\n  // Initialize convas context\n  ctx.font = textSize + 'px Arial, Sans-Serif'\n  ctx.textBaseline = 'top'\n  ctx.canvas.width = CANVAS_WIDTH * 2\n  ctx.canvas.height = CANVAS_HEIGHT\n\n  return (unicode) => {\n    ctx.clearRect(0, 0, CANVAS_WIDTH * 2, CANVAS_HEIGHT)\n\n    // Draw in red on the left\n    ctx.fillStyle = '#FF0000'\n    ctx.fillText(unicode, 0, 22)\n\n    // Draw in blue on right\n    ctx.fillStyle = '#0000FF'\n    ctx.fillText(unicode, CANVAS_WIDTH, 22)\n\n    const a = ctx.getImageData(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT).data\n    const count = a.length\n    let i = 0\n\n    // Search the first visible pixel\n    for (; i < count && !a[i + 3]; i += 4);\n\n    // No visible pixel\n    if (i >= count) {\n      return false\n    }\n\n    // Emoji has immutable color, so we check the color of the emoji in two different colors\n    // the result show be the same.\n    const x = CANVAS_WIDTH + ((i / 4) % CANVAS_WIDTH)\n    const y = Math.floor(i / 4 / CANVAS_WIDTH)\n    const b = ctx.getImageData(x, y, 1, 1).data\n\n    if (a[i] !== b[0] || a[i + 2] !== b[2]) {\n      return false\n    }\n\n    // Some emojis are a contraction of different ones, so if it's not\n    // supported, it will show multiple characters\n    if (ctx.measureText(unicode).width >= CANVAS_WIDTH) {\n      return false\n    }\n\n    // Supported\n    return true\n  }\n})()\n\nexport default { latestVersion, noCountryFlags }\n", "import { Store } from '../helpers'\n\nconst DEFAULTS = [\n  '+1',\n  'grinning',\n  'kissing_heart',\n  'heart_eyes',\n  'laughing',\n  'stuck_out_tongue_winking_eye',\n  'sweat_smile',\n  'joy',\n  'scream',\n  'disappointed',\n  'unamused',\n  'weary',\n  'sob',\n  'sunglasses',\n  'heart',\n]\n\nlet Index = null\n\nfunction add(emoji) {\n  Index || (Index = Store.get('frequently') || {})\n\n  const emojiId = emoji.id || emoji\n  if (!emojiId) return\n\n  Index[emojiId] || (Index[emojiId] = 0)\n  Index[emojiId] += 1\n\n  Store.set('last', emojiId)\n  Store.set('frequently', Index)\n}\n\nfunction get({ maxFrequentRows, perLine }) {\n  if (!maxFrequentRows) return []\n\n  Index || (Index = Store.get('frequently'))\n  let emojiIds = []\n\n  if (!Index) {\n    Index = {}\n\n    for (let i in DEFAULTS.slice(0, perLine)) {\n      const emojiId = DEFAULTS[i]\n\n      Index[emojiId] = perLine - i\n      emojiIds.push(emojiId)\n    }\n\n    return emojiIds\n  }\n\n  const max = maxFrequentRows * perLine\n  const last = Store.get('last')\n\n  for (let emojiId in Index) {\n    emojiIds.push(emojiId)\n  }\n\n  emojiIds.sort((a, b) => {\n    const aScore = Index[b]\n    const bScore = Index[a]\n\n    if (aScore == bScore) {\n      return a.localeCompare(b)\n    }\n\n    return aScore - bScore\n  })\n\n  if (emojiIds.length > max) {\n    const removedIds = emojiIds.slice(max)\n    emojiIds = emojiIds.slice(0, max)\n\n    for (let removedId of removedIds) {\n      if (removedId == last) continue\n      delete Index[removedId]\n    }\n\n    if (last && emojiIds.indexOf(last) == -1) {\n      delete Index[emojiIds[emojiIds.length - 1]]\n      emojiIds.splice(-1, 1, last)\n    }\n\n    Store.set('frequently', Index)\n  }\n\n  return emojiIds\n}\n\nexport default { add, get }\n", "import { init, Data } from '../config'\n\nconst SHORTCODES_REGEX = /^(?:\\:([^\\:]+)\\:)(?:\\:skin-tone-(\\d)\\:)?$/\nlet Pool = null\n\nfunction get(emojiId) {\n  if (emojiId.id) {\n    return emojiId\n  }\n\n  return (\n    Data.emojis[emojiId] ||\n    Data.emojis[Data.aliases[emojiId]] ||\n    Data.emojis[Data.natives[emojiId]]\n  )\n}\n\nfunction reset() {\n  Pool = null\n}\n\nasync function search(value, { maxResults, caller } = {}) {\n  if (!value || !value.trim().length) return null\n  maxResults || (maxResults = 90)\n\n  await init(null, { caller: caller || 'SearchIndex.search' })\n\n  const values = value\n    .toLowerCase()\n    .replace(/(\\w)-/, '$1 ')\n    .split(/[\\s|,]+/)\n    .filter((word, i, words) => {\n      return word.trim() && words.indexOf(word) == i\n    })\n\n  if (!values.length) return\n\n  let pool = Pool || (Pool = Object.values(Data.emojis))\n  let results, scores\n\n  for (const value of values) {\n    if (!pool.length) break\n\n    results = []\n    scores = {}\n\n    for (const emoji of pool) {\n      if (!emoji.search) continue\n      const score = emoji.search.indexOf(`,${value}`)\n      if (score == -1) continue\n\n      results.push(emoji)\n      scores[emoji.id] || (scores[emoji.id] = 0)\n      scores[emoji.id] += emoji.id == value ? 0 : score + 1\n    }\n\n    pool = results\n  }\n\n  if (results.length < 2) {\n    return results\n  }\n\n  results.sort((a, b) => {\n    const aScore = scores[a.id]\n    const bScore = scores[b.id]\n\n    if (aScore == bScore) {\n      return a.id.localeCompare(b.id)\n    }\n\n    return aScore - bScore\n  })\n\n  if (results.length > maxResults) {\n    results = results.slice(0, maxResults)\n  }\n\n  return results\n}\n\nexport default { search, get, reset, SHORTCODES_REGEX }\n", "import i18n_en from '@emoji-mart/data/i18n/en.json'\nimport PickerProps from './components/Picker/PickerProps'\nimport {\n  FrequentlyUsed,\n  NativeSupport,\n  SafeFlags,\n  SearchIndex,\n} from './helpers'\n\nexport let I18n = null\nexport let Data = null\n\nconst fetchCache = {}\nasync function fetchJSON(src) {\n  if (fetchCache[src]) {\n    return fetchCache[src]\n  }\n\n  const response = await fetch(src)\n  const json = await response.json()\n\n  fetchCache[src] = json\n  return json\n}\n\nlet promise = null\nlet initCallback = null\nlet initialized = false\n\nexport function init(options, { caller } = {}) {\n  promise ||\n    (promise = new Promise((resolve) => {\n      initCallback = resolve\n    }))\n\n  if (options) {\n    _init(options)\n  } else if (caller && !initialized) {\n    console.warn(\n      `\\`${caller}\\` requires data to be initialized first. Promise will be pending until \\`init\\` is called.`,\n    )\n  }\n\n  return promise\n}\n\nasync function _init(props) {\n  initialized = true\n\n  let { emojiVersion, set, locale } = props\n  emojiVersion || (emojiVersion = PickerProps.emojiVersion.value)\n  set || (set = PickerProps.set.value)\n  locale || (locale = PickerProps.locale.value)\n\n  if (!Data) {\n    Data =\n      (typeof props.data === 'function' ? await props.data() : props.data) ||\n      (await fetchJSON(\n        `https://cdn.jsdelivr.net/npm/@emoji-mart/data@latest/sets/${emojiVersion}/${set}.json`,\n      ))\n\n    Data.emoticons = {}\n    Data.natives = {}\n\n    Data.categories.unshift({\n      id: 'frequent',\n      emojis: [],\n    })\n\n    for (const alias in Data.aliases) {\n      const emojiId = Data.aliases[alias]\n      const emoji = Data.emojis[emojiId]\n      if (!emoji) continue\n\n      emoji.aliases || (emoji.aliases = [])\n      emoji.aliases.push(alias)\n    }\n  } else {\n    Data.categories = Data.categories.filter((c) => {\n      const isCustom = !!c.name\n      if (!isCustom) return true\n\n      return false\n    })\n  }\n\n  I18n =\n    (typeof props.i18n === 'function' ? await props.i18n() : props.i18n) ||\n    (locale == 'en'\n      ? i18n_en\n      : await fetchJSON(\n          `https://cdn.jsdelivr.net/npm/@emoji-mart/data@latest/i18n/${locale}.json`,\n        ))\n\n  if (props.custom) {\n    for (let i in props.custom) {\n      i = parseInt(i)\n      const category = props.custom[i]\n      const prevCategory = props.custom[i - 1]\n\n      if (!category.emojis || !category.emojis.length) continue\n\n      category.id || (category.id = `custom_${i + 1}`)\n      category.name || (category.name = I18n.categories.custom)\n\n      if (prevCategory && !category.icon) {\n        category.target = prevCategory.target || prevCategory\n      }\n\n      Data.categories.push(category)\n\n      for (const emoji of category.emojis) {\n        Data.emojis[emoji.id] = emoji\n      }\n    }\n  }\n\n  if (props.categories) {\n    Data.categories = Data.categories\n      .filter((c) => {\n        return props.categories.indexOf(c.id) != -1\n      })\n      .sort((c1, c2) => {\n        const i1 = props.categories.indexOf(c1.id)\n        const i2 = props.categories.indexOf(c2.id)\n\n        return i1 - i2\n      })\n  }\n\n  let latestVersionSupport = null\n  let noCountryFlags = null\n  if (set == 'native') {\n    latestVersionSupport = NativeSupport.latestVersion()\n    noCountryFlags = props.noCountryFlags || NativeSupport.noCountryFlags()\n  }\n\n  let categoryIndex = Data.categories.length\n  let resetSearchIndex = false\n  while (categoryIndex--) {\n    const category = Data.categories[categoryIndex]\n\n    if (category.id == 'frequent') {\n      let { maxFrequentRows, perLine } = props\n      maxFrequentRows || (maxFrequentRows = PickerProps.maxFrequentRows.value)\n      perLine || (perLine = PickerProps.perLine.value)\n\n      category.emojis = FrequentlyUsed.get({ maxFrequentRows, perLine })\n    }\n\n    if (!category.emojis || !category.emojis.length) {\n      Data.categories.splice(categoryIndex, 1)\n      continue\n    }\n\n    const { categoryIcons } = props\n    if (categoryIcons) {\n      const icon = categoryIcons[category.id]\n      if (icon && !category.icon) {\n        category.icon = icon\n      }\n    }\n\n    let emojiIndex = category.emojis.length\n    while (emojiIndex--) {\n      const emojiId = category.emojis[emojiIndex]\n      const emoji = emojiId.id ? emojiId : Data.emojis[emojiId]\n\n      const ignore = () => {\n        category.emojis.splice(emojiIndex, 1)\n      }\n\n      if (!emoji) {\n        ignore()\n        continue\n      }\n\n      if (latestVersionSupport && emoji.version > latestVersionSupport) {\n        ignore()\n        continue\n      }\n\n      if (noCountryFlags && category.id == 'flags') {\n        if (!SafeFlags.includes(emoji.id)) {\n          ignore()\n          continue\n        }\n      }\n\n      if (!emoji.search) {\n        resetSearchIndex = true\n        emoji.search =\n          ',' +\n          [\n            [emoji.id, false],\n            [emoji.name, true],\n            [emoji.keywords, false],\n            [emoji.emoticons, false],\n          ]\n            .map(([strings, split]) => {\n              if (!strings) return\n              return (Array.isArray(strings) ? strings : [strings])\n                .map((string) => {\n                  return (split ? string.split(/[-|_|\\s]+/) : [string]).map(\n                    (s) => s.toLowerCase(),\n                  )\n                })\n                .flat()\n            })\n            .flat()\n            .filter((a) => a && a.trim())\n            .join(',')\n\n        if (emoji.emoticons) {\n          for (const emoticon of emoji.emoticons) {\n            if (Data.emoticons[emoticon]) continue\n            Data.emoticons[emoticon] = emoji.id\n          }\n        }\n\n        let skinIndex = 0\n        for (const skin of emoji.skins) {\n          if (!skin) continue\n          skinIndex++\n\n          const { native } = skin\n          if (native) {\n            Data.natives[native] = emoji.id\n            emoji.search += `,${native}`\n          }\n\n          const skinShortcodes =\n            skinIndex == 1 ? '' : `:skin-tone-${skinIndex}:`\n          skin.shortcodes = `:${emoji.id}:${skinShortcodes}`\n        }\n      }\n    }\n  }\n\n  if (resetSearchIndex) {\n    SearchIndex.reset()\n  }\n\n  initCallback()\n}\n\nexport function getProps(props, defaultProps, element) {\n  props || (props = {})\n\n  const _props = {}\n  for (let k in defaultProps) {\n    _props[k] = getProp(k, props, defaultProps, element)\n  }\n\n  return _props\n}\n\nexport function getProp(propName, props, defaultProps, element) {\n  const defaults = defaultProps[propName]\n  let value =\n    (element && element.getAttribute(propName)) ||\n    (props[propName] != null && props[propName] != undefined\n      ? props[propName]\n      : null)\n\n  if (!defaults) {\n    return value\n  }\n\n  if (\n    value != null &&\n    defaults.value &&\n    typeof defaults.value != typeof value\n  ) {\n    if (typeof defaults.value == 'boolean') {\n      value = value == 'false' ? false : true\n    } else {\n      value = defaults.value.constructor(value)\n    }\n  }\n\n  if (defaults.transform && value) {\n    value = defaults.transform(value)\n  }\n\n  if (\n    value == null ||\n    (defaults.choices && defaults.choices.indexOf(value) == -1)\n  ) {\n    value = defaults.value\n  }\n\n  return value\n}\n", "{\n  \"search\": \"Search\",\n  \"search_no_results_1\": \"Oh no!\",\n  \"search_no_results_2\": \"That emoji couldn’t be found\",\n  \"pick\": \"Pick an emoji…\",\n  \"add_custom\": \"Add custom emoji\",\n  \"categories\": {\n    \"activity\": \"Activity\",\n    \"custom\": \"Custom\",\n    \"flags\": \"Flags\",\n    \"foods\": \"Food & Drink\",\n    \"frequent\": \"Frequently used\",\n    \"nature\": \"Animals & Nature\",\n    \"objects\": \"Objects\",\n    \"people\": \"Smileys & People\",\n    \"places\": \"Travel & Places\",\n    \"search\": \"Search Results\",\n    \"symbols\": \"Symbols\"\n  },\n  \"skins\": {\n    \"choose\": \"Choose default skin tone\",\n    \"1\": \"Default\",\n    \"2\": \"Light\",\n    \"3\": \"Medium-Light\",\n    \"4\": \"Medium\",\n    \"5\": \"Medium-Dark\",\n    \"6\": \"Dark\"\n  }\n}\n", "export default {\n  autoFocus: {\n    value: false,\n  },\n  emojiButtonColors: {\n    value: null,\n  },\n  emojiButtonRadius: {\n    value: '100%',\n  },\n  emojiButtonSize: {\n    value: 36,\n  },\n  emojiSize: {\n    value: 24,\n  },\n  emojiVersion: {\n    value: 14,\n    choices: [1, 2, 3, 4, 5, 11, 12, 12.1, 13, 13.1, 14],\n  },\n  icons: {\n    value: 'auto',\n    choices: ['auto', 'outline', 'solid'],\n  },\n  locale: {\n    value: 'en',\n    choices: [\n      'en',\n      'ar',\n      'cs',\n      'de',\n      'es',\n      'fa',\n      'fi',\n      'fr',\n      'it',\n      'ja',\n      'nl',\n      'pl',\n      'pt',\n      'ru',\n      'uk',\n      'zh',\n    ],\n  },\n  maxFrequentRows: {\n    value: 4,\n  },\n  navPosition: {\n    value: 'top',\n    choices: ['top', 'bottom', 'none'],\n  },\n  noCountryFlags: {\n    value: false,\n  },\n  noResultsEmoji: {\n    value: null,\n  },\n  perLine: {\n    value: 9,\n  },\n  previewEmoji: {\n    value: null,\n  },\n  previewPosition: {\n    value: 'bottom',\n    choices: ['top', 'bottom', 'none'],\n  },\n  searchPosition: {\n    value: 'sticky',\n    choices: ['sticky', 'static', 'none'],\n  },\n  set: {\n    value: 'native',\n    choices: ['native', 'apple', 'facebook', 'google', 'twitter'],\n  },\n  skin: {\n    value: 1,\n    choices: [1, 2, 3, 4, 5, 6],\n  },\n  skinTonePosition: {\n    value: 'preview',\n    choices: ['preview', 'search', 'none'],\n  },\n  theme: {\n    value: 'auto',\n    choices: ['auto', 'light', 'dark'],\n  },\n\n  // Data\n  categories: null,\n  categoryIcons: null,\n  custom: null,\n  data: null,\n  i18n: null,\n\n  // Callbacks\n  getImageURL: null,\n  getSpritesheetURL: null,\n  onAddCustomEmoji: null,\n  onClickOutside: null,\n  onEmojiSelect: null,\n\n  // Deprecated\n  stickySearch: {\n    deprecated: true,\n    value: true,\n  },\n}\n", "const categories = {\n  activity: {\n    outline: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n        <path d=\"M12 0C5.373 0 0 5.372 0 12c0 6.627 5.373 12 12 12 6.628 0 12-5.373 12-12 0-6.628-5.372-12-12-12m9.949 11H17.05c.224-2.527 1.232-4.773 1.968-6.113A9.966 9.966 0 0 1 21.949 11M13 11V2.051a9.945 9.945 0 0 1 4.432 1.564c-.858 1.491-2.156 4.22-2.392 7.385H13zm-2 0H8.961c-.238-3.165-1.536-5.894-2.393-7.385A9.95 9.95 0 0 1 11 2.051V11zm0 2v8.949a9.937 9.937 0 0 1-4.432-1.564c.857-1.492 2.155-4.221 2.393-7.385H11zm4.04 0c.236 3.164 1.534 5.893 2.392 7.385A9.92 9.92 0 0 1 13 21.949V13h2.04zM4.982 4.887C5.718 6.227 6.726 8.473 6.951 11h-4.9a9.977 9.977 0 0 1 2.931-6.113M2.051 13h4.9c-.226 2.527-1.233 4.771-1.969 6.113A9.972 9.972 0 0 1 2.051 13m16.967 6.113c-.735-1.342-1.744-3.586-1.968-6.113h4.899a9.961 9.961 0 0 1-2.931 6.113\" />\n      </svg>\n    ),\n    solid: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n        <path d=\"M16.17 337.5c0 44.98 7.565 83.54 13.98 107.9C35.22 464.3 50.46 496 174.9 496c9.566 0 19.59-.4707 29.84-1.271L17.33 307.3C16.53 317.6 16.17 327.7 16.17 337.5zM495.8 174.5c0-44.98-7.565-83.53-13.98-107.9c-4.688-17.54-18.34-31.23-36.04-35.95C435.5 27.91 392.9 16 337 16c-9.564 0-19.59 .4707-29.84 1.271l187.5 187.5C495.5 194.4 495.8 184.3 495.8 174.5zM26.77 248.8l236.3 236.3c142-36.1 203.9-150.4 222.2-221.1L248.9 26.87C106.9 62.96 45.07 177.2 26.77 248.8zM256 335.1c0 9.141-7.474 16-16 16c-4.094 0-8.188-1.564-11.31-4.689L164.7 283.3C161.6 280.2 160 276.1 160 271.1c0-8.529 6.865-16 16-16c4.095 0 8.189 1.562 11.31 4.688l64.01 64C254.4 327.8 256 331.9 256 335.1zM304 287.1c0 9.141-7.474 16-16 16c-4.094 0-8.188-1.564-11.31-4.689L212.7 235.3C209.6 232.2 208 228.1 208 223.1c0-9.141 7.473-16 16-16c4.094 0 8.188 1.562 11.31 4.688l64.01 64.01C302.5 279.8 304 283.9 304 287.1zM256 175.1c0-9.141 7.473-16 16-16c4.094 0 8.188 1.562 11.31 4.688l64.01 64.01c3.125 3.125 4.688 7.219 4.688 11.31c0 9.133-7.468 16-16 16c-4.094 0-8.189-1.562-11.31-4.688l-64.01-64.01C257.6 184.2 256 180.1 256 175.1z\" />\n      </svg>\n    ),\n  },\n\n  custom: (\n    <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\">\n      <path d=\"M417.1 368c-5.937 10.27-16.69 16-27.75 16c-5.422 0-10.92-1.375-15.97-4.281L256 311.4V448c0 17.67-14.33 32-31.1 32S192 465.7 192 448V311.4l-118.3 68.29C68.67 382.6 63.17 384 57.75 384c-11.06 0-21.81-5.734-27.75-16c-8.828-15.31-3.594-34.88 11.72-43.72L159.1 256L41.72 187.7C26.41 178.9 21.17 159.3 29.1 144C36.63 132.5 49.26 126.7 61.65 128.2C65.78 128.7 69.88 130.1 73.72 132.3L192 200.6V64c0-17.67 14.33-32 32-32S256 46.33 256 64v136.6l118.3-68.29c3.838-2.213 7.939-3.539 12.07-4.051C398.7 126.7 411.4 132.5 417.1 144c8.828 15.31 3.594 34.88-11.72 43.72L288 256l118.3 68.28C421.6 333.1 426.8 352.7 417.1 368z\" />\n    </svg>\n  ),\n\n  flags: {\n    outline: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n        <path d=\"M0 0l6.084 24H8L1.916 0zM21 5h-4l-1-4H4l3 12h3l1 4h13L21 5zM6.563 3h7.875l2 8H8.563l-2-8zm8.832 10l-2.856 1.904L12.063 13h3.332zM19 13l-1.5-6h1.938l2 8H16l3-2z\" />\n      </svg>\n    ),\n    solid: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n        <path d=\"M64 496C64 504.8 56.75 512 48 512h-32C7.25 512 0 504.8 0 496V32c0-17.75 14.25-32 32-32s32 14.25 32 32V496zM476.3 0c-6.365 0-13.01 1.35-19.34 4.233c-45.69 20.86-79.56 27.94-107.8 27.94c-59.96 0-94.81-31.86-163.9-31.87C160.9 .3055 131.6 4.867 96 15.75v350.5c32-9.984 59.87-14.1 84.85-14.1c73.63 0 124.9 31.78 198.6 31.78c31.91 0 68.02-5.971 111.1-23.09C504.1 355.9 512 344.4 512 332.1V30.73C512 11.1 495.3 0 476.3 0z\" />\n      </svg>\n    ),\n  },\n\n  foods: {\n    outline: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n        <path d=\"M17 4.978c-1.838 0-2.876.396-3.68.934.513-1.172 1.768-2.934 4.68-2.934a1 1 0 0 0 0-2c-2.921 0-4.629 1.365-5.547 2.512-.064.078-.119.162-.18.244C11.73 1.838 10.798.023 9.207.023 8.579.022 7.85.306 7 .978 5.027 2.54 5.329 3.902 6.492 4.999 3.609 5.222 0 7.352 0 12.969c0 4.582 4.961 11.009 9 11.009 1.975 0 2.371-.486 3-1 .629.514 1.025 1 3 1 4.039 0 9-6.418 9-11 0-5.953-4.055-8-7-8M8.242 2.546c.641-.508.943-.523.965-.523.426.169.975 1.405 1.357 3.055-1.527-.629-2.741-1.352-2.98-1.846.059-.112.241-.356.658-.686M15 21.978c-1.08 0-1.21-.109-1.559-.402l-.176-.146c-.367-.302-.816-.452-1.266-.452s-.898.15-1.266.452l-.176.146c-.347.292-.477.402-1.557.402-2.813 0-7-5.389-7-9.009 0-5.823 4.488-5.991 5-5.991 1.939 0 2.484.471 3.387 1.251l.323.276a1.995 1.995 0 0 0 2.58 0l.323-.276c.902-.78 1.447-1.251 3.387-1.251.512 0 5 .168 5 6 0 3.617-4.187 9-7 9\" />\n      </svg>\n    ),\n    solid: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n        <path d=\"M481.9 270.1C490.9 279.1 496 291.3 496 304C496 316.7 490.9 328.9 481.9 337.9C472.9 346.9 460.7 352 448 352H64C51.27 352 39.06 346.9 30.06 337.9C21.06 328.9 16 316.7 16 304C16 291.3 21.06 279.1 30.06 270.1C39.06 261.1 51.27 256 64 256H448C460.7 256 472.9 261.1 481.9 270.1zM475.3 388.7C478.3 391.7 480 395.8 480 400V416C480 432.1 473.3 449.3 461.3 461.3C449.3 473.3 432.1 480 416 480H96C79.03 480 62.75 473.3 50.75 461.3C38.74 449.3 32 432.1 32 416V400C32 395.8 33.69 391.7 36.69 388.7C39.69 385.7 43.76 384 48 384H464C468.2 384 472.3 385.7 475.3 388.7zM50.39 220.8C45.93 218.6 42.03 215.5 38.97 211.6C35.91 207.7 33.79 203.2 32.75 198.4C31.71 193.5 31.8 188.5 32.99 183.7C54.98 97.02 146.5 32 256 32C365.5 32 457 97.02 479 183.7C480.2 188.5 480.3 193.5 479.2 198.4C478.2 203.2 476.1 207.7 473 211.6C469.1 215.5 466.1 218.6 461.6 220.8C457.2 222.9 452.3 224 447.3 224H64.67C59.73 224 54.84 222.9 50.39 220.8zM372.7 116.7C369.7 119.7 368 123.8 368 128C368 131.2 368.9 134.3 370.7 136.9C372.5 139.5 374.1 141.6 377.9 142.8C380.8 143.1 384 144.3 387.1 143.7C390.2 143.1 393.1 141.6 395.3 139.3C397.6 137.1 399.1 134.2 399.7 131.1C400.3 128 399.1 124.8 398.8 121.9C397.6 118.1 395.5 116.5 392.9 114.7C390.3 112.9 387.2 111.1 384 111.1C379.8 111.1 375.7 113.7 372.7 116.7V116.7zM244.7 84.69C241.7 87.69 240 91.76 240 96C240 99.16 240.9 102.3 242.7 104.9C244.5 107.5 246.1 109.6 249.9 110.8C252.8 111.1 256 112.3 259.1 111.7C262.2 111.1 265.1 109.6 267.3 107.3C269.6 105.1 271.1 102.2 271.7 99.12C272.3 96.02 271.1 92.8 270.8 89.88C269.6 86.95 267.5 84.45 264.9 82.7C262.3 80.94 259.2 79.1 256 79.1C251.8 79.1 247.7 81.69 244.7 84.69V84.69zM116.7 116.7C113.7 119.7 112 123.8 112 128C112 131.2 112.9 134.3 114.7 136.9C116.5 139.5 118.1 141.6 121.9 142.8C124.8 143.1 128 144.3 131.1 143.7C134.2 143.1 137.1 141.6 139.3 139.3C141.6 137.1 143.1 134.2 143.7 131.1C144.3 128 143.1 124.8 142.8 121.9C141.6 118.1 139.5 116.5 136.9 114.7C134.3 112.9 131.2 111.1 128 111.1C123.8 111.1 119.7 113.7 116.7 116.7L116.7 116.7z\" />\n      </svg>\n    ),\n  },\n\n  frequent: {\n    outline: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n        <path d=\"M13 4h-2l-.001 7H9v2h2v2h2v-2h4v-2h-4z\" />\n        <path d=\"M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0m0 22C6.486 22 2 17.514 2 12S6.486 2 12 2s10 4.486 10 10-4.486 10-10 10\" />\n      </svg>\n    ),\n    solid: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n        <path d=\"M256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512zM232 256C232 264 236 271.5 242.7 275.1L338.7 339.1C349.7 347.3 364.6 344.3 371.1 333.3C379.3 322.3 376.3 307.4 365.3 300L280 243.2V120C280 106.7 269.3 96 255.1 96C242.7 96 231.1 106.7 231.1 120L232 256z\" />\n      </svg>\n    ),\n  },\n\n  nature: {\n    outline: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n        <path d=\"M15.5 8a1.5 1.5 0 1 0 .001 3.001A1.5 1.5 0 0 0 15.5 8M8.5 8a1.5 1.5 0 1 0 .001 3.001A1.5 1.5 0 0 0 8.5 8\" />\n        <path d=\"M18.933 0h-.027c-.97 0-2.138.787-3.018 1.497-1.274-.374-2.612-.51-3.887-.51-1.285 0-2.616.133-3.874.517C7.245.79 6.069 0 5.093 0h-.027C3.352 0 .07 2.67.002 7.026c-.039 2.479.276 4.238 1.04 5.013.254.258.882.677 1.295.882.191 3.177.922 5.238 2.536 6.38.897.637 2.187.949 3.2 1.102C8.04 20.6 8 20.795 8 21c0 1.773 2.35 3 4 3 1.648 0 4-1.227 4-3 0-.201-.038-.393-.072-.586 2.573-.385 5.435-1.877 5.925-7.587.396-.22.887-.568 1.104-.788.763-.774 1.079-2.534 1.04-5.013C23.929 2.67 20.646 0 18.933 0M3.223 9.135c-.237.281-.837 1.155-.884 1.238-.15-.41-.368-1.349-.337-3.291.051-3.281 2.478-4.972 3.091-5.031.256.015.731.27 1.265.646-1.11 1.171-2.275 2.915-2.352 5.125-.133.546-.398.858-.783 1.313M12 22c-.901 0-1.954-.693-2-1 0-.654.475-1.236 1-1.602V20a1 1 0 1 0 2 0v-.602c.524.365 1 .947 1 1.602-.046.307-1.099 1-2 1m3-3.48v.02a4.752 4.752 0 0 0-1.262-1.02c1.092-.516 2.239-1.334 2.239-2.217 0-1.842-1.781-2.195-3.977-2.195-2.196 0-3.978.354-3.978 2.195 0 .883 1.148 1.701 2.238 2.217A4.8 4.8 0 0 0 9 18.539v-.025c-1-.076-2.182-.281-2.973-.842-1.301-.92-1.838-3.045-1.853-6.478l.023-.041c.496-.826 1.49-1.45 1.804-3.102 0-2.047 1.357-3.631 2.362-4.522C9.37 3.178 10.555 3 11.948 3c1.447 0 2.685.192 3.733.57 1 .9 2.316 2.465 2.316 4.48.313 1.651 1.307 2.275 1.803 3.102.035.058.068.117.102.178-.059 5.967-1.949 7.01-4.902 7.19m6.628-8.202c-.037-.065-.074-.13-.113-.195a7.587 7.587 0 0 0-.739-.987c-.385-.455-.648-.768-.782-1.313-.076-2.209-1.241-3.954-2.353-5.124.531-.376 1.004-.63 1.261-.647.636.071 3.044 1.764 3.096 5.031.027 1.81-.347 3.218-.37 3.235\" />\n      </svg>\n    ),\n    solid: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 576 512\">\n        <path d=\"M332.7 19.85C334.6 8.395 344.5 0 356.1 0C363.6 0 370.6 3.52 375.1 9.502L392 32H444.1C456.8 32 469.1 37.06 478.1 46.06L496 64H552C565.3 64 576 74.75 576 88V112C576 156.2 540.2 192 496 192H426.7L421.6 222.5L309.6 158.5L332.7 19.85zM448 64C439.2 64 432 71.16 432 80C432 88.84 439.2 96 448 96C456.8 96 464 88.84 464 80C464 71.16 456.8 64 448 64zM416 256.1V480C416 497.7 401.7 512 384 512H352C334.3 512 320 497.7 320 480V364.8C295.1 377.1 268.8 384 240 384C211.2 384 184 377.1 160 364.8V480C160 497.7 145.7 512 128 512H96C78.33 512 64 497.7 64 480V249.8C35.23 238.9 12.64 214.5 4.836 183.3L.9558 167.8C-3.331 150.6 7.094 133.2 24.24 128.1C41.38 124.7 58.76 135.1 63.05 152.2L66.93 167.8C70.49 182 83.29 191.1 97.97 191.1H303.8L416 256.1z\" />\n      </svg>\n    ),\n  },\n\n  objects: {\n    outline: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n        <path d=\"M12 0a9 9 0 0 0-5 16.482V21s2.035 3 5 3 5-3 5-3v-4.518A9 9 0 0 0 12 0zm0 2c3.86 0 7 3.141 7 7s-3.14 7-7 7-7-3.141-7-7 3.14-7 7-7zM9 17.477c.94.332 1.946.523 3 .523s2.06-.19 3-.523v.834c-.91.436-1.925.689-3 .689a6.924 6.924 0 0 1-3-.69v-.833zm.236 3.07A8.854 8.854 0 0 0 12 21c.965 0 1.888-.167 2.758-.451C14.155 21.173 13.153 22 12 22c-1.102 0-2.117-.789-2.764-1.453z\" />\n        <path d=\"M14.745 12.449h-.004c-.852-.024-1.188-.858-1.577-1.824-.421-1.061-.703-1.561-1.182-1.566h-.009c-.481 0-.783.497-1.235 1.537-.436.982-.801 1.811-1.636 1.791l-.276-.043c-.565-.171-.853-.691-1.284-1.794-.125-.313-.202-.632-.27-.913-.051-.213-.127-.53-.195-.634C7.067 9.004 7.039 9 6.99 9A1 1 0 0 1 7 7h.01c1.662.017 2.015 1.373 2.198 2.134.486-.981 1.304-2.058 2.797-2.075 1.531.018 2.28 1.153 2.731 2.141l.002-.008C14.944 8.424 15.327 7 16.979 7h.032A1 1 0 1 1 17 9h-.011c-.149.076-.256.474-.319.709a6.484 6.484 0 0 1-.311.951c-.429.973-.79 1.789-1.614 1.789\" />\n      </svg>\n    ),\n    solid: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\">\n        <path d=\"M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM191.4 .0132C89.44 .3257 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.61 288.9-.2837 191.4 .0132zM192 96.01c-44.13 0-80 35.89-80 79.1C112 184.8 104.8 192 96 192S80 184.8 80 176c0-61.76 50.25-111.1 112-111.1c8.844 0 16 7.159 16 16S200.8 96.01 192 96.01z\" />\n      </svg>\n    ),\n  },\n\n  people: {\n    outline: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n        <path d=\"M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0m0 22C6.486 22 2 17.514 2 12S6.486 2 12 2s10 4.486 10 10-4.486 10-10 10\" />\n        <path d=\"M8 7a2 2 0 1 0-.001 3.999A2 2 0 0 0 8 7M16 7a2 2 0 1 0-.001 3.999A2 2 0 0 0 16 7M15.232 15c-.693 1.195-1.87 2-3.349 2-1.477 0-2.655-.805-3.347-2H15m3-2H6a6 6 0 1 0 12 0\" />\n      </svg>\n    ),\n    solid: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n        <path d=\"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 432C332.1 432 396.2 382 415.2 314.1C419.1 300.4 407.8 288 393.6 288H118.4C104.2 288 92.92 300.4 96.76 314.1C115.8 382 179.9 432 256 432V432zM176.4 160C158.7 160 144.4 174.3 144.4 192C144.4 209.7 158.7 224 176.4 224C194 224 208.4 209.7 208.4 192C208.4 174.3 194 160 176.4 160zM336.4 224C354 224 368.4 209.7 368.4 192C368.4 174.3 354 160 336.4 160C318.7 160 304.4 174.3 304.4 192C304.4 209.7 318.7 224 336.4 224z\" />\n      </svg>\n    ),\n  },\n\n  places: {\n    outline: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n        <path d=\"M6.5 12C5.122 12 4 13.121 4 14.5S5.122 17 6.5 17 9 15.879 9 14.5 7.878 12 6.5 12m0 3c-.275 0-.5-.225-.5-.5s.225-.5.5-.5.5.225.5.5-.225.5-.5.5M17.5 12c-1.378 0-2.5 1.121-2.5 2.5s1.122 2.5 2.5 2.5 2.5-1.121 2.5-2.5-1.122-2.5-2.5-2.5m0 3c-.275 0-.5-.225-.5-.5s.225-.5.5-.5.5.225.5.5-.225.5-.5.5\" />\n        <path d=\"M22.482 9.494l-1.039-.346L21.4 9h.6c.552 0 1-.439 1-.992 0-.006-.003-.008-.003-.008H23c0-1-.889-2-1.984-2h-.642l-.731-1.717C19.262 3.012 18.091 2 16.764 2H7.236C5.909 2 4.738 3.012 4.357 4.283L3.626 6h-.642C1.889 6 1 7 1 8h.003S1 8.002 1 8.008C1 8.561 1.448 9 2 9h.6l-.043.148-1.039.346a2.001 2.001 0 0 0-1.359 2.097l.751 7.508a1 1 0 0 0 .994.901H3v1c0 1.103.896 2 2 2h2c1.104 0 2-.897 2-2v-1h6v1c0 1.103.896 2 2 2h2c1.104 0 2-.897 2-2v-1h1.096a.999.999 0 0 0 .994-.901l.751-7.508a2.001 2.001 0 0 0-1.359-2.097M6.273 4.857C6.402 4.43 6.788 4 7.236 4h9.527c.448 0 .834.43.963.857L19.313 9H4.688l1.585-4.143zM7 21H5v-1h2v1zm12 0h-2v-1h2v1zm2.189-3H2.811l-.662-6.607L3 11h18l.852.393L21.189 18z\" />\n      </svg>\n    ),\n    solid: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n        <path d=\"M39.61 196.8L74.8 96.29C88.27 57.78 124.6 32 165.4 32H346.6C387.4 32 423.7 57.78 437.2 96.29L472.4 196.8C495.6 206.4 512 229.3 512 256V448C512 465.7 497.7 480 480 480H448C430.3 480 416 465.7 416 448V400H96V448C96 465.7 81.67 480 64 480H32C14.33 480 0 465.7 0 448V256C0 229.3 16.36 206.4 39.61 196.8V196.8zM109.1 192H402.9L376.8 117.4C372.3 104.6 360.2 96 346.6 96H165.4C151.8 96 139.7 104.6 135.2 117.4L109.1 192zM96 256C78.33 256 64 270.3 64 288C64 305.7 78.33 320 96 320C113.7 320 128 305.7 128 288C128 270.3 113.7 256 96 256zM416 320C433.7 320 448 305.7 448 288C448 270.3 433.7 256 416 256C398.3 256 384 270.3 384 288C384 305.7 398.3 320 416 320z\" />\n      </svg>\n    ),\n  },\n\n  symbols: {\n    outline: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n        <path d=\"M0 0h11v2H0zM4 11h3V6h4V4H0v2h4zM15.5 17c1.381 0 2.5-1.116 2.5-2.493s-1.119-2.493-2.5-2.493S13 13.13 13 14.507 14.119 17 15.5 17m0-2.986c.276 0 .5.222.5.493 0 .272-.224.493-.5.493s-.5-.221-.5-.493.224-.493.5-.493M21.5 19.014c-1.381 0-2.5 1.116-2.5 2.493S20.119 24 21.5 24s2.5-1.116 2.5-2.493-1.119-2.493-2.5-2.493m0 2.986a.497.497 0 0 1-.5-.493c0-.271.224-.493.5-.493s.5.222.5.493a.497.497 0 0 1-.5.493M22 13l-9 9 1.513 1.5 8.99-9.009zM17 11c2.209 0 4-1.119 4-2.5V2s.985-.161 1.498.949C23.01 4.055 23 6 23 6s1-1.119 1-3.135C24-.02 21 0 21 0h-2v6.347A5.853 5.853 0 0 0 17 6c-2.209 0-4 1.119-4 2.5s1.791 2.5 4 2.5M10.297 20.482l-1.475-1.585a47.54 47.54 0 0 1-1.442 1.129c-.307-.288-.989-1.016-2.045-2.183.902-.836 1.479-1.466 1.729-1.892s.376-.871.376-1.336c0-.592-.273-1.178-.818-1.759-.546-.581-1.329-.871-2.349-.871-1.008 0-1.79.293-2.344.879-.556.587-.832 1.181-.832 1.784 0 .813.419 1.748 1.256 2.805-.847.614-1.444 1.208-1.794 1.784a3.465 3.465 0 0 0-.523 1.833c0 .857.308 1.56.924 2.107.616.549 1.423.823 2.42.823 1.173 0 2.444-.379 3.813-1.137L8.235 24h2.819l-2.09-2.383 1.333-1.135zm-6.736-6.389a1.02 1.02 0 0 1 .73-.286c.31 0 .559.085.747.254a.849.849 0 0 1 .283.659c0 .518-.419 1.112-1.257 1.784-.536-.651-.805-1.231-.805-1.742a.901.901 0 0 1 .302-.669M3.74 22c-.427 0-.778-.116-1.057-.349-.279-.232-.418-.487-.418-.766 0-.594.509-1.288 1.527-2.083.968 1.134 1.717 1.946 2.248 2.438-.921.507-1.686.76-2.3.76\" />\n      </svg>\n    ),\n    solid: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n        <path d=\"M500.3 7.251C507.7 13.33 512 22.41 512 31.1V175.1C512 202.5 483.3 223.1 447.1 223.1C412.7 223.1 383.1 202.5 383.1 175.1C383.1 149.5 412.7 127.1 447.1 127.1V71.03L351.1 90.23V207.1C351.1 234.5 323.3 255.1 287.1 255.1C252.7 255.1 223.1 234.5 223.1 207.1C223.1 181.5 252.7 159.1 287.1 159.1V63.1C287.1 48.74 298.8 35.61 313.7 32.62L473.7 .6198C483.1-1.261 492.9 1.173 500.3 7.251H500.3zM74.66 303.1L86.5 286.2C92.43 277.3 102.4 271.1 113.1 271.1H174.9C185.6 271.1 195.6 277.3 201.5 286.2L213.3 303.1H239.1C266.5 303.1 287.1 325.5 287.1 351.1V463.1C287.1 490.5 266.5 511.1 239.1 511.1H47.1C21.49 511.1-.0019 490.5-.0019 463.1V351.1C-.0019 325.5 21.49 303.1 47.1 303.1H74.66zM143.1 359.1C117.5 359.1 95.1 381.5 95.1 407.1C95.1 434.5 117.5 455.1 143.1 455.1C170.5 455.1 191.1 434.5 191.1 407.1C191.1 381.5 170.5 359.1 143.1 359.1zM440.3 367.1H496C502.7 367.1 508.6 372.1 510.1 378.4C513.3 384.6 511.6 391.7 506.5 396L378.5 508C372.9 512.1 364.6 513.3 358.6 508.9C352.6 504.6 350.3 496.6 353.3 489.7L391.7 399.1H336C329.3 399.1 323.4 395.9 321 389.6C318.7 383.4 320.4 376.3 325.5 371.1L453.5 259.1C459.1 255 467.4 254.7 473.4 259.1C479.4 263.4 481.6 271.4 478.7 278.3L440.3 367.1zM116.7 219.1L19.85 119.2C-8.112 90.26-6.614 42.31 24.85 15.34C51.82-8.137 93.26-3.642 118.2 21.83L128.2 32.32L137.7 21.83C162.7-3.642 203.6-8.137 231.6 15.34C262.6 42.31 264.1 90.26 236.1 119.2L139.7 219.1C133.2 225.6 122.7 225.6 116.7 219.1H116.7z\" />\n      </svg>\n    ),\n  },\n}\n\nconst search = {\n  loupe: (\n    <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\">\n      <path d=\"M12.9 14.32a8 8 0 1 1 1.41-1.41l5.35 5.33-1.42 1.42-5.33-5.34zM8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12z\" />\n    </svg>\n  ),\n\n  delete: (\n    <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\">\n      <path d=\"M10 8.586L2.929 1.515 1.515 2.929 8.586 10l-7.071 7.071 1.414 1.414L10 11.414l7.071 7.071 1.414-1.414L11.414 10l7.071-7.071-1.414-1.414L10 8.586z\" />\n    </svg>\n  ),\n}\n\nexport default { categories, search }\n", "export { default as Emoji } from './Emoji.js'\nexport { default as EmojiElement } from './EmojiElement.js'\n", "import { Data } from '../../config'\nimport { SearchIndex } from '../../helpers'\n\nexport default function Emoji(props) {\n  let { id, skin, emoji } = props\n\n  if (props.shortcodes) {\n    const matches = props.shortcodes.match(SearchIndex.SHORTCODES_REGEX)\n\n    if (matches) {\n      id = matches[1]\n\n      if (matches[2]) {\n        skin = matches[2]\n      }\n    }\n  }\n\n  emoji || (emoji = SearchIndex.get(id || props.native))\n  if (!emoji) return props.fallback\n\n  const emojiSkin = emoji.skins[skin - 1] || emoji.skins[0]\n\n  const imageSrc =\n    emojiSkin.src ||\n    (props.set != 'native' && !props.spritesheet\n      ? typeof props.getImageURL === 'function'\n        ? props.getImageURL(props.set, emojiSkin.unified)\n        : `https://cdn.jsdelivr.net/npm/emoji-datasource-${props.set}@14.0.0/img/${props.set}/64/${emojiSkin.unified}.png`\n      : undefined)\n\n  const spritesheetSrc =\n    typeof props.getSpritesheetURL === 'function'\n      ? props.getSpritesheetURL(props.set)\n      : `https://cdn.jsdelivr.net/npm/emoji-datasource-${props.set}@14.0.0/img/${props.set}/sheets-256/64.png`\n\n  return (\n    <span class=\"emoji-mart-emoji\" data-emoji-set={props.set}>\n      {imageSrc ? (\n        <img\n          style={{\n            height: props.size || '1em',\n            width: 'auto',\n            display: 'inline-block',\n            position: 'relative',\n            top: '.1em',\n          }}\n          alt={emojiSkin.native || emojiSkin.shortcodes}\n          src={imageSrc}\n        />\n      ) : props.set == 'native' ? (\n        <span\n          style={{\n            fontSize: props.size,\n            fontFamily:\n              '\"EmojiMart\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Segoe UI\", \"Apple Color Emoji\", \"Twemoji Mozilla\", \"Noto Color Emoji\", \"Android Emoji\"',\n          }}\n        >\n          {emojiSkin.native}\n        </span>\n      ) : (\n        <span\n          style={{\n            display: 'block',\n            width: props.size,\n            height: props.size,\n            backgroundImage: `url(${spritesheetSrc})`,\n            backgroundSize: `${100 * Data.sheet.cols}% ${\n              100 * Data.sheet.rows\n            }%`,\n            backgroundPosition: `${\n              (100 / (Data.sheet.cols - 1)) * emojiSkin.x\n            }% ${(100 / (Data.sheet.rows - 1)) * emojiSkin.y}%`,\n          }}\n        ></span>\n      )}\n    </span>\n  )\n}\n", "import { render } from 'preact'\n\nimport { init, getProps } from '../../config'\nimport { HTMLElement } from '../HTMLElement'\nimport { Emoji } from '.'\nimport EmojiProps from './EmojiProps'\n\nexport default class EmojiElement extends HTMLElement {\n  static Props = EmojiProps\n\n  constructor(props) {\n    super(props)\n  }\n\n  async connectedCallback() {\n    const props = getProps(this.props, EmojiProps, this)\n    props.element = this\n    props.ref = (component) => {\n      this.component = component\n    }\n\n    await init()\n    render(<Emoji {...props} />, this)\n  }\n}\n\nif (typeof customElements !== 'undefined' && !customElements.get('em-emoji')) {\n  customElements.define('em-emoji', EmojiElement)\n}\n", "export { default as HTMLElement } from './HTMLElement.js'\nexport { default as ShadowElement } from './ShadowElement.js'\n", "import { getProp } from '../../config'\n\nconst WindowHTMLElement =\n  typeof window !== 'undefined' ? window.HTMLElement : Object\n\nexport default class HTMLElement extends WindowHTMLElement {\n  static get observedAttributes() {\n    return Object.keys(this.Props)\n  }\n\n  constructor(props = {}) {\n    super()\n    this.props = props\n\n    if (props.parent || props.ref) {\n      let ref = null\n      const parent = props.parent || (ref = props.ref && props.ref.current)\n\n      if (ref) ref.innerHTML = ''\n      if (parent) parent.appendChild(this)\n    }\n  }\n\n  update(props = {}) {\n    for (let k in props) {\n      this.attributeChangedCallback(k, null, props[k])\n    }\n  }\n\n  attributeChangedCallback(attr, _, newValue) {\n    if (!this.component) return\n\n    const value = getProp(\n      attr,\n      { [attr]: newValue },\n      this.constructor.Props,\n      this,\n    )\n\n    if (this.component.componentWillReceiveProps) {\n      this.component.componentWillReceiveProps({ [attr]: value })\n    } else {\n      this.component.props[attr] = value\n      this.component.forceUpdate()\n    }\n  }\n}\n", "import { HTMLElement } from '.'\n\nexport default class ShadowElement extends HTMLElement {\n  constructor(props, { styles } = {}) {\n    super(props)\n\n    this.setShadow()\n    this.injectStyles(styles)\n  }\n\n  setShadow() {\n    this.attachShadow({ mode: 'open' })\n  }\n\n  injectStyles(styles) {\n    if (!styles) return\n\n    const style = document.createElement('style')\n    style.textContent = styles\n\n    this.shadowRoot.insertBefore(style, this.shadowRoot.firstChild)\n  }\n}\n", "import PickerProps from '../Picker/PickerProps'\n\nexport default {\n  fallback: '',\n  id: '',\n  native: '',\n  shortcodes: '',\n  size: {\n    value: '',\n    transform: (value) => {\n      // If the value is a number, then we assume it’s a pixel value.\n      if (!/\\D/.test(value)) {\n        return `${value}px`\n      }\n\n      return value\n    },\n  },\n\n  // Shared\n  set: PickerProps.set,\n  skin: PickerProps.skin,\n}\n", "export { default as Navigation } from './Navigation.js'\n", "import { PureComponent } from 'preact/compat'\nimport { Data, I18n } from '../../config'\nimport Icons from '../../icons'\n\nconst THEME_ICONS = {\n  light: 'outline',\n  dark: 'solid',\n}\n\nexport default class Navigation extends PureComponent {\n  constructor() {\n    super()\n\n    this.categories = Data.categories.filter((category) => {\n      return !category.target\n    })\n\n    this.state = {\n      categoryId: this.categories[0].id,\n    }\n  }\n\n  renderIcon(category) {\n    const { icon } = category\n\n    if (icon) {\n      if (icon.svg) {\n        return (\n          <span\n            class=\"flex\"\n            dangerouslySetInnerHTML={{ __html: icon.svg }}\n          ></span>\n        )\n      }\n\n      if (icon.src) {\n        return <img src={icon.src} />\n      }\n    }\n\n    const categoryIcons =\n      Icons.categories[category.id] || Icons.categories.custom\n\n    const style =\n      this.props.icons == 'auto'\n        ? THEME_ICONS[this.props.theme]\n        : this.props.icons\n\n    return categoryIcons[style] || categoryIcons\n  }\n\n  render() {\n    let selectedCategoryIndex = null\n\n    return (\n      <nav id=\"nav\" class=\"padding\" data-position={this.props.position}>\n        <div class=\"flex relative\">\n          {this.categories.map((category, i) => {\n            const title = category.name || I18n.categories[category.id]\n            const selected =\n              !this.props.unfocused && category.id == this.state.categoryId\n\n            if (selected) {\n              selectedCategoryIndex = i\n            }\n\n            return (\n              <button\n                aria-label={title}\n                aria-selected={selected || undefined}\n                title={title}\n                type=\"button\"\n                class=\"flex flex-grow flex-center\"\n                onMouseDown={(e) => e.preventDefault()}\n                onClick={() => {\n                  this.props.onClick({ category, i })\n                }}\n              >\n                {this.renderIcon(category)}\n              </button>\n            )\n          })}\n\n          <div\n            class=\"bar\"\n            style={{\n              width: `${100 / this.categories.length}%`,\n              opacity: selectedCategoryIndex == null ? 0 : 1,\n              transform: `translateX(${selectedCategoryIndex * 100}%)`,\n            }}\n          ></div>\n        </div>\n      </nav>\n    )\n  }\n}\n", "import{useState as n,useReducer as t,useEffect as e,useLayoutEffect as r,useRef as u,useImperativeHandle as o,useMemo as i,useCallback as l,useContext as c,useDebugValue as f}from\"preact/hooks\";export*from\"preact/hooks\";import{Component as a,createElement as s,options as h,toChildArray as d,Fragment as v,render as p,hydrate as m,cloneElement as y,createRef as b,createContext as _}from\"preact\";export{createElement,createContext,createRef,Fragment,Component}from\"preact\";function S(n,t){for(var e in t)n[e]=t[e];return n}function C(n,t){for(var e in n)if(\"__source\"!==e&&!(e in t))return!0;for(var r in t)if(\"__source\"!==r&&n[r]!==t[r])return!0;return!1}function E(n){this.props=n}function g(n,t){function e(n){var e=this.props.ref,r=e==n.ref;return!r&&e&&(e.call?e(null):e.current=null),t?!t(this.props,n)||!r:C(this.props,n)}function r(t){return this.shouldComponentUpdate=e,s(n,t)}return r.displayName=\"Memo(\"+(n.displayName||n.name)+\")\",r.prototype.isReactComponent=!0,r.__f=!0,r}(E.prototype=new a).isPureReactComponent=!0,E.prototype.shouldComponentUpdate=function(n,t){return C(this.props,n)||C(this.state,t)};var w=h.__b;h.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),w&&w(n)};var R=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.forward_ref\")||3911;function x(n){function t(t,e){var r=S({},t);return delete r.ref,n(r,(e=t.ref||e)&&(\"object\"!=typeof e||\"current\"in e)?e:null)}return t.$$typeof=R,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName=\"ForwardRef(\"+(n.displayName||n.name)+\")\",t}var N=function(n,t){return null==n?null:d(d(n).map(t))},k={map:N,forEach:N,count:function(n){return n?d(n).length:0},only:function(n){var t=d(n);if(1!==t.length)throw\"Children.only\";return t[0]},toArray:d},A=h.__e;h.__e=function(n,t,e){if(n.then)for(var r,u=t;u=u.__;)if((r=u.__c)&&r.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),r.__c(n,t);A(n,t,e)};var O=h.unmount;function L(){this.__u=0,this.t=null,this.__b=null}function U(n){var t=n.__.__c;return t&&t.__e&&t.__e(n)}function F(n){var t,e,r;function u(u){if(t||(t=n()).then(function(n){e=n.default||n},function(n){r=n}),r)throw r;if(!e)throw t;return s(e,u)}return u.displayName=\"Lazy\",u.__f=!0,u}function M(){this.u=null,this.o=null}h.unmount=function(n){var t=n.__c;t&&t.__R&&t.__R(),t&&!0===n.__h&&(n.type=null),O&&O(n)},(L.prototype=new a).__c=function(n,t){var e=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(e);var u=U(r.__v),o=!1,i=function(){o||(o=!0,e.__R=null,u?u(l):l())};e.__R=i;var l=function(){if(!--r.__u){if(r.state.__e){var n=r.state.__e;r.__v.__k[0]=function n(t,e,r){return t&&(t.__v=null,t.__k=t.__k&&t.__k.map(function(t){return n(t,e,r)}),t.__c&&t.__c.__P===e&&(t.__e&&r.insertBefore(t.__e,t.__d),t.__c.__e=!0,t.__c.__P=r)),t}(n,n.__c.__P,n.__c.__O)}var t;for(r.setState({__e:r.__b=null});t=r.t.pop();)t.forceUpdate()}},c=!0===t.__h;r.__u++||c||r.setState({__e:r.__b=r.__v.__k[0]}),n.then(i,i)},L.prototype.componentWillUnmount=function(){this.t=[]},L.prototype.render=function(n,t){if(this.__b){if(this.__v.__k){var e=document.createElement(\"div\"),r=this.__v.__k[0].__c;this.__v.__k[0]=function n(t,e,r){return t&&(t.__c&&t.__c.__H&&(t.__c.__H.__.forEach(function(n){\"function\"==typeof n.__c&&n.__c()}),t.__c.__H=null),null!=(t=S({},t)).__c&&(t.__c.__P===r&&(t.__c.__P=e),t.__c=null),t.__k=t.__k&&t.__k.map(function(t){return n(t,e,r)})),t}(this.__b,e,r.__O=r.__P)}this.__b=null}var u=t.__e&&s(v,null,n.fallback);return u&&(u.__h=null),[s(v,null,t.__e?null:n.children),u]};var T=function(n,t,e){if(++e[1]===e[0]&&n.o.delete(t),n.props.revealOrder&&(\"t\"!==n.props.revealOrder[0]||!n.o.size))for(e=n.u;e;){for(;e.length>3;)e.pop()();if(e[1]<e[0])break;n.u=e=e[2]}};function D(n){return this.getChildContext=function(){return n.context},n.children}function I(n){var t=this,e=n.i;t.componentWillUnmount=function(){p(null,t.l),t.l=null,t.i=null},t.i&&t.i!==e&&t.componentWillUnmount(),n.__v?(t.l||(t.i=e,t.l={nodeType:1,parentNode:e,childNodes:[],appendChild:function(n){this.childNodes.push(n),t.i.appendChild(n)},insertBefore:function(n,e){this.childNodes.push(n),t.i.appendChild(n)},removeChild:function(n){this.childNodes.splice(this.childNodes.indexOf(n)>>>1,1),t.i.removeChild(n)}}),p(s(D,{context:t.context},n.__v),t.l)):t.l&&t.componentWillUnmount()}function W(n,t){return s(I,{__v:n,i:t})}(M.prototype=new a).__e=function(n){var t=this,e=U(t.__v),r=t.o.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),T(t,n,r)):u()};e?e(o):o()}},M.prototype.render=function(n){this.u=null,this.o=new Map;var t=d(n.children);n.revealOrder&&\"b\"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.o.set(t[e],this.u=[1,0,this.u]);return n.children},M.prototype.componentDidUpdate=M.prototype.componentDidMount=function(){var n=this;this.o.forEach(function(t,e){T(n,e,t)})};var j=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.element\")||60103,P=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,V=\"undefined\"!=typeof document,z=function(n){return(\"undefined\"!=typeof Symbol&&\"symbol\"==typeof Symbol()?/fil|che|rad/i:/fil|che|ra/i).test(n)};function B(n,t,e){return null==t.__k&&(t.textContent=\"\"),p(n,t),\"function\"==typeof e&&e(),n?n.__c:null}function $(n,t,e){return m(n,t),\"function\"==typeof e&&e(),n?n.__c:null}a.prototype.isReactComponent={},[\"componentWillMount\",\"componentWillReceiveProps\",\"componentWillUpdate\"].forEach(function(n){Object.defineProperty(a.prototype,n,{configurable:!0,get:function(){return this[\"UNSAFE_\"+n]},set:function(t){Object.defineProperty(this,n,{configurable:!0,writable:!0,value:t})}})});var H=h.event;function Z(){}function Y(){return this.cancelBubble}function q(){return this.defaultPrevented}h.event=function(n){return H&&(n=H(n)),n.persist=Z,n.isPropagationStopped=Y,n.isDefaultPrevented=q,n.nativeEvent=n};var G,J={configurable:!0,get:function(){return this.class}},K=h.vnode;h.vnode=function(n){var t=n.type,e=n.props,r=e;if(\"string\"==typeof t){var u=-1===t.indexOf(\"-\");for(var o in r={},e){var i=e[o];V&&\"children\"===o&&\"noscript\"===t||\"value\"===o&&\"defaultValue\"in e&&null==i||(\"defaultValue\"===o&&\"value\"in e&&null==e.value?o=\"value\":\"download\"===o&&!0===i?i=\"\":/ondoubleclick/i.test(o)?o=\"ondblclick\":/^onchange(textarea|input)/i.test(o+t)&&!z(e.type)?o=\"oninput\":/^onfocus$/i.test(o)?o=\"onfocusin\":/^onblur$/i.test(o)?o=\"onfocusout\":/^on(Ani|Tra|Tou|BeforeInp)/.test(o)?o=o.toLowerCase():u&&P.test(o)?o=o.replace(/[A-Z0-9]/,\"-$&\").toLowerCase():null===i&&(i=void 0),r[o]=i)}\"select\"==t&&r.multiple&&Array.isArray(r.value)&&(r.value=d(e.children).forEach(function(n){n.props.selected=-1!=r.value.indexOf(n.props.value)})),\"select\"==t&&null!=r.defaultValue&&(r.value=d(e.children).forEach(function(n){n.props.selected=r.multiple?-1!=r.defaultValue.indexOf(n.props.value):r.defaultValue==n.props.value})),n.props=r,e.class!=e.className&&(J.enumerable=\"className\"in e,null!=e.className&&(r.class=e.className),Object.defineProperty(r,\"className\",J))}n.$$typeof=j,K&&K(n)};var Q=h.__r;h.__r=function(n){Q&&Q(n),G=n.__c};var X={ReactCurrentDispatcher:{current:{readContext:function(n){return G.__n[n.__c].props.value}}}},nn=\"17.0.2\";function tn(n){return s.bind(null,n)}function en(n){return!!n&&n.$$typeof===j}function rn(n){return en(n)?y.apply(null,arguments):n}function un(n){return!!n.__k&&(p(null,n),!0)}function on(n){return n&&(n.base||1===n.nodeType&&n)||null}var ln=function(n,t){return n(t)},cn=function(n,t){return n(t)},fn=v;export default{useState:n,useReducer:t,useEffect:e,useLayoutEffect:r,useRef:u,useImperativeHandle:o,useMemo:i,useCallback:l,useContext:c,useDebugValue:f,version:\"17.0.2\",Children:k,render:B,hydrate:$,unmountComponentAtNode:un,createPortal:W,createElement:s,createContext:_,createFactory:tn,cloneElement:rn,createRef:b,Fragment:v,isValidElement:en,findDOMNode:on,Component:a,PureComponent:E,memo:g,forwardRef:x,flushSync:cn,unstable_batchedUpdates:ln,StrictMode:v,Suspense:L,SuspenseList:M,lazy:F,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:X};export{nn as version,k as Children,B as render,$ as hydrate,un as unmountComponentAtNode,W as createPortal,tn as createFactory,rn as cloneElement,en as isValidElement,on as findDOMNode,E as PureComponent,g as memo,x as forwardRef,cn as flushSync,ln as unstable_batchedUpdates,fn as StrictMode,L as Suspense,M as SuspenseList,F as lazy,X as __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED};\n//# sourceMappingURL=compat.module.js.map\n", "/**\r\n * Assign properties from `props` to `obj`\r\n * @template O, P The obj and props types\r\n * @param {O} obj The object to copy properties to\r\n * @param {P} props The object to copy properties from\r\n * @returns {O & P}\r\n */\r\nexport function assign(obj, props) {\r\n\tfor (let i in props) obj[i] = props[i];\r\n\treturn /** @type {O & P} */ (obj);\r\n}\r\n\r\n/**\r\n * Check if two objects have a different shape\r\n * @param {object} a\r\n * @param {object} b\r\n * @returns {boolean}\r\n */\r\nexport function shallowDiffers(a, b) {\r\n\tfor (let i in a) if (i !== '__source' && !(i in b)) return true;\r\n\tfor (let i in b) if (i !== '__source' && a[i] !== b[i]) return true;\r\n\treturn false;\r\n}\r\n\r\nexport function removeNode(node) {\r\n\tlet parentNode = node.parentNode;\r\n\tif (parentNode) parentNode.removeChild(node);\r\n}\r\n", "import { Component } from 'preact';\r\nimport { shallowDiffers } from './util';\r\n\r\n/**\r\n * Component class with a predefined `shouldComponentUpdate` implementation\r\n */\r\nexport function PureComponent(p) {\r\n\tthis.props = p;\r\n}\r\nPureComponent.prototype = new Component();\r\n// Some third-party libraries check if this property is present\r\nPureComponent.prototype.isPureReactComponent = true;\r\nPureComponent.prototype.shouldComponentUpdate = function(props, state) {\r\n\treturn shallowDiffers(this.props, props) || shallowDiffers(this.state, state);\r\n};\r\n", "import { createElement } from 'preact';\r\nimport { shallowDiffers } from './util';\r\n\r\n/**\r\n * Memoize a component, so that it only updates when the props actually have\r\n * changed. This was previously known as `React.pure`.\r\n * @param {import('./internal').FunctionComponent} c functional component\r\n * @param {(prev: object, next: object) => boolean} [comparer] Custom equality function\r\n * @returns {import('./internal').FunctionComponent}\r\n */\r\nexport function memo(c, comparer) {\r\n\tfunction shouldUpdate(nextProps) {\r\n\t\tlet ref = this.props.ref;\r\n\t\tlet updateRef = ref == nextProps.ref;\r\n\t\tif (!updateRef && ref) {\r\n\t\t\tref.call ? ref(null) : (ref.current = null);\r\n\t\t}\r\n\r\n\t\tif (!comparer) {\r\n\t\t\treturn shallowDiffers(this.props, nextProps);\r\n\t\t}\r\n\r\n\t\treturn !comparer(this.props, nextProps) || !updateRef;\r\n\t}\r\n\r\n\tfunction Memoed(props) {\r\n\t\tthis.shouldComponentUpdate = shouldUpdate;\r\n\t\treturn createElement(c, props);\r\n\t}\r\n\tMemoed.displayName = 'Memo(' + (c.displayName || c.name) + ')';\r\n\tMemoed.prototype.isReactComponent = true;\r\n\tMemoed._forwarded = true;\r\n\treturn Memoed;\r\n}\r\n", "import { options } from 'preact';\r\nimport { assign } from './util';\r\n\r\nlet oldDiffHook = options._diff;\r\noptions._diff = vnode => {\r\n\tif (vnode.type && vnode.type._forwarded && vnode.ref) {\r\n\t\tvnode.props.ref = vnode.ref;\r\n\t\tvnode.ref = null;\r\n\t}\r\n\tif (oldDiffHook) oldDiffHook(vnode);\r\n};\r\n\r\nexport const REACT_FORWARD_SYMBOL =\r\n\t(typeof Symbol != 'undefined' &&\r\n\t\tSymbol.for &&\r\n\t\tSymbol.for('react.forward_ref')) ||\r\n\t0xf47;\r\n\r\n/**\r\n * Pass ref down to a child. This is mainly used in libraries with HOCs that\r\n * wrap components. Using `forwardRef` there is an easy way to get a reference\r\n * of the wrapped component instead of one of the wrapper itself.\r\n * @param {import('./index').ForwardFn} fn\r\n * @returns {import('./internal').FunctionComponent}\r\n */\r\nexport function forwardRef(fn) {\r\n\t// We always have ref in props.ref, except for\r\n\t// mobx-react. It will call this function directly\r\n\t// and always pass ref as the second argument.\r\n\tfunction Forwarded(props, ref) {\r\n\t\tlet clone = assign({}, props);\r\n\t\tdelete clone.ref;\r\n\t\tref = props.ref || ref;\r\n\t\treturn fn(\r\n\t\t\tclone,\r\n\t\t\t!ref || (typeof ref === 'object' && !('current' in ref)) ? null : ref\r\n\t\t);\r\n\t}\r\n\r\n\t// mobx-react checks for this being present\r\n\tForwarded.$$typeof = REACT_FORWARD_SYMBOL;\r\n\t// mobx-react heavily relies on implementation details.\r\n\t// It expects an object here with a `render` property,\r\n\t// and prototype.render will fail. Without this\r\n\t// mobx-react throws.\r\n\tForwarded.render = Forwarded;\r\n\r\n\tForwarded.prototype.isReactComponent = Forwarded._forwarded = true;\r\n\tForwarded.displayName = 'ForwardRef(' + (fn.displayName || fn.name) + ')';\r\n\treturn Forwarded;\r\n}\r\n", "import { toChildArray } from 'preact';\r\n\r\nconst mapFn = (children, fn) => {\r\n\tif (children == null) return null;\r\n\treturn toChildArray(toChildArray(children).map(fn));\r\n};\r\n\r\n// This API is completely unnecessary for Preact, so it's basically passthrough.\r\nexport const Children = {\r\n\tmap: mapFn,\r\n\tforEach: mapFn,\r\n\tcount(children) {\r\n\t\treturn children ? toChildArray(children).length : 0;\r\n\t},\r\n\tonly(children) {\r\n\t\tconst normalized = toChildArray(children);\r\n\t\tif (normalized.length !== 1) throw 'Children.only';\r\n\t\treturn normalized[0];\r\n\t},\r\n\ttoArray: toChildArray\r\n};\r\n", "import { Component, createElement, options, Fragment } from 'preact';\r\nimport { assign } from './util';\r\n\r\nconst oldCatchError = options._catchError;\r\noptions._catchError = function(error, newVNode, oldVNode) {\r\n\tif (error.then) {\r\n\t\t/** @type {import('./internal').Component} */\r\n\t\tlet component;\r\n\t\tlet vnode = newVNode;\r\n\r\n\t\tfor (; (vnode = vnode._parent); ) {\r\n\t\t\tif ((component = vnode._component) && component._childDidSuspend) {\r\n\t\t\t\tif (newVNode._dom == null) {\r\n\t\t\t\t\tnewVNode._dom = oldVNode._dom;\r\n\t\t\t\t\tnewVNode._children = oldVNode._children;\r\n\t\t\t\t}\r\n\t\t\t\t// Don't call oldCatchError if we found a Suspense\r\n\t\t\t\treturn component._childDidSuspend(error, newVNode);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\toldCatchError(error, newVNode, oldVNode);\r\n};\r\n\r\nconst oldUnmount = options.unmount;\r\noptions.unmount = function(vnode) {\r\n\t/** @type {import('./internal').Component} */\r\n\tconst component = vnode._component;\r\n\tif (component && component._onResolve) {\r\n\t\tcomponent._onResolve();\r\n\t}\r\n\r\n\t// if the component is still hydrating\r\n\t// most likely it is because the component is suspended\r\n\t// we set the vnode.type as `null` so that it is not a typeof function\r\n\t// so the unmount will remove the vnode._dom\r\n\tif (component && vnode._hydrating === true) {\r\n\t\tvnode.type = null;\r\n\t}\r\n\r\n\tif (oldUnmount) oldUnmount(vnode);\r\n};\r\n\r\nfunction detachedClone(vnode, detachedParent, parentDom) {\r\n\tif (vnode) {\r\n\t\tif (vnode._component && vnode._component.__hooks) {\r\n\t\t\tvnode._component.__hooks._list.forEach(effect => {\r\n\t\t\t\tif (typeof effect._cleanup == 'function') effect._cleanup();\r\n\t\t\t});\r\n\r\n\t\t\tvnode._component.__hooks = null;\r\n\t\t}\r\n\r\n\t\tvnode = assign({}, vnode);\r\n\t\tif (vnode._component != null) {\r\n\t\t\tif (vnode._component._parentDom === parentDom) {\r\n\t\t\t\tvnode._component._parentDom = detachedParent;\r\n\t\t\t}\r\n\t\t\tvnode._component = null;\r\n\t\t}\r\n\r\n\t\tvnode._children =\r\n\t\t\tvnode._children &&\r\n\t\t\tvnode._children.map(child =>\r\n\t\t\t\tdetachedClone(child, detachedParent, parentDom)\r\n\t\t\t);\r\n\t}\r\n\r\n\treturn vnode;\r\n}\r\n\r\nfunction removeOriginal(vnode, detachedParent, originalParent) {\r\n\tif (vnode) {\r\n\t\tvnode._original = null;\r\n\t\tvnode._children =\r\n\t\t\tvnode._children &&\r\n\t\t\tvnode._children.map(child =>\r\n\t\t\t\tremoveOriginal(child, detachedParent, originalParent)\r\n\t\t\t);\r\n\r\n\t\tif (vnode._component) {\r\n\t\t\tif (vnode._component._parentDom === detachedParent) {\r\n\t\t\t\tif (vnode._dom) {\r\n\t\t\t\t\toriginalParent.insertBefore(vnode._dom, vnode._nextDom);\r\n\t\t\t\t}\r\n\t\t\t\tvnode._component._force = true;\r\n\t\t\t\tvnode._component._parentDom = originalParent;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn vnode;\r\n}\r\n\r\n// having custom inheritance instead of a class here saves a lot of bytes\r\nexport function Suspense() {\r\n\t// we do not call super here to golf some bytes...\r\n\tthis._pendingSuspensionCount = 0;\r\n\tthis._suspenders = null;\r\n\tthis._detachOnNextRender = null;\r\n}\r\n\r\n// Things we do here to save some bytes but are not proper JS inheritance:\r\n// - call `new Component()` as the prototype\r\n// - do not set `Suspense.prototype.constructor` to `Suspense`\r\nSuspense.prototype = new Component();\r\n\r\n/**\r\n * @this {import('./internal').SuspenseComponent}\r\n * @param {Promise} promise The thrown promise\r\n * @param {import('./internal').VNode<any, any>} suspendingVNode The suspending component\r\n */\r\nSuspense.prototype._childDidSuspend = function(promise, suspendingVNode) {\r\n\tconst suspendingComponent = suspendingVNode._component;\r\n\r\n\t/** @type {import('./internal').SuspenseComponent} */\r\n\tconst c = this;\r\n\r\n\tif (c._suspenders == null) {\r\n\t\tc._suspenders = [];\r\n\t}\r\n\tc._suspenders.push(suspendingComponent);\r\n\r\n\tconst resolve = suspended(c._vnode);\r\n\r\n\tlet resolved = false;\r\n\tconst onResolved = () => {\r\n\t\tif (resolved) return;\r\n\r\n\t\tresolved = true;\r\n\t\tsuspendingComponent._onResolve = null;\r\n\r\n\t\tif (resolve) {\r\n\t\t\tresolve(onSuspensionComplete);\r\n\t\t} else {\r\n\t\t\tonSuspensionComplete();\r\n\t\t}\r\n\t};\r\n\r\n\tsuspendingComponent._onResolve = onResolved;\r\n\r\n\tconst onSuspensionComplete = () => {\r\n\t\tif (!--c._pendingSuspensionCount) {\r\n\t\t\t// If the suspension was during hydration we don't need to restore the\r\n\t\t\t// suspended children into the _children array\r\n\t\t\tif (c.state._suspended) {\r\n\t\t\t\tconst suspendedVNode = c.state._suspended;\r\n\t\t\t\tc._vnode._children[0] = removeOriginal(\r\n\t\t\t\t\tsuspendedVNode,\r\n\t\t\t\t\tsuspendedVNode._component._parentDom,\r\n\t\t\t\t\tsuspendedVNode._component._originalParentDom\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tc.setState({ _suspended: (c._detachOnNextRender = null) });\r\n\r\n\t\t\tlet suspended;\r\n\t\t\twhile ((suspended = c._suspenders.pop())) {\r\n\t\t\t\tsuspended.forceUpdate();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * We do not set `suspended: true` during hydration because we want the actual markup\r\n\t * to remain on screen and hydrate it when the suspense actually gets resolved.\r\n\t * While in non-hydration cases the usual fallback -> component flow would occour.\r\n\t */\r\n\tconst wasHydrating = suspendingVNode._hydrating === true;\r\n\tif (!c._pendingSuspensionCount++ && !wasHydrating) {\r\n\t\tc.setState({ _suspended: (c._detachOnNextRender = c._vnode._children[0]) });\r\n\t}\r\n\tpromise.then(onResolved, onResolved);\r\n};\r\n\r\nSuspense.prototype.componentWillUnmount = function() {\r\n\tthis._suspenders = [];\r\n};\r\n\r\n/**\r\n * @this {import('./internal').SuspenseComponent}\r\n * @param {import('./internal').SuspenseComponent[\"props\"]} props\r\n * @param {import('./internal').SuspenseState} state\r\n */\r\nSuspense.prototype.render = function(props, state) {\r\n\tif (this._detachOnNextRender) {\r\n\t\t// When the Suspense's _vnode was created by a call to createVNode\r\n\t\t// (i.e. due to a setState further up in the tree)\r\n\t\t// it's _children prop is null, in this case we \"forget\" about the parked vnodes to detach\r\n\t\tif (this._vnode._children) {\r\n\t\t\tconst detachedParent = document.createElement('div');\r\n\t\t\tconst detachedComponent = this._vnode._children[0]._component;\r\n\t\t\tthis._vnode._children[0] = detachedClone(\r\n\t\t\t\tthis._detachOnNextRender,\r\n\t\t\t\tdetachedParent,\r\n\t\t\t\t(detachedComponent._originalParentDom = detachedComponent._parentDom)\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tthis._detachOnNextRender = null;\r\n\t}\r\n\r\n\t// Wrap fallback tree in a VNode that prevents itself from being marked as aborting mid-hydration:\r\n\t/** @type {import('./internal').VNode} */\r\n\tconst fallback =\r\n\t\tstate._suspended && createElement(Fragment, null, props.fallback);\r\n\tif (fallback) fallback._hydrating = null;\r\n\r\n\treturn [\r\n\t\tcreateElement(Fragment, null, state._suspended ? null : props.children),\r\n\t\tfallback\r\n\t];\r\n};\r\n\r\n/**\r\n * Checks and calls the parent component's _suspended method, passing in the\r\n * suspended vnode. This is a way for a parent (e.g. SuspenseList) to get notified\r\n * that one of its children/descendants suspended.\r\n *\r\n * The parent MAY return a callback. The callback will get called when the\r\n * suspension resolves, notifying the parent of the fact.\r\n * Moreover, the callback gets function `unsuspend` as a parameter. The resolved\r\n * child descendant will not actually get unsuspended until `unsuspend` gets called.\r\n * This is a way for the parent to delay unsuspending.\r\n *\r\n * If the parent does not return a callback then the resolved vnode\r\n * gets unsuspended immediately when it resolves.\r\n *\r\n * @param {import('./internal').VNode} vnode\r\n * @returns {((unsuspend: () => void) => void)?}\r\n */\r\nexport function suspended(vnode) {\r\n\t/** @type {import('./internal').Component} */\r\n\tlet component = vnode._parent._component;\r\n\treturn component && component._suspended && component._suspended(vnode);\r\n}\r\n\r\nexport function lazy(loader) {\r\n\tlet prom;\r\n\tlet component;\r\n\tlet error;\r\n\r\n\tfunction Lazy(props) {\r\n\t\tif (!prom) {\r\n\t\t\tprom = loader();\r\n\t\t\tprom.then(\r\n\t\t\t\texports => {\r\n\t\t\t\t\tcomponent = exports.default || exports;\r\n\t\t\t\t},\r\n\t\t\t\te => {\r\n\t\t\t\t\terror = e;\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (error) {\r\n\t\t\tthrow error;\r\n\t\t}\r\n\r\n\t\tif (!component) {\r\n\t\t\tthrow prom;\r\n\t\t}\r\n\r\n\t\treturn createElement(component, props);\r\n\t}\r\n\r\n\tLazy.displayName = 'Lazy';\r\n\tLazy._forwarded = true;\r\n\treturn Lazy;\r\n}\r\n", "import { Component, toChildArray } from 'preact';\r\nimport { suspended } from './suspense.js';\r\n\r\n// Indexes to linked list nodes (nodes are stored as arrays to save bytes).\r\nconst SUSPENDED_COUNT = 0;\r\nconst RESOLVED_COUNT = 1;\r\nconst NEXT_NODE = 2;\r\n\r\n// Having custom inheritance instead of a class here saves a lot of bytes.\r\nexport function SuspenseList() {\r\n\tthis._next = null;\r\n\tthis._map = null;\r\n}\r\n\r\n// Mark one of child's earlier suspensions as resolved.\r\n// Some pending callbacks may become callable due to this\r\n// (e.g. the last suspended descendant gets resolved when\r\n// revealOrder === 'together'). Process those callbacks as well.\r\nconst resolve = (list, child, node) => {\r\n\tif (++node[RESOLVED_COUNT] === node[SUSPENDED_COUNT]) {\r\n\t\t// The number a child (or any of its descendants) has been suspended\r\n\t\t// matches the number of times it's been resolved. Therefore we\r\n\t\t// mark the child as completely resolved by deleting it from ._map.\r\n\t\t// This is used to figure out when *all* children have been completely\r\n\t\t// resolved when revealOrder is 'together'.\r\n\t\tlist._map.delete(child);\r\n\t}\r\n\r\n\t// If revealOrder is falsy then we can do an early exit, as the\r\n\t// callbacks won't get queued in the node anyway.\r\n\t// If revealOrder is 'together' then also do an early exit\r\n\t// if all suspended descendants have not yet been resolved.\r\n\tif (\r\n\t\t!list.props.revealOrder ||\r\n\t\t(list.props.revealOrder[0] === 't' && list._map.size)\r\n\t) {\r\n\t\treturn;\r\n\t}\r\n\r\n\t// Walk the currently suspended children in order, calling their\r\n\t// stored callbacks on the way. Stop if we encounter a child that\r\n\t// has not been completely resolved yet.\r\n\tnode = list._next;\r\n\twhile (node) {\r\n\t\twhile (node.length > 3) {\r\n\t\t\tnode.pop()();\r\n\t\t}\r\n\t\tif (node[RESOLVED_COUNT] < node[SUSPENDED_COUNT]) {\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tlist._next = node = node[NEXT_NODE];\r\n\t}\r\n};\r\n\r\n// Things we do here to save some bytes but are not proper JS inheritance:\r\n// - call `new Component()` as the prototype\r\n// - do not set `Suspense.prototype.constructor` to `Suspense`\r\nSuspenseList.prototype = new Component();\r\n\r\nSuspenseList.prototype._suspended = function(child) {\r\n\tconst list = this;\r\n\tconst delegated = suspended(list._vnode);\r\n\r\n\tlet node = list._map.get(child);\r\n\tnode[SUSPENDED_COUNT]++;\r\n\r\n\treturn unsuspend => {\r\n\t\tconst wrappedUnsuspend = () => {\r\n\t\t\tif (!list.props.revealOrder) {\r\n\t\t\t\t// Special case the undefined (falsy) revealOrder, as there\r\n\t\t\t\t// is no need to coordinate a specific order or unsuspends.\r\n\t\t\t\tunsuspend();\r\n\t\t\t} else {\r\n\t\t\t\tnode.push(unsuspend);\r\n\t\t\t\tresolve(list, child, node);\r\n\t\t\t}\r\n\t\t};\r\n\t\tif (delegated) {\r\n\t\t\tdelegated(wrappedUnsuspend);\r\n\t\t} else {\r\n\t\t\twrappedUnsuspend();\r\n\t\t}\r\n\t};\r\n};\r\n\r\nSuspenseList.prototype.render = function(props) {\r\n\tthis._next = null;\r\n\tthis._map = new Map();\r\n\r\n\tconst children = toChildArray(props.children);\r\n\tif (props.revealOrder && props.revealOrder[0] === 'b') {\r\n\t\t// If order === 'backwards' (or, well, anything starting with a 'b')\r\n\t\t// then flip the child list around so that the last child will be\r\n\t\t// the first in the linked list.\r\n\t\tchildren.reverse();\r\n\t}\r\n\t// Build the linked list. Iterate through the children in reverse order\r\n\t// so that `_next` points to the first linked list node to be resolved.\r\n\tfor (let i = children.length; i--; ) {\r\n\t\t// Create a new linked list node as an array of form:\r\n\t\t// \t[suspended_count, resolved_count, next_node]\r\n\t\t// where suspended_count and resolved_count are numeric counters for\r\n\t\t// keeping track how many times a node has been suspended and resolved.\r\n\t\t//\r\n\t\t// Note that suspended_count starts from 1 instead of 0, so we can block\r\n\t\t// processing callbacks until componentDidMount has been called. In a sense\r\n\t\t// node is suspended at least until componentDidMount gets called!\r\n\t\t//\r\n\t\t// Pending callbacks are added to the end of the node:\r\n\t\t// \t[suspended_count, resolved_count, next_node, callback_0, callback_1, ...]\r\n\t\tthis._map.set(children[i], (this._next = [1, 0, this._next]));\r\n\t}\r\n\treturn props.children;\r\n};\r\n\r\nSuspenseList.prototype.componentDidUpdate = SuspenseList.prototype.componentDidMount = function() {\r\n\t// Iterate through all children after mounting for two reasons:\r\n\t// 1. As each node[SUSPENDED_COUNT] starts from 1, this iteration increases\r\n\t//    each node[RELEASED_COUNT] by 1, therefore balancing the counters.\r\n\t//    The nodes can now be completely consumed from the linked list.\r\n\t// 2. Handle nodes that might have gotten resolved between render and\r\n\t//    componentDidMount.\r\n\tthis._map.forEach((node, child) => {\r\n\t\tresolve(this, child, node);\r\n\t});\r\n};\r\n", "import { createElement, render } from 'preact';\r\n\r\n/**\r\n * @param {import('../../src/index').RenderableProps<{ context: any }>} props\r\n */\r\nfunction ContextProvider(props) {\r\n\tthis.getChildContext = () => props.context;\r\n\treturn props.children;\r\n}\r\n\r\n/**\r\n * Portal component\r\n * @this {import('./internal').Component}\r\n * @param {object | null | undefined} props\r\n *\r\n * TODO: use createRoot() instead of fake root\r\n */\r\nfunction Portal(props) {\r\n\tconst _this = this;\r\n\tlet container = props._container;\r\n\r\n\t_this.componentWillUnmount = function() {\r\n\t\trender(null, _this._temp);\r\n\t\t_this._temp = null;\r\n\t\t_this._container = null;\r\n\t};\r\n\r\n\t// When we change container we should clear our old container and\r\n\t// indicate a new mount.\r\n\tif (_this._container && _this._container !== container) {\r\n\t\t_this.componentWillUnmount();\r\n\t}\r\n\r\n\t// When props.vnode is undefined/false/null we are dealing with some kind of\r\n\t// conditional vnode. This should not trigger a render.\r\n\tif (props._vnode) {\r\n\t\tif (!_this._temp) {\r\n\t\t\t_this._container = container;\r\n\r\n\t\t\t// Create a fake DOM parent node that manages a subset of `container`'s children:\r\n\t\t\t_this._temp = {\r\n\t\t\t\tnodeType: 1,\r\n\t\t\t\tparentNode: container,\r\n\t\t\t\tchildNodes: [],\r\n\t\t\t\tappendChild(child) {\r\n\t\t\t\t\tthis.childNodes.push(child);\r\n\t\t\t\t\t_this._container.appendChild(child);\r\n\t\t\t\t},\r\n\t\t\t\tinsertBefore(child, before) {\r\n\t\t\t\t\tthis.childNodes.push(child);\r\n\t\t\t\t\t_this._container.appendChild(child);\r\n\t\t\t\t},\r\n\t\t\t\tremoveChild(child) {\r\n\t\t\t\t\tthis.childNodes.splice(this.childNodes.indexOf(child) >>> 1, 1);\r\n\t\t\t\t\t_this._container.removeChild(child);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t// Render our wrapping element into temp.\r\n\t\trender(\r\n\t\t\tcreateElement(ContextProvider, { context: _this.context }, props._vnode),\r\n\t\t\t_this._temp\r\n\t\t);\r\n\t}\r\n\t// When we come from a conditional render, on a mounted\r\n\t// portal we should clear the DOM.\r\n\telse if (_this._temp) {\r\n\t\t_this.componentWillUnmount();\r\n\t}\r\n}\r\n\r\n/**\r\n * Create a `Portal` to continue rendering the vnode tree at a different DOM node\r\n * @param {import('./internal').VNode} vnode The vnode to render\r\n * @param {import('./internal').PreactElement} container The DOM node to continue rendering in to.\r\n */\r\nexport function createPortal(vnode, container) {\r\n\treturn createElement(Portal, { _vnode: vnode, _container: container });\r\n}\r\n", "import {\r\n\trender as preactRender,\r\n\thydrate as preactHydrate,\r\n\toptions,\r\n\ttoChildArray,\r\n\tComponent\r\n} from 'preact';\r\n\r\nexport const REACT_ELEMENT_TYPE =\r\n\t(typeof Symbol != 'undefined' && Symbol.for && Symbol.for('react.element')) ||\r\n\t0xeac7;\r\n\r\nconst CAMEL_PROPS = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/;\r\n\r\nconst IS_DOM = typeof document !== 'undefined';\r\n\r\n// Input types for which onchange should not be converted to oninput.\r\n// type=\"file|checkbox|radio\", plus \"range\" in IE11.\r\n// (IE11 doesn't support Symbol, which we use here to turn `rad` into `ra` which matches \"range\")\r\nconst onChangeInputType = type =>\r\n\t(typeof Symbol != 'undefined' && typeof Symbol() == 'symbol'\r\n\t\t? /fil|che|rad/i\r\n\t\t: /fil|che|ra/i\r\n\t).test(type);\r\n\r\n// Some libraries like `react-virtualized` explicitly check for this.\r\nComponent.prototype.isReactComponent = {};\r\n\r\n// `UNSAFE_*` lifecycle hooks\r\n// Preact only ever invokes the unprefixed methods.\r\n// Here we provide a base \"fallback\" implementation that calls any defined UNSAFE_ prefixed method.\r\n// - If a component defines its own `componentDidMount()` (including via defineProperty), use that.\r\n// - If a component defines `UNSAFE_componentDidMount()`, `componentDidMount` is the alias getter/setter.\r\n// - If anything assigns to an `UNSAFE_*` property, the assignment is forwarded to the unprefixed property.\r\n// See https://github.com/preactjs/preact/issues/1941\r\n[\r\n\t'componentWillMount',\r\n\t'componentWillReceiveProps',\r\n\t'componentWillUpdate'\r\n].forEach(key => {\r\n\tObject.defineProperty(Component.prototype, key, {\r\n\t\tconfigurable: true,\r\n\t\tget() {\r\n\t\t\treturn this['UNSAFE_' + key];\r\n\t\t},\r\n\t\tset(v) {\r\n\t\t\tObject.defineProperty(this, key, {\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\twritable: true,\r\n\t\t\t\tvalue: v\r\n\t\t\t});\r\n\t\t}\r\n\t});\r\n});\r\n\r\n/**\r\n * Proxy render() since React returns a Component reference.\r\n * @param {import('./internal').VNode} vnode VNode tree to render\r\n * @param {import('./internal').PreactElement} parent DOM node to render vnode tree into\r\n * @param {() => void} [callback] Optional callback that will be called after rendering\r\n * @returns {import('./internal').Component | null} The root component reference or null\r\n */\r\nexport function render(vnode, parent, callback) {\r\n\t// React destroys any existing DOM nodes, see #1727\r\n\t// ...but only on the first render, see #1828\r\n\tif (parent._children == null) {\r\n\t\tparent.textContent = '';\r\n\t}\r\n\r\n\tpreactRender(vnode, parent);\r\n\tif (typeof callback == 'function') callback();\r\n\r\n\treturn vnode ? vnode._component : null;\r\n}\r\n\r\nexport function hydrate(vnode, parent, callback) {\r\n\tpreactHydrate(vnode, parent);\r\n\tif (typeof callback == 'function') callback();\r\n\r\n\treturn vnode ? vnode._component : null;\r\n}\r\n\r\nlet oldEventHook = options.event;\r\noptions.event = e => {\r\n\tif (oldEventHook) e = oldEventHook(e);\r\n\te.persist = empty;\r\n\te.isPropagationStopped = isPropagationStopped;\r\n\te.isDefaultPrevented = isDefaultPrevented;\r\n\treturn (e.nativeEvent = e);\r\n};\r\n\r\nfunction empty() {}\r\n\r\nfunction isPropagationStopped() {\r\n\treturn this.cancelBubble;\r\n}\r\n\r\nfunction isDefaultPrevented() {\r\n\treturn this.defaultPrevented;\r\n}\r\n\r\nlet classNameDescriptor = {\r\n\tconfigurable: true,\r\n\tget() {\r\n\t\treturn this.class;\r\n\t}\r\n};\r\n\r\nlet oldVNodeHook = options.vnode;\r\noptions.vnode = vnode => {\r\n\tlet type = vnode.type;\r\n\tlet props = vnode.props;\r\n\tlet normalizedProps = props;\r\n\r\n\t// only normalize props on Element nodes\r\n\tif (typeof type === 'string') {\r\n\t\tconst nonCustomElement = type.indexOf('-') === -1;\r\n\t\tnormalizedProps = {};\r\n\r\n\t\tfor (let i in props) {\r\n\t\t\tlet value = props[i];\r\n\r\n\t\t\tif (IS_DOM && i === 'children' && type === 'noscript') {\r\n\t\t\t\t// Emulate React's behavior of not rendering the contents of noscript tags on the client.\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\telse if (i === 'value' && 'defaultValue' in props && value == null) {\r\n\t\t\t\t// Skip applying value if it is null/undefined and we already set\r\n\t\t\t\t// a default value\r\n\t\t\t\tcontinue;\r\n\t\t\t} else if (\r\n\t\t\t\ti === 'defaultValue' &&\r\n\t\t\t\t'value' in props &&\r\n\t\t\t\tprops.value == null\r\n\t\t\t) {\r\n\t\t\t\t// `defaultValue` is treated as a fallback `value` when a value prop is present but null/undefined.\r\n\t\t\t\t// `defaultValue` for Elements with no value prop is the same as the DOM defaultValue property.\r\n\t\t\t\ti = 'value';\r\n\t\t\t} else if (i === 'download' && value === true) {\r\n\t\t\t\t// Calling `setAttribute` with a truthy value will lead to it being\r\n\t\t\t\t// passed as a stringified value, e.g. `download=\"true\"`. React\r\n\t\t\t\t// converts it to an empty string instead, otherwise the attribute\r\n\t\t\t\t// value will be used as the file name and the file will be called\r\n\t\t\t\t// \"true\" upon downloading it.\r\n\t\t\t\tvalue = '';\r\n\t\t\t} else if (/ondoubleclick/i.test(i)) {\r\n\t\t\t\ti = 'ondblclick';\r\n\t\t\t} else if (\r\n\t\t\t\t/^onchange(textarea|input)/i.test(i + type) &&\r\n\t\t\t\t!onChangeInputType(props.type)\r\n\t\t\t) {\r\n\t\t\t\ti = 'oninput';\r\n\t\t\t} else if (/^onfocus$/i.test(i)) {\r\n\t\t\t\ti = 'onfocusin';\r\n\t\t\t} else if (/^onblur$/i.test(i)) {\r\n\t\t\t\ti = 'onfocusout';\r\n\t\t\t} else if (/^on(Ani|Tra|Tou|BeforeInp)/.test(i)) {\r\n\t\t\t\ti = i.toLowerCase();\r\n\t\t\t} else if (nonCustomElement && CAMEL_PROPS.test(i)) {\r\n\t\t\t\ti = i.replace(/[A-Z0-9]/, '-$&').toLowerCase();\r\n\t\t\t} else if (value === null) {\r\n\t\t\t\tvalue = undefined;\r\n\t\t\t}\r\n\r\n\t\t\tnormalizedProps[i] = value;\r\n\t\t}\r\n\r\n\t\t// Add support for array select values: <select multiple value={[]} />\r\n\t\tif (\r\n\t\t\ttype == 'select' &&\r\n\t\t\tnormalizedProps.multiple &&\r\n\t\t\tArray.isArray(normalizedProps.value)\r\n\t\t) {\r\n\t\t\t// forEach() always returns undefined, which we abuse here to unset the value prop.\r\n\t\t\tnormalizedProps.value = toChildArray(props.children).forEach(child => {\r\n\t\t\t\tchild.props.selected =\r\n\t\t\t\t\tnormalizedProps.value.indexOf(child.props.value) != -1;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Adding support for defaultValue in select tag\r\n\t\tif (type == 'select' && normalizedProps.defaultValue != null) {\r\n\t\t\tnormalizedProps.value = toChildArray(props.children).forEach(child => {\r\n\t\t\t\tif (normalizedProps.multiple) {\r\n\t\t\t\t\tchild.props.selected =\r\n\t\t\t\t\t\tnormalizedProps.defaultValue.indexOf(child.props.value) != -1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tchild.props.selected =\r\n\t\t\t\t\t\tnormalizedProps.defaultValue == child.props.value;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvnode.props = normalizedProps;\r\n\r\n\t\tif (props.class != props.className) {\r\n\t\t\tclassNameDescriptor.enumerable = 'className' in props;\r\n\t\t\tif (props.className != null) normalizedProps.class = props.className;\r\n\t\t\tObject.defineProperty(normalizedProps, 'className', classNameDescriptor);\r\n\t\t}\r\n\t}\r\n\r\n\tvnode.$$typeof = REACT_ELEMENT_TYPE;\r\n\r\n\tif (oldVNodeHook) oldVNodeHook(vnode);\r\n};\r\n\r\n// Only needed for react-relay\r\nlet currentComponent;\r\nconst oldBeforeRender = options._render;\r\noptions._render = function(vnode) {\r\n\tif (oldBeforeRender) {\r\n\t\toldBeforeRender(vnode);\r\n\t}\r\n\tcurrentComponent = vnode._component;\r\n};\r\n\r\n// This is a very very private internal function for React it\r\n// is used to sort-of do runtime dependency injection. So far\r\n// only `react-relay` makes use of it. It uses it to read the\r\n// context value.\r\nexport const __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = {\r\n\tReactCurrentDispatcher: {\r\n\t\tcurrent: {\r\n\t\t\treadContext(context) {\r\n\t\t\t\treturn currentComponent._globalContext[context._id].props.value;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n", "import {\r\n\tcreateElement,\r\n\trender as preactRender,\r\n\tcloneElement as preactCloneElement,\r\n\tcreateRef,\r\n\tComponent,\r\n\tcreateContext,\r\n\tFragment\r\n} from 'preact';\r\nimport {\r\n\tuseState,\r\n\tuseReducer,\r\n\tuseEffect,\r\n\tuseLayoutEffect,\r\n\tuseRef,\r\n\tuseImperativeHandle,\r\n\tuseMemo,\r\n\tuseCallback,\r\n\tuseContext,\r\n\tuseDebugValue\r\n} from 'preact/hooks';\r\nimport { PureComponent } from './PureComponent';\r\nimport { memo } from './memo';\r\nimport { forwardRef } from './forwardRef';\r\nimport { Children } from './Children';\r\nimport { Suspense, lazy } from './suspense';\r\nimport { SuspenseList } from './suspense-list';\r\nimport { createPortal } from './portals';\r\nimport {\r\n\thydrate,\r\n\trender,\r\n\tREACT_ELEMENT_TYPE,\r\n\t__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\r\n} from './render';\r\n\r\nconst version = '17.0.2'; // trick libraries to think we are react\r\n\r\n/**\r\n * Legacy version of createElement.\r\n * @param {import('./internal').VNode[\"type\"]} type The node name or Component constructor\r\n */\r\nfunction createFactory(type) {\r\n\treturn createElement.bind(null, type);\r\n}\r\n\r\n/**\r\n * Check if the passed element is a valid (p)react node.\r\n * @param {*} element The element to check\r\n * @returns {boolean}\r\n */\r\nfunction isValidElement(element) {\r\n\treturn !!element && element.$$typeof === REACT_ELEMENT_TYPE;\r\n}\r\n\r\n/**\r\n * Wrap `cloneElement` to abort if the passed element is not a valid element and apply\r\n * all vnode normalizations.\r\n * @param {import('./internal').VNode} element The vnode to clone\r\n * @param {object} props Props to add when cloning\r\n * @param {Array<import('./internal').ComponentChildren>} rest Optional component children\r\n */\r\nfunction cloneElement(element) {\r\n\tif (!isValidElement(element)) return element;\r\n\treturn preactCloneElement.apply(null, arguments);\r\n}\r\n\r\n/**\r\n * Remove a component tree from the DOM, including state and event handlers.\r\n * @param {import('./internal').PreactElement} container\r\n * @returns {boolean}\r\n */\r\nfunction unmountComponentAtNode(container) {\r\n\tif (container._children) {\r\n\t\tpreactRender(null, container);\r\n\t\treturn true;\r\n\t}\r\n\treturn false;\r\n}\r\n\r\n/**\r\n * Get the matching DOM node for a component\r\n * @param {import('./internal').Component} component\r\n * @returns {import('./internal').PreactElement | null}\r\n */\r\nfunction findDOMNode(component) {\r\n\treturn (\r\n\t\t(component &&\r\n\t\t\t(component.base || (component.nodeType === 1 && component))) ||\r\n\t\tnull\r\n\t);\r\n}\r\n\r\n/**\r\n * Deprecated way to control batched rendering inside the reconciler, but we\r\n * already schedule in batches inside our rendering code\r\n * @template Arg\r\n * @param {(arg: Arg) => void} callback function that triggers the updated\r\n * @param {Arg} [arg] Optional argument that can be passed to the callback\r\n */\r\n// eslint-disable-next-line camelcase\r\nconst unstable_batchedUpdates = (callback, arg) => callback(arg);\r\n\r\n/**\r\n * In React, `flushSync` flushes the entire tree and forces a rerender. It's\r\n * implmented here as a no-op.\r\n * @template Arg\r\n * @template Result\r\n * @param {(arg: Arg) => Result} callback function that runs before the flush\r\n * @param {Arg} [arg] Optional arugment that can be passed to the callback\r\n * @returns\r\n */\r\nconst flushSync = (callback, arg) => callback(arg);\r\n\r\n/**\r\n * Strict Mode is not implemented in Preact, so we provide a stand-in for it\r\n * that just renders its children without imposing any restrictions.\r\n */\r\nconst StrictMode = Fragment;\r\n\r\nexport * from 'preact/hooks';\r\nexport {\r\n\tversion,\r\n\tChildren,\r\n\trender,\r\n\thydrate,\r\n\tunmountComponentAtNode,\r\n\tcreatePortal,\r\n\tcreateElement,\r\n\tcreateContext,\r\n\tcreateFactory,\r\n\tcloneElement,\r\n\tcreateRef,\r\n\tFragment,\r\n\tisValidElement,\r\n\tfindDOMNode,\r\n\tComponent,\r\n\tPureComponent,\r\n\tmemo,\r\n\tforwardRef,\r\n\tflushSync,\r\n\t// eslint-disable-next-line camelcase\r\n\tunstable_batchedUpdates,\r\n\tStrictMode,\r\n\tSuspense,\r\n\tSuspenseList,\r\n\tlazy,\r\n\t__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\r\n};\r\n\r\n// React copies the named exports to the default one.\r\nexport default {\r\n\tuseState,\r\n\tuseReducer,\r\n\tuseEffect,\r\n\tuseLayoutEffect,\r\n\tuseRef,\r\n\tuseImperativeHandle,\r\n\tuseMemo,\r\n\tuseCallback,\r\n\tuseContext,\r\n\tuseDebugValue,\r\n\tversion,\r\n\tChildren,\r\n\trender,\r\n\thydrate,\r\n\tunmountComponentAtNode,\r\n\tcreatePortal,\r\n\tcreateElement,\r\n\tcreateContext,\r\n\tcreateFactory,\r\n\tcloneElement,\r\n\tcreateRef,\r\n\tFragment,\r\n\tisValidElement,\r\n\tfindDOMNode,\r\n\tComponent,\r\n\tPureComponent,\r\n\tmemo,\r\n\tforwardRef,\r\n\tflushSync,\r\n\tunstable_batchedUpdates,\r\n\tStrictMode,\r\n\tSuspense,\r\n\tSuspenseList,\r\n\tlazy,\r\n\t__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\r\n};\r\n", "import{options as n}from\"preact\";var t,u,r,o=0,i=[],c=n.__b,f=n.__r,e=n.diffed,a=n.__c,v=n.unmount;function m(t,r){n.__h&&n.__h(u,t,o||r),o=0;var i=u.__H||(u.__H={__:[],__h:[]});return t>=i.__.length&&i.__.push({}),i.__[t]}function l(n){return o=1,p(w,n)}function p(n,r,o){var i=m(t++,2);return i.t=n,i.__c||(i.__=[o?o(r):w(void 0,r),function(n){var t=i.t(i.__[0],n);i.__[0]!==t&&(i.__=[t,i.__[1]],i.__c.setState({}))}],i.__c=u),i.__}function y(r,o){var i=m(t++,3);!n.__s&&k(i.__H,o)&&(i.__=r,i.__H=o,u.__H.__h.push(i))}function h(r,o){var i=m(t++,4);!n.__s&&k(i.__H,o)&&(i.__=r,i.__H=o,u.__h.push(i))}function s(n){return o=5,d(function(){return{current:n}},[])}function _(n,t,u){o=6,h(function(){\"function\"==typeof n?n(t()):n&&(n.current=t())},null==u?u:u.concat(n))}function d(n,u){var r=m(t++,7);return k(r.__H,u)&&(r.__=n(),r.__H=u,r.__h=n),r.__}function A(n,t){return o=8,d(function(){return n},t)}function F(n){var r=u.context[n.__c],o=m(t++,9);return o.c=n,r?(null==o.__&&(o.__=!0,r.sub(u)),r.props.value):n.__}function T(t,u){n.useDebugValue&&n.useDebugValue(u?u(t):t)}function q(n){var r=m(t++,10),o=l();return r.__=n,u.componentDidCatch||(u.componentDidCatch=function(n){r.__&&r.__(n),o[1](n)}),[o[0],function(){o[1](void 0)}]}function x(){var t;for(i.sort(function(n,t){return n.__v.__b-t.__v.__b});t=i.pop();)if(t.__P)try{t.__H.__h.forEach(g),t.__H.__h.forEach(j),t.__H.__h=[]}catch(u){t.__H.__h=[],n.__e(u,t.__v)}}n.__b=function(n){u=null,c&&c(n)},n.__r=function(n){f&&f(n),t=0;var r=(u=n.__c).__H;r&&(r.__h.forEach(g),r.__h.forEach(j),r.__h=[])},n.diffed=function(t){e&&e(t);var o=t.__c;o&&o.__H&&o.__H.__h.length&&(1!==i.push(o)&&r===n.requestAnimationFrame||((r=n.requestAnimationFrame)||function(n){var t,u=function(){clearTimeout(r),b&&cancelAnimationFrame(t),setTimeout(n)},r=setTimeout(u,100);b&&(t=requestAnimationFrame(u))})(x)),u=null},n.__c=function(t,u){u.some(function(t){try{t.__h.forEach(g),t.__h=t.__h.filter(function(n){return!n.__||j(n)})}catch(r){u.some(function(n){n.__h&&(n.__h=[])}),u=[],n.__e(r,t.__v)}}),a&&a(t,u)},n.unmount=function(t){v&&v(t);var u,r=t.__c;r&&r.__H&&(r.__H.__.forEach(function(n){try{g(n)}catch(n){u=n}}),u&&n.__e(u,r.__v))};var b=\"function\"==typeof requestAnimationFrame;function g(n){var t=u,r=n.__c;\"function\"==typeof r&&(n.__c=void 0,r()),u=t}function j(n){var t=u;n.__c=n.__(),u=t}function k(n,t){return!n||n.length!==t.length||t.some(function(t,u){return t!==n[u]})}function w(n,t){return\"function\"==typeof t?t(n):t}export{l as useState,p as useReducer,y as useEffect,h as useLayoutEffect,s as useRef,_ as useImperativeHandle,d as useMemo,A as useCallback,F as useContext,T as useDebugValue,q as useErrorBoundary};\n//# sourceMappingURL=hooks.module.js.map\n", "import { options } from 'preact';\r\n\r\n/** @type {number} */\r\nlet currentIndex;\r\n\r\n/** @type {import('./internal').Component} */\r\nlet currentComponent;\r\n\r\n/** @type {number} */\r\nlet currentHook = 0;\r\n\r\n/** @type {Array<import('./internal').Component>} */\r\nlet afterPaintEffects = [];\r\n\r\nlet oldBeforeDiff = options._diff;\r\nlet oldBeforeRender = options._render;\r\nlet oldAfterDiff = options.diffed;\r\nlet oldCommit = options._commit;\r\nlet oldBeforeUnmount = options.unmount;\r\n\r\nconst RAF_TIMEOUT = 100;\r\nlet prevRaf;\r\n\r\noptions._diff = vnode => {\r\n\tcurrentComponent = null;\r\n\tif (oldBeforeDiff) oldBeforeDiff(vnode);\r\n};\r\n\r\noptions._render = vnode => {\r\n\tif (oldBeforeRender) oldBeforeRender(vnode);\r\n\r\n\tcurrentComponent = vnode._component;\r\n\tcurrentIndex = 0;\r\n\r\n\tconst hooks = currentComponent.__hooks;\r\n\tif (hooks) {\r\n\t\thooks._pendingEffects.forEach(invokeCleanup);\r\n\t\thooks._pendingEffects.forEach(invokeEffect);\r\n\t\thooks._pendingEffects = [];\r\n\t}\r\n};\r\n\r\noptions.diffed = vnode => {\r\n\tif (oldAfterDiff) oldAfterDiff(vnode);\r\n\r\n\tconst c = vnode._component;\r\n\tif (c && c.__hooks && c.__hooks._pendingEffects.length) {\r\n\t\tafterPaint(afterPaintEffects.push(c));\r\n\t}\r\n\tcurrentComponent = null;\r\n};\r\n\r\noptions._commit = (vnode, commitQueue) => {\r\n\tcommitQueue.some(component => {\r\n\t\ttry {\r\n\t\t\tcomponent._renderCallbacks.forEach(invokeCleanup);\r\n\t\t\tcomponent._renderCallbacks = component._renderCallbacks.filter(cb =>\r\n\t\t\t\tcb._value ? invokeEffect(cb) : true\r\n\t\t\t);\r\n\t\t} catch (e) {\r\n\t\t\tcommitQueue.some(c => {\r\n\t\t\t\tif (c._renderCallbacks) c._renderCallbacks = [];\r\n\t\t\t});\r\n\t\t\tcommitQueue = [];\r\n\t\t\toptions._catchError(e, component._vnode);\r\n\t\t}\r\n\t});\r\n\r\n\tif (oldCommit) oldCommit(vnode, commitQueue);\r\n};\r\n\r\noptions.unmount = vnode => {\r\n\tif (oldBeforeUnmount) oldBeforeUnmount(vnode);\r\n\r\n\tconst c = vnode._component;\r\n\tif (c && c.__hooks) {\r\n\t\tlet hasErrored;\r\n\t\tc.__hooks._list.forEach(s => {\r\n\t\t\ttry {\r\n\t\t\t\tinvokeCleanup(s);\r\n\t\t\t} catch (e) {\r\n\t\t\t\thasErrored = e;\r\n\t\t\t}\r\n\t\t});\r\n\t\tif (hasErrored) options._catchError(hasErrored, c._vnode);\r\n\t}\r\n};\r\n\r\n/**\r\n * Get a hook's state from the currentComponent\r\n * @param {number} index The index of the hook to get\r\n * @param {number} type The index of the hook to get\r\n * @returns {any}\r\n */\r\nfunction getHookState(index, type) {\r\n\tif (options._hook) {\r\n\t\toptions._hook(currentComponent, index, currentHook || type);\r\n\t}\r\n\tcurrentHook = 0;\r\n\r\n\t// Largely inspired by:\r\n\t// * https://github.com/michael-klein/funcy.js/blob/f6be73468e6ec46b0ff5aa3cc4c9baf72a29025a/src/hooks/core_hooks.mjs\r\n\t// * https://github.com/michael-klein/funcy.js/blob/650beaa58c43c33a74820a3c98b3c7079cf2e333/src/renderer.mjs\r\n\t// Other implementations to look at:\r\n\t// * https://codesandbox.io/s/mnox05qp8\r\n\tconst hooks =\r\n\t\tcurrentComponent.__hooks ||\r\n\t\t(currentComponent.__hooks = {\r\n\t\t\t_list: [],\r\n\t\t\t_pendingEffects: []\r\n\t\t});\r\n\r\n\tif (index >= hooks._list.length) {\r\n\t\thooks._list.push({});\r\n\t}\r\n\treturn hooks._list[index];\r\n}\r\n\r\n/**\r\n * @param {import('./index').StateUpdater<any>} [initialState]\r\n */\r\nexport function useState(initialState) {\r\n\tcurrentHook = 1;\r\n\treturn useReducer(invokeOrReturn, initialState);\r\n}\r\n\r\n/**\r\n * @param {import('./index').Reducer<any, any>} reducer\r\n * @param {import('./index').StateUpdater<any>} initialState\r\n * @param {(initialState: any) => void} [init]\r\n * @returns {[ any, (state: any) => void ]}\r\n */\r\nexport function useReducer(reducer, initialState, init) {\r\n\t/** @type {import('./internal').ReducerHookState} */\r\n\tconst hookState = getHookState(currentIndex++, 2);\r\n\thookState._reducer = reducer;\r\n\tif (!hookState._component) {\r\n\t\thookState._value = [\r\n\t\t\t!init ? invokeOrReturn(undefined, initialState) : init(initialState),\r\n\r\n\t\t\taction => {\r\n\t\t\t\tconst nextValue = hookState._reducer(hookState._value[0], action);\r\n\t\t\t\tif (hookState._value[0] !== nextValue) {\r\n\t\t\t\t\thookState._value = [nextValue, hookState._value[1]];\r\n\t\t\t\t\thookState._component.setState({});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t];\r\n\r\n\t\thookState._component = currentComponent;\r\n\t}\r\n\r\n\treturn hookState._value;\r\n}\r\n\r\n/**\r\n * @param {import('./internal').Effect} callback\r\n * @param {any[]} args\r\n */\r\nexport function useEffect(callback, args) {\r\n\t/** @type {import('./internal').EffectHookState} */\r\n\tconst state = getHookState(currentIndex++, 3);\r\n\tif (!options._skipEffects && argsChanged(state._args, args)) {\r\n\t\tstate._value = callback;\r\n\t\tstate._args = args;\r\n\r\n\t\tcurrentComponent.__hooks._pendingEffects.push(state);\r\n\t}\r\n}\r\n\r\n/**\r\n * @param {import('./internal').Effect} callback\r\n * @param {any[]} args\r\n */\r\nexport function useLayoutEffect(callback, args) {\r\n\t/** @type {import('./internal').EffectHookState} */\r\n\tconst state = getHookState(currentIndex++, 4);\r\n\tif (!options._skipEffects && argsChanged(state._args, args)) {\r\n\t\tstate._value = callback;\r\n\t\tstate._args = args;\r\n\r\n\t\tcurrentComponent._renderCallbacks.push(state);\r\n\t}\r\n}\r\n\r\nexport function useRef(initialValue) {\r\n\tcurrentHook = 5;\r\n\treturn useMemo(() => ({ current: initialValue }), []);\r\n}\r\n\r\n/**\r\n * @param {object} ref\r\n * @param {() => object} createHandle\r\n * @param {any[]} args\r\n */\r\nexport function useImperativeHandle(ref, createHandle, args) {\r\n\tcurrentHook = 6;\r\n\tuseLayoutEffect(\r\n\t\t() => {\r\n\t\t\tif (typeof ref == 'function') ref(createHandle());\r\n\t\t\telse if (ref) ref.current = createHandle();\r\n\t\t},\r\n\t\targs == null ? args : args.concat(ref)\r\n\t);\r\n}\r\n\r\n/**\r\n * @param {() => any} factory\r\n * @param {any[]} args\r\n */\r\nexport function useMemo(factory, args) {\r\n\t/** @type {import('./internal').MemoHookState} */\r\n\tconst state = getHookState(currentIndex++, 7);\r\n\tif (argsChanged(state._args, args)) {\r\n\t\tstate._value = factory();\r\n\t\tstate._args = args;\r\n\t\tstate._factory = factory;\r\n\t}\r\n\r\n\treturn state._value;\r\n}\r\n\r\n/**\r\n * @param {() => void} callback\r\n * @param {any[]} args\r\n */\r\nexport function useCallback(callback, args) {\r\n\tcurrentHook = 8;\r\n\treturn useMemo(() => callback, args);\r\n}\r\n\r\n/**\r\n * @param {import('./internal').PreactContext} context\r\n */\r\nexport function useContext(context) {\r\n\tconst provider = currentComponent.context[context._id];\r\n\t// We could skip this call here, but than we'd not call\r\n\t// `options._hook`. We need to do that in order to make\r\n\t// the devtools aware of this hook.\r\n\t/** @type {import('./internal').ContextHookState} */\r\n\tconst state = getHookState(currentIndex++, 9);\r\n\t// The devtools needs access to the context object to\r\n\t// be able to pull of the default value when no provider\r\n\t// is present in the tree.\r\n\tstate._context = context;\r\n\tif (!provider) return context._defaultValue;\r\n\t// This is probably not safe to convert to \"!\"\r\n\tif (state._value == null) {\r\n\t\tstate._value = true;\r\n\t\tprovider.sub(currentComponent);\r\n\t}\r\n\treturn provider.props.value;\r\n}\r\n\r\n/**\r\n * Display a custom label for a custom hook for the devtools panel\r\n * @type {<T>(value: T, cb?: (value: T) => string | number) => void}\r\n */\r\nexport function useDebugValue(value, formatter) {\r\n\tif (options.useDebugValue) {\r\n\t\toptions.useDebugValue(formatter ? formatter(value) : value);\r\n\t}\r\n}\r\n\r\n/**\r\n * @param {(error: any) => void} cb\r\n */\r\nexport function useErrorBoundary(cb) {\r\n\t/** @type {import('./internal').ErrorBoundaryHookState} */\r\n\tconst state = getHookState(currentIndex++, 10);\r\n\tconst errState = useState();\r\n\tstate._value = cb;\r\n\tif (!currentComponent.componentDidCatch) {\r\n\t\tcurrentComponent.componentDidCatch = err => {\r\n\t\t\tif (state._value) state._value(err);\r\n\t\t\terrState[1](err);\r\n\t\t};\r\n\t}\r\n\treturn [\r\n\t\terrState[0],\r\n\t\t() => {\r\n\t\t\terrState[1](undefined);\r\n\t\t}\r\n\t];\r\n}\r\n\r\n/**\r\n * After paint effects consumer.\r\n */\r\nfunction flushAfterPaintEffects() {\r\n\tlet component;\r\n\t// sort the queue by depth (outermost to innermost)\r\n\tafterPaintEffects.sort((a, b) => a._vnode._depth - b._vnode._depth);\r\n\twhile (component = afterPaintEffects.pop()) {\r\n\t\tif (!component._parentDom) continue;\r\n\t\ttry {\r\n\t\t\tcomponent.__hooks._pendingEffects.forEach(invokeCleanup);\r\n\t\t\tcomponent.__hooks._pendingEffects.forEach(invokeEffect);\r\n\t\t\tcomponent.__hooks._pendingEffects = [];\r\n\t\t} catch (e) {\r\n\t\t\tcomponent.__hooks._pendingEffects = [];\r\n\t\t\toptions._catchError(e, component._vnode);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nlet HAS_RAF = typeof requestAnimationFrame == 'function';\r\n\r\n/**\r\n * Schedule a callback to be invoked after the browser has a chance to paint a new frame.\r\n * Do this by combining requestAnimationFrame (rAF) + setTimeout to invoke a callback after\r\n * the next browser frame.\r\n *\r\n * Also, schedule a timeout in parallel to the the rAF to ensure the callback is invoked\r\n * even if RAF doesn't fire (for example if the browser tab is not visible)\r\n *\r\n * @param {() => void} callback\r\n */\r\nfunction afterNextFrame(callback) {\r\n\tconst done = () => {\r\n\t\tclearTimeout(timeout);\r\n\t\tif (HAS_RAF) cancelAnimationFrame(raf);\r\n\t\tsetTimeout(callback);\r\n\t};\r\n\tconst timeout = setTimeout(done, RAF_TIMEOUT);\r\n\r\n\tlet raf;\r\n\tif (HAS_RAF) {\r\n\t\traf = requestAnimationFrame(done);\r\n\t}\r\n}\r\n\r\n// Note: if someone used options.debounceRendering = requestAnimationFrame,\r\n// then effects will ALWAYS run on the NEXT frame instead of the current one, incurring a ~16ms delay.\r\n// Perhaps this is not such a big deal.\r\n/**\r\n * Schedule afterPaintEffects flush after the browser paints\r\n * @param {number} newQueueLength\r\n */\r\nfunction afterPaint(newQueueLength) {\r\n\tif (newQueueLength === 1 || prevRaf !== options.requestAnimationFrame) {\r\n\t\tprevRaf = options.requestAnimationFrame;\r\n\t\t(prevRaf || afterNextFrame)(flushAfterPaintEffects);\r\n\t}\r\n}\r\n\r\n/**\r\n * @param {import('./internal').EffectHookState} hook\r\n */\r\nfunction invokeCleanup(hook) {\r\n\t// A hook cleanup can introduce a call to render which creates a new root, this will call options.vnode\r\n\t// and move the currentComponent away.\r\n\tconst comp = currentComponent;\r\n\tlet cleanup = hook._cleanup;\r\n\tif (typeof cleanup == 'function') {\r\n\t\thook._cleanup = undefined;\r\n\t\tcleanup();\r\n\t}\r\n\tcurrentComponent = comp;\r\n}\r\n\r\n/**\r\n * Invoke a Hook's effect\r\n * @param {import('./internal').EffectHookState} hook\r\n */\r\nfunction invokeEffect(hook) {\r\n\t// A hook call can introduce a call to render which creates a new root, this will call options.vnode\r\n\t// and move the currentComponent away.\r\n\tconst comp = currentComponent;\r\n\thook._cleanup = hook._value();\r\n\tcurrentComponent = comp;\r\n}\r\n\r\n/**\r\n * @param {any[]} oldArgs\r\n * @param {any[]} newArgs\r\n */\r\nfunction argsChanged(oldArgs, newArgs) {\r\n\treturn (\r\n\t\t!oldArgs ||\r\n\t\toldArgs.length !== newArgs.length ||\r\n\t\tnewArgs.some((arg, index) => arg !== oldArgs[index])\r\n\t);\r\n}\r\n\r\nfunction invokeOrReturn(arg, f) {\r\n\treturn typeof f == 'function' ? f(arg) : f;\r\n}\r\n", "export { default as PureInlineComponent } from './PureInlineComponent.js'\n", "import { PureComponent } from 'preact/compat'\n\nexport default class PureInlineComponent extends PureComponent {\n  shouldComponentUpdate(nextProps) {\n    for (let k in nextProps) {\n      if (k == 'children') continue\n\n      if (nextProps[k] != this.props[k]) {\n        return true\n      }\n    }\n\n    return false\n  }\n\n  render() {\n    return this.props.children\n  }\n}\n", "import { render } from 'preact'\n\nimport { init, getProps } from '../../config'\nimport { ShadowElement } from '../HTMLElement'\nimport { Picker, PickerStyles } from '.'\nimport PickerProps from './PickerProps'\n\nexport default class PickerElement extends ShadowElement {\n  static Props = PickerProps\n\n  constructor(props) {\n    super(props, { styles: PickerStyles })\n  }\n\n  async connectedCallback() {\n    const props = getProps(this.props, PickerProps, this)\n    props.element = this\n    props.ref = (component) => {\n      this.component = component\n    }\n\n    await init(props)\n    render(<Picker {...props} />, this.shadowRoot)\n  }\n\n  disconnectedCallback() {\n    if (this.component) {\n      this.component.unregister()\n    }\n  }\n}\n\nif (\n  typeof customElements !== 'undefined' &&\n  !customElements.get('em-emoji-picker')\n) {\n  customElements.define('em-emoji-picker', PickerElement)\n}\n", "module.exports = \"91f375a70e5124bd\";", "import ApplicationController from '../../controllers/application_controller'\n\nexport default class extends ApplicationController {\n  handleEmojiSelect(e) {\n    let native = e.detail.native\n    this.editor.insertString(native)\n  }\n\n  get editor() {\n    return this.element.querySelector('trix-editor').editor\n  }\n}\n", "import ApplicationController from '../../controllers/application_controller'\n\nexport default class extends ApplicationController {\n  submit() {\n    this.element.requestSubmit()\n  }\n}\n", "import ApplicationController from '../../controllers/application_controller'\n\nexport default class extends ApplicationController {\n  show() {\n    const parentDialog = this.element.closest('wa-dialog') || this.element.closest('wa-drawer')\n\n    if (parentDialog) {\n      parentDialog.open = false\n    }\n\n    const dialog = document.getElementById('guest-interaction-prompt')\n    if (dialog) {\n      dialog.open = true\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n  static targets = ['container', 'leftButton', 'rightButton']\n\n  connect() {\n    this.checkScroll()\n\n    // eslint-disable-next-line no-undef\n    this.resizeObserver = new ResizeObserver(() => {\n      this.checkScroll()\n    })\n\n    this.resizeObserver.observe(this.containerTarget)\n  }\n\n  disconnect() {\n    if (this.resizeObserver) {\n      this.resizeObserver.disconnect()\n    }\n  }\n\n  checkScroll() {\n    const container = this.containerTarget\n\n    this.leftButtonTarget.classList.toggle('hidden', container.scrollLeft <= 0)\n\n    this.rightButtonTarget.classList.toggle(\n      'hidden',\n      container.scrollLeft + container.clientWidth >= container.scrollWidth\n    )\n  }\n\n  scrollLeft() {\n    this.containerTarget.scrollBy({\n      left: -200,\n      behavior: 'smooth',\n    })\n  }\n\n  scrollRight() {\n    this.containerTarget.scrollBy({\n      left: 200,\n      behavior: 'smooth',\n    })\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\nconst _ReadMore = class _ReadMore extends Controller {\n  connect() {\n    this.open = !1;\n  }\n  toggle(event) {\n    this.open === !1 ? this.show(event) : this.hide(event);\n  }\n  show(event) {\n    this.open = !0;\n    const target = event.target;\n    target.innerHTML = this.lessTextValue, this.contentTarget.style.setProperty(\"--read-more-line-clamp\", \"'unset'\");\n  }\n  hide(event) {\n    this.open = !1;\n    const target = event.target;\n    target.innerHTML = this.moreTextValue, this.contentTarget.style.removeProperty(\"--read-more-line-clamp\");\n  }\n};\n_ReadMore.targets = [\"content\"], _ReadMore.values = {\n  moreText: String,\n  lessText: String\n};\nlet ReadMore = _ReadMore;\nexport {\n  ReadMore as default\n};\n", "import ApplicationController from '../../controllers/application_controller'\nimport { debounce } from 'lodash'\n\nexport default class extends ApplicationController {\n  static targets = ['searchDialog', 'form', 'input', 'remote']\n\n  initialize() {\n    this.debouncedSearch = debounce(this.submitSearch, 400)\n  }\n\n  openSearch({ params: { autoSearch = true } }) {\n    this.show()\n\n    if (!autoSearch) return\n\n    this.submitSearch()\n  }\n\n  search() {\n    this.debouncedSearch()\n  }\n\n  submitSearch() {\n    this.formTarget.requestSubmit()\n  }\n\n  show() {\n    this.searchDialogTarget.open = true\n  }\n\n  hide() {\n    this.searchDialogTarget.open = false\n  }\n\n  remoteTrigger() {\n    this.show()\n    this.inputTarget.setAttribute('value', this.remoteTarget.value)\n    this.submitSearch()\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport { navigator } from '@hotwired/turbo'\n\n// Native-feel swipe tabs using CSS scroll-snap.\n//\n// Content follows the finger via browser-native scroll physics (hardware\n// accelerated). Inactive panels are pre-loaded via lazy turbo-frames so\n// swiping triggers zero network requests.\n//\n// The controller syncs the tab bar highlight, the browser URL, and\n// Hotwire Native bridge controllers (stashed on inactive panels so\n// bridge messages only fire for the visible tab).\n//\n// Targets:\n//   scroller - the horizontal scroll container (snap-x)\n//   panel    - each full-width tab panel inside the scroller\nexport default class extends Controller {\n  static targets = ['scroller', 'panel']\n  static values = {\n    activeIndex: { type: Number, default: 0 },\n    urls: Array,\n  }\n\n  connect() {\n    this.index = this.activeIndexValue\n    this.manageBridgeControllers()\n    requestAnimationFrame(() => this.scrollTo(this.index, false))\n  }\n\n  disconnect() {\n    clearTimeout(this.scrollTimer)\n    this.element.querySelectorAll('[data-stashed-controller]').forEach((el) => {\n      el.setAttribute('data-controller', el.dataset.stashedController)\n      el.removeAttribute('data-stashed-controller')\n    })\n  }\n\n  selectTab(event) {\n    const tab = event.target.closest('[role=\"tab\"]')\n    if (!tab) return\n    event.preventDefault()\n    const i = this.tabs.indexOf(tab)\n    if (i >= 0) this.scrollTo(i)\n  }\n\n  scroll() {\n    this.syncTab()\n    clearTimeout(this.scrollTimer)\n    this.scrollTimer = setTimeout(() => this.syncUrl(), 120)\n  }\n\n  scrollEnd() {\n    this.syncTab()\n    this.syncUrl()\n  }\n\n  frameLoaded() {\n    this.manageBridgeControllers()\n  }\n\n  frameBeforeRender(event) {\n    const panel = event.target?.closest?.('[data-scroll-tabs-target=\"panel\"]')\n    if (!panel || this.panelTargets.indexOf(panel) === this.index) return\n\n    this.stashBridgeControllers(event.detail?.newFrame)\n  }\n\n  // Private\n\n  syncTab() {\n    const { scrollLeft, offsetWidth } = this.scrollerTarget\n    if (offsetWidth === 0) return\n    const i = Math.round(scrollLeft / offsetWidth)\n    if (i === this.index || i < 0 || i >= this.panelTargets.length) return\n    this.index = i\n    this.activateTab(i)\n  }\n\n  syncUrl() {\n    clearTimeout(this.scrollTimer)\n    const url = this.urlsValue[this.index]\n    if (url) navigator.history.replace(new URL(url, window.location.origin))\n  }\n\n  scrollTo(index, smooth = true) {\n    if (index < 0 || index >= this.panelTargets.length) return\n    this.scrollerTarget.scrollTo({\n      left: index * this.scrollerTarget.offsetWidth,\n      behavior: smooth ? 'smooth' : 'instant',\n    })\n  }\n\n  manageBridgeControllers() {\n    this.panelTargets.forEach((panel, i) => {\n      if (i === this.index) {\n        panel.querySelectorAll('[data-stashed-controller]').forEach((el) => {\n          this.restoreBridgeControllers(el)\n        })\n      } else {\n        this.stashBridgeControllers(panel)\n      }\n    })\n  }\n\n  stashBridgeControllers(root) {\n    if (!root) return\n\n    root.querySelectorAll('[data-controller]').forEach((el) => {\n      const controllers = this.controllerNames(el)\n      const bridgeControllers = controllers.filter((controller) => controller.startsWith('bridge--'))\n      if (bridgeControllers.length === 0) return\n\n      el.setAttribute('data-stashed-controller', bridgeControllers.join(' '))\n\n      const activeControllers = controllers.filter((controller) => !controller.startsWith('bridge--'))\n      if (activeControllers.length > 0) {\n        el.setAttribute('data-controller', activeControllers.join(' '))\n      } else {\n        el.removeAttribute('data-controller')\n      }\n    })\n  }\n\n  restoreBridgeControllers(element) {\n    const activeControllers = this.controllerNames(element)\n    const stashedControllers = this.controllerNames(element, 'data-stashed-controller')\n    const controllers = [...new Set([...activeControllers, ...stashedControllers])]\n\n    if (controllers.length > 0) {\n      element.setAttribute('data-controller', controllers.join(' '))\n    }\n    element.removeAttribute('data-stashed-controller')\n  }\n\n  controllerNames(element, attribute = 'data-controller') {\n    return (element.getAttribute(attribute) || '').split(/\\s+/).filter(Boolean)\n  }\n\n  activateTab(index) {\n    this.manageBridgeControllers()\n    this.tabs.forEach((tab, i) => {\n      const active = i === index\n      tab.setAttribute('aria-selected', String(active))\n      tab.classList.toggle('border-brand-600', active)\n      tab.classList.toggle('text-brand', active)\n      tab.classList.toggle('border-transparent', !active)\n      tab.classList.toggle('text-color-weak', !active)\n    })\n  }\n\n  get tabs() {\n    return [...this.element.querySelectorAll('[role=\"tab\"]')]\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n  static targets = ['nativeBadge']\n  static values = {\n    unreadCount: Number,\n  }\n\n  connect() {\n    this.syncCountToNative()\n  }\n\n  unreadCountValueChanged() {\n    this.syncCountToNative()\n  }\n\n  // Update the mobile device with the current unread count\n  syncCountToNative() {\n    if (this.hasNativeBadgeTarget) {\n      // Use the same count for both app badge and tab badge since there's only one contact context\n      const count = this.unreadCountValue || 0\n      this.nativeBadgeTarget.setAttribute('data-bridge--notification-badge-total-value', count)\n      this.nativeBadgeTarget.setAttribute('data-bridge--notification-badge-account-value', count)\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport { post, destroy } from '@rails/request.js'\n\n// Manages browser Web Push subscription lifecycle with clear UI states.\n//\n// States (data-state attribute on the root element):\n//   \"loading\"     - Checking browser/subscription status\n//   \"unsupported\" - Browser doesn't support push\n//   \"ready\"       - Can subscribe (permission not yet requested or granted but not subscribed)\n//   \"subscribing\" - Actively subscribing (after clicking enable)\n//   \"enabled\"     - Subscribed and receiving notifications\n//   \"denied\"      - Browser permission permanently denied\nexport default class extends Controller {\n  static targets = ['toggle', 'message']\n  static values = { subscriptionsUrl: String, testUrl: String, testNoticedUrl: String, pushEnabled: Boolean }\n\n  #serverSubscriptionId = null\n\n  async connect() {\n    this.#setState('loading')\n\n    if (!this.#supported) {\n      this.#setState('unsupported')\n      return\n    }\n\n    try {\n      await this.#checkCurrentState()\n    } catch (error) {\n      console.warn('[WebPush] Failed to check current state:', error)\n      this.#setState('ready')\n    }\n  }\n\n  async toggle() {\n    const currentState = this.element.dataset.state\n    if (currentState === 'enabled') {\n      await this.unsubscribe()\n    } else if (currentState === 'ready') {\n      await this.subscribe()\n    }\n  }\n\n  async subscribe() {\n    if (!this.#supported) return\n    this.#setState('subscribing')\n\n    try {\n      const registration = (await this.#getServiceWorkerRegistration()) || (await this.#registerServiceWorker())\n\n      switch (Notification.permission) {\n        case 'denied':\n          this.#setState('denied')\n          break\n        case 'granted':\n          await this.#subscribeToPush(registration)\n          break\n        case 'default': {\n          const permission = await Notification.requestPermission()\n          if (permission === 'granted') {\n            await this.#subscribeToPush(registration)\n          } else if (permission === 'denied') {\n            this.#setState('denied')\n          } else {\n            this.#setState('ready')\n          }\n          break\n        }\n      }\n    } catch (error) {\n      console.warn('[WebPush] Subscribe failed:', error)\n      this.#setState('ready')\n    }\n  }\n\n  async unsubscribe() {\n    try {\n      const registration = await this.#getServiceWorkerRegistration()\n      if (registration) {\n        const subscription = await registration.pushManager.getSubscription()\n        if (subscription) {\n          await subscription.unsubscribe()\n        }\n      }\n      await this.#deleteServerSubscription()\n    } catch (error) {\n      console.warn('[WebPush] Unsubscribe failed:', error)\n    }\n    this.pushEnabledValue = false\n    this.#setState('ready')\n  }\n\n  async sendTestPush() {\n    if (!this.hasTestUrlValue || !this.testUrlValue) return\n    await post(this.testUrlValue)\n  }\n\n  async sendTestNoticedPush() {\n    if (!this.hasTestNoticedUrlValue || !this.testNoticedUrlValue) return\n    await post(this.testNoticedUrlValue)\n  }\n\n  // Private\n\n  get #supported() {\n    if (this.#nativeApp) return false\n    return 'serviceWorker' in navigator && 'Notification' in window && 'PushManager' in window\n  }\n\n  get #nativeApp() {\n    return !!document.querySelector('meta[name=\"native-app\"]')\n  }\n\n  async #checkCurrentState() {\n    if (Notification.permission === 'denied') {\n      this.#setState('denied')\n      return\n    }\n\n    if (Notification.permission === 'granted') {\n      if (this.pushEnabledValue) {\n        this.#setState('enabled')\n        await this.#ensureSubscription()\n      } else {\n        this.#setState('ready')\n      }\n      return\n    }\n\n    // \"default\" \u2014 not yet requested\n    this.#setState('ready')\n  }\n\n  async #getServiceWorkerRegistration() {\n    return navigator.serviceWorker.getRegistration('/service-worker')\n  }\n\n  async #registerServiceWorker() {\n    await navigator.serviceWorker.register('/service-worker', { scope: '/' })\n    return navigator.serviceWorker.ready\n  }\n\n  async #ensureSubscription() {\n    const registration = (await this.#getServiceWorkerRegistration()) || (await this.#registerServiceWorker())\n\n    const existingSubscription = await registration.pushManager.getSubscription()\n    if (existingSubscription) {\n      await this.#syncSubscription(existingSubscription)\n    } else {\n      await this.#subscribeToPush(registration)\n    }\n  }\n\n  async #subscribeToPush(registration) {\n    const subscription = await registration.pushManager.subscribe({\n      userVisibleOnly: true,\n      applicationServerKey: this.#vapidPublicKey,\n    })\n    await this.#syncSubscription(subscription)\n  }\n\n  async #syncSubscription(subscription) {\n    const { endpoint, keys } = subscription.toJSON()\n\n    const response = await post(this.subscriptionsUrlValue, {\n      body: JSON.stringify({\n        web_push_subscription: { endpoint, p256dh_key: keys.p256dh, auth_key: keys.auth },\n      }),\n    })\n\n    if (response.ok) {\n      const data = await response.json\n      this.#serverSubscriptionId = data.id\n      this.pushEnabledValue = true\n      this.#setState('enabled')\n    } else {\n      await subscription.unsubscribe()\n      this.#setState('ready')\n    }\n  }\n\n  async #deleteServerSubscription() {\n    if (!this.#serverSubscriptionId) return\n\n    await destroy(`${this.subscriptionsUrlValue}/${this.#serverSubscriptionId}`, {\n      responseKind: 'json',\n    })\n    this.#serverSubscriptionId = null\n  }\n\n  get #vapidPublicKey() {\n    const encoded = document.querySelector('meta[name=\"vapid-public-key\"]')?.content\n    if (!encoded) return null\n    return this.#urlBase64ToUint8Array(encoded)\n  }\n\n  #urlBase64ToUint8Array(base64String) {\n    const padding = '='.repeat((4 - (base64String.length % 4)) % 4)\n    const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/')\n    const rawData = window.atob(base64)\n    const outputArray = new Uint8Array(rawData.length)\n    for (let i = 0; i < rawData.length; ++i) {\n      outputArray[i] = rawData.charCodeAt(i)\n    }\n    return outputArray\n  }\n\n  #setState(state) {\n    this.element.dataset.state = state\n\n    if (this.hasToggleTarget) {\n      this.toggleTarget.checked = state === 'enabled'\n      this.toggleTarget.disabled =\n        state === 'loading' || state === 'subscribing' || state === 'unsupported' || state === 'denied'\n    }\n\n    if (this.hasMessageTarget) {\n      this.messageTarget.textContent = this.#messageForState(state)\n    }\n  }\n\n  #messageForState(state) {\n    if (!this.hasMessageTarget) return ''\n    return this.messageTarget.dataset[`${state}Message`] || ''\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport { destroy } from '@rails/request.js'\n\n// Cleans up the current browser's web push subscription on sign-out.\n// Attach to sign-out forms/buttons. On form submit, this controller\n// unsubscribes the browser push subscription and deletes the matching\n// server record before proceeding with the sign-out.\n//\n// This mirrors the native push pattern where bridge--sign-out sends\n// the device's notification_token to the server for cleanup.\nexport default class extends Controller {\n  static values = { unsubscribeUrl: String }\n\n  connect() {\n    this.element.addEventListener('submit', this.#handleSubmit)\n  }\n\n  disconnect() {\n    this.element.removeEventListener('submit', this.#handleSubmit)\n  }\n\n  // Private\n\n  #handleSubmit = (event) => {\n    if (!this.#supported) return\n    if (Notification.permission !== 'granted') return\n\n    event.preventDefault()\n    this.#cleanupAndSubmit(event.target)\n  }\n\n  get #supported() {\n    return 'serviceWorker' in navigator && 'PushManager' in window\n  }\n\n  async #cleanupAndSubmit(form) {\n    try {\n      const registration = await navigator.serviceWorker.getRegistration('/service-worker')\n      if (registration) {\n        const subscription = await registration.pushManager.getSubscription()\n        if (subscription) {\n          const { endpoint } = subscription.toJSON()\n          await this.#deleteServerSubscription(endpoint)\n          await subscription.unsubscribe()\n        }\n      }\n    } catch (error) {\n      // Sign-out must succeed even if push cleanup fails\n      console.warn('[WebPush] Sign-out cleanup failed:', error)\n    }\n\n    form.submit()\n  }\n\n  async #deleteServerSubscription(endpoint) {\n    await destroy(this.unsubscribeUrlValue, {\n      body: JSON.stringify({ endpoint }),\n    })\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport { post } from '@rails/request.js'\n\n// Silently syncs the browser's existing web push subscription to the server\n// on every page load. Runs in the customer center layout alongside\n// bridge--notification-token (which handles native push).\n//\n// This controller does NOT request permission or create new subscriptions.\n// It only syncs subscriptions that already exist (i.e., the contact\n// previously opted in via the notification preferences page).\nexport default class extends Controller {\n  static values = { subscriptionsUrl: String }\n\n  async connect() {\n    if (!this.#supported) return\n    if (Notification.permission !== 'granted') return\n\n    try {\n      await this.#syncExistingSubscription()\n    } catch {\n      // Sync failure is non-critical; browser will retry on next page load\n    }\n  }\n\n  // Private\n\n  get #supported() {\n    return 'serviceWorker' in navigator && 'Notification' in window && 'PushManager' in window\n  }\n\n  async #syncExistingSubscription() {\n    const registration = await navigator.serviceWorker.getRegistration('/service-worker')\n    if (!registration) return\n\n    const subscription = await registration.pushManager.getSubscription()\n    if (!subscription) return\n\n    const { endpoint, keys } = subscription.toJSON()\n\n    await post(this.subscriptionsUrlValue, {\n      body: JSON.stringify({\n        web_push_subscription: { endpoint, p256dh_key: keys.p256dh, auth_key: keys.auth },\n      }),\n    })\n  }\n}\n", "import { BridgeComponent } from \"@hotwired/hotwire-native-bridge\"\n// Source:\n// https://native.hotwired.dev/ios/bridge-components\n// Docs:\n// https://blog.corsego.com/hotwire-native-bridge-button\n\n// Example:\n// Text button:\n// <a href=\"/posts\" data-controller=\"bridge--left-button\" data-bridge-title=\"Posts\">\n//   Posts\n// </a>\n// \n// Icon button:\n// <a href=\"/posts\" data-controller=\"bridge--left-button\" data-bridge-title=\"Posts\" data-bridge-ios-image=\"play.circle\">\n//   Posts\n// </a>\n// \n// Text with a click event:\n// <div data-controller=\"bridge--left-button\" data-bridge-title=\"Search\" data-bridge-ios-image=\"magnifyingglass.circle\" class=\"hidden\" data-action=\"click->dialog#open\">\n//   Search\n// </div>\nexport default class extends BridgeComponent {\n  static component = \"left-button\"\n\n  connect() {\n    super.connect()\n\n    const element = this.bridgeElement\n    const title = element.bridgeAttribute(\"title\")\n    const image = element.bridgeAttribute(\"ios-image\")\n    this.send(\"connect\", { title, image }, () => {\n      this.element.click()\n    })\n  }\n\n  disconnect() {\n    super.disconnect()\n    this.send(\"disconnect\")\n  }\n}\n\n", "/*\nHotwire Native Bridge 1.2.2\nCopyright \u00A9 2025 37signals LLC\n*/\n\n// src/bridge.js\nvar Bridge = class {\n  #adapter;\n  #lastMessageId;\n  #pendingMessages;\n  #pendingCallbacks;\n  constructor() {\n    this.#adapter = null;\n    this.#lastMessageId = 0;\n    this.#pendingMessages = [];\n    this.#pendingCallbacks = /* @__PURE__ */ new Map();\n  }\n  start() {\n    this.notifyApplicationAfterStart();\n  }\n  notifyApplicationAfterStart() {\n    document.dispatchEvent(new Event(\"web-bridge:ready\"));\n  }\n  supportsComponent(component) {\n    if (this.#adapter) {\n      return this.#adapter.supportsComponent(component);\n    } else {\n      return false;\n    }\n  }\n  send({ component, event, data, callback }) {\n    if (!this.#adapter) {\n      this.#savePendingMessage({ component, event, data, callback });\n      return null;\n    }\n    if (!this.supportsComponent(component)) return null;\n    const id = this.generateMessageId();\n    const message = { id, component, event, data: data || {} };\n    this.#adapter.receive(message);\n    if (callback) {\n      this.#pendingCallbacks.set(id, callback);\n    }\n    return id;\n  }\n  receive(message) {\n    this.executeCallbackFor(message);\n  }\n  executeCallbackFor(message) {\n    const callback = this.#pendingCallbacks.get(message.id);\n    if (callback) {\n      callback(message);\n    }\n  }\n  removeCallbackFor(messageId) {\n    if (this.#pendingCallbacks.has(messageId)) {\n      this.#pendingCallbacks.delete(messageId);\n    }\n  }\n  removePendingMessagesFor(component) {\n    this.#pendingMessages = this.#pendingMessages.filter((message) => message.component != component);\n  }\n  generateMessageId() {\n    const id = ++this.#lastMessageId;\n    return id.toString();\n  }\n  setAdapter(adapter) {\n    this.#adapter = adapter;\n    document.documentElement.dataset.bridgePlatform = this.#adapter.platform;\n    this.adapterDidUpdateSupportedComponents();\n    this.#sendPendingMessages();\n  }\n  adapterDidUpdateSupportedComponents() {\n    if (this.#adapter) {\n      document.documentElement.dataset.bridgeComponents = this.#adapter.supportedComponents.join(\" \");\n    }\n  }\n  #savePendingMessage(message) {\n    this.#pendingMessages.push(message);\n  }\n  #sendPendingMessages() {\n    this.#pendingMessages.forEach((message) => this.send(message));\n    this.#pendingMessages = [];\n  }\n};\n\n// src/bridge_component.js\nimport { Controller } from \"@hotwired/stimulus\";\n\n// src/bridge_element.js\nvar BridgeElement = class {\n  constructor(element) {\n    this.element = element;\n  }\n  get title() {\n    return (this.bridgeAttribute(\"title\") || this.attribute(\"aria-label\") || this.element.textContent || this.element.value).trim();\n  }\n  get enabled() {\n    return !this.disabled;\n  }\n  get disabled() {\n    const disabled = this.bridgeAttribute(\"disabled\");\n    return disabled === \"true\" || disabled === this.platform;\n  }\n  enableForComponent(component) {\n    if (component.enabled) {\n      this.removeBridgeAttribute(\"disabled\");\n    }\n  }\n  hasClass(className) {\n    return this.element.classList.contains(className);\n  }\n  attribute(name) {\n    return this.element.getAttribute(name);\n  }\n  bridgeAttribute(name) {\n    return this.attribute(`data-bridge-${name}`);\n  }\n  setBridgeAttribute(name, value) {\n    this.element.setAttribute(`data-bridge-${name}`, value);\n  }\n  removeBridgeAttribute(name) {\n    this.element.removeAttribute(`data-bridge-${name}`);\n  }\n  click() {\n    if (this.platform == \"android\") {\n      this.element.removeAttribute(\"target\");\n    }\n    this.element.click();\n  }\n  get platform() {\n    return document.documentElement.dataset.bridgePlatform;\n  }\n};\n\n// src/helpers/user_agent.js\nvar { userAgent } = window.navigator;\nfunction appSupportsBridgeComponent(component) {\n  const supportedComponents = userAgent.match(/bridge-components: \\[(.*?)\\]/);\n  if (supportedComponents) {\n    return supportedComponents[1].split(\" \").includes(component);\n  } else {\n    return false;\n  }\n}\n\n// src/bridge_component.js\nvar BridgeComponent = class extends Controller {\n  static component = \"\";\n  static get shouldLoad() {\n    return appSupportsBridgeComponent(this.component);\n  }\n  pendingMessageCallbacks = [];\n  initialize() {\n    this.pendingMessageCallbacks = [];\n  }\n  connect() {\n    this.removeRestoreEventListener();\n    this.addRestoreEventListener();\n  }\n  disconnect() {\n    this.removePendingCallbacks();\n    this.removePendingMessages();\n    this.removeRestoreEventListener();\n  }\n  addRestoreEventListener() {\n    this.restore = this.restore.bind(this);\n    document.addEventListener(\"native:restore\", this.restore);\n  }\n  removeRestoreEventListener() {\n    document.removeEventListener(\"native:restore\", this.restore);\n  }\n  restore() {\n    this.connect();\n  }\n  get component() {\n    return this.constructor.component;\n  }\n  get platformOptingOut() {\n    const { bridgePlatform } = document.documentElement.dataset;\n    return this.identifier == this.element.getAttribute(`data-controller-optout-${bridgePlatform}`);\n  }\n  get enabled() {\n    return !this.platformOptingOut && this.bridge.supportsComponent(this.component);\n  }\n  send(event, data = {}, callback) {\n    data.metadata = {\n      url: window.location.href\n    };\n    const message = { component: this.component, event, data, callback };\n    const messageId = this.bridge.send(message);\n    if (callback) {\n      this.pendingMessageCallbacks.push(messageId);\n    }\n  }\n  removePendingCallbacks() {\n    this.pendingMessageCallbacks.forEach((messageId) => this.bridge.removeCallbackFor(messageId));\n  }\n  removePendingMessages() {\n    this.bridge.removePendingMessagesFor(this.component);\n  }\n  get bridgeElement() {\n    return new BridgeElement(this.element);\n  }\n  get bridge() {\n    return window.HotwireNative.web;\n  }\n};\n\n// src/index.js\nif (!window.HotwireNative) {\n  const webBridge = new Bridge();\n  window.HotwireNative = { web: webBridge };\n  addLegacyClientSupport(webBridge);\n  webBridge.start();\n}\nfunction addLegacyClientSupport(webBridge) {\n  if (!window.Strada) {\n    window.Strada = { web: webBridge };\n  }\n  if (!window.webBridge) {\n    window.webBridge = webBridge;\n  }\n}\nexport {\n  BridgeComponent,\n  BridgeElement\n};\n", "import { BridgeComponent } from \"@hotwired/hotwire-native-bridge\"\n// Source:\n// https://native.hotwired.dev/ios/bridge-components\n// Docs:\n// https://blog.corsego.com/hotwire-native-bridge-button\n\n// Example:\n// Text button:\n// <a href=\"/posts\" data-controller=\"bridge--right-button\" data-bridge-title=\"Posts\">\n//   Posts\n// </a>\n// \n// Icon button:\n// <a href=\"/posts\" data-controller=\"bridge--right-button\" data-bridge-title=\"Posts\" data-bridge-ios-image=\"play.circle\">\n//   Posts\n// </a>\n// \n// Text with a click event:\n// <div data-controller=\"bridge--right-button\" data-bridge-title=\"Search\" data-bridge-ios-image=\"magnifyingglass.circle\" class=\"hidden\" data-action=\"click->dialog#open\">\n//   Search\n// </div>\nexport default class extends BridgeComponent {\n  static component = \"right-button\"\n\n  connect() {\n    super.connect()\n\n    const element = this.bridgeElement\n    const title = element.bridgeAttribute(\"title\")\n    const image = element.bridgeAttribute(\"ios-image\")\n    this.send(\"connect\", { title, image }, () => {\n      this.element.click()\n    })\n  }\n\n  disconnect() {\n    super.disconnect()\n    this.send(\"disconnect\")\n  }\n}\n\n", "import { BridgeComponent, BridgeElement } from \"@hotwired/hotwire-native-bridge\"\n\n// Source:\n// https://github.com/hotwired/hotwire-native-demo/blob/main/public/javascript/controllers/bridge/form_controller.js\n// Docs:\n// https://blog.corsego.com/hotwire-native-form-component\n\n// Replace form_with with bridge_form_with\nexport default class extends BridgeComponent {\n  static component = \"form\"\n  static targets = [\"submit\"]\n\n  connect() {\n    super.connect()\n    this.notifyBridgeOfConnect()\n  }\n\n  notifyBridgeOfConnect() {\n    const submitButton = new BridgeElement(this.submitTarget)\n    const submitTitle = submitButton.title\n\n    this.send(\"connect\", { submitTitle }, () => {\n      this.submitTarget.click()\n    })\n  }\n\n  submitStart(event) {\n    this.submitTarget.disabled = true\n    this.send(\"submitDisabled\")\n  }\n\n  submitEnd(event) {\n    this.submitTarget.disabled = false\n    this.send(\"submitEnabled\")\n  }\n}\n", "import { BridgeComponent } from \"@hotwired/hotwire-native-bridge\"\nimport { BridgeElement } from \"@hotwired/hotwire-native-bridge\"\n// aka Action Sheet\n// open a menu by clicking an HTML element\n\n// Source:\n// https://github.com/hotwired/hotwire-native-demo/blob/main/public/javascript/controllers/bridge/menu_controller.js\n// Docs:\n// https://blog.corsego.com/hotwire-native-bridge-menu-component\nexport default class extends BridgeComponent {\n  static component = \"menu\"\n  static targets = [\"title\", \"item\"]\n\n  show(event) {\n    if (this.enabled) {\n      event.stopImmediatePropagation()\n      this.notifyBridgeToDisplayMenu(event)\n    }\n  }\n\n  notifyBridgeToDisplayMenu(event) {\n    const title = new BridgeElement(this.titleTarget).title\n    const items = this.makeMenuItems(this.itemTargets)\n\n    this.send(\"display\", { title, items }, message => {\n      const selectedIndex = message.data.selectedIndex\n      const selectedItem = new BridgeElement(this.itemTargets[selectedIndex])\n\n      selectedItem.click()\n    })\n  }\n\n  makeMenuItems(elements) {\n    const items = elements.map((element, index) => this.menuItem(element, index))\n    const enabledItems = items.filter(item => item)\n\n    return enabledItems\n  }\n\n  menuItem(element, index) {\n    const bridgeElement = new BridgeElement(element)\n\n    if (bridgeElement.disabled) return null\n\n    return {\n      title: bridgeElement.title,\n      index: index\n    }\n  }\n}", "import { BridgeComponent, BridgeElement } from \"@hotwired/hotwire-native-bridge\"\n// aka UIMenu\n\n// Docs:\n// https://blog.corsego.com/hotwire-native-ui-menu-dropdown\n\n// Example:\n// <% if user_signed_in? %>\n//   <%= tag.div data: { controller: 'bridge--nav', bridge_side: 'left', bridge_image: 'person.circle' } do %>\n//     <%= link_to \"Edit profile\", edit_user_registration_path, data: { bridge__nav_target: 'item', bridge_image: 'person.circle' } %>\n//     <%= link_to \"Sign out\", destroy_user_session_path, data: { bridge__nav_target: 'item', bridge_image: 'power.circle', turbo_method: :delete } %>\n//   <% end %>\n// <% end %>\nexport default class extends BridgeComponent {\n  static component = \"nav\"\n  static targets = [\"item\"]\n\n  connect() {\n    super.connect()\n\n    const items = this.itemTargets.map((item, index) => {\n      const itemElement = new BridgeElement(item)\n\n      return {\n        title: itemElement.title,\n        image: itemElement.bridgeAttribute(\"image\") ?? \"none\",\n        destructive: item.dataset.turboMethod === \"delete\",\n        state: itemElement.bridgeAttribute(\"state\") ?? \"off\",\n        index\n      }\n    })\n\n    const element = this.bridgeElement\n    const title = element.bridgeAttribute(\"title\") ?? \"\"\n    const side = element.bridgeAttribute(\"side\") || \"left\"\n    const image = element.bridgeAttribute(\"image\") || \"none\"\n\n    this.send(\"connect\", { items, title, image, side }, (message) => {\n      const selectedIndex = message.data.selectedIndex\n      const selectedItem = new BridgeElement(this.itemTargets[selectedIndex]);\n\n      selectedItem.click()\n    })\n  }\n}", "import { BridgeComponent } from '@hotwired/hotwire-native-bridge'\n\nexport default class extends BridgeComponent {\n  static component = 'notification-badge'\n\n  // Unread notification counts\n  static values = {\n    total: Number,\n    account: Number,\n  }\n\n  connect() {\n    // Send initial values on connect\n    this.send('update', { app: this.totalValue, tab: this.accountValue })\n  }\n\n  totalValueChanged() {\n    this.send('update', { app: this.totalValue, tab: this.accountValue })\n  }\n\n  accountValueChanged() {\n    this.send('update', { app: this.totalValue, tab: this.accountValue })\n  }\n}\n", "import { BridgeComponent } from '@hotwired/hotwire-native-bridge'\n\nexport default class extends BridgeComponent {\n  static component = 'notification-token'\n\n  connect() {\n    super.connect()\n    this.send('connect')\n  }\n}\n", "import { BridgeComponent } from '@hotwired/hotwire-native-bridge'\nimport { i18n } from '../../../i18n-js/config'\nimport Cookies from 'js-cookie'\n\nexport default class extends BridgeComponent {\n  static component = 'notification-permission'\n  static targets = ['status', 'message', 'toggle', 'settingsButton', 'requestButton', 'testButtons']\n  static values = {\n    locale: { type: String, default: 'en' },\n  }\n\n  #lastStatus = null\n  #boundVisibilityChange = null\n\n  connect() {\n    super.connect()\n    this.#boundVisibilityChange = this.#onVisibilityChange.bind(this)\n    document.addEventListener('visibilitychange', this.#boundVisibilityChange)\n    this.#lastStatus = null\n    this.#checkStatus()\n  }\n\n  disconnect() {\n    document.removeEventListener('visibilitychange', this.#boundVisibilityChange)\n  }\n\n  recheck() {\n    this.#checkStatus()\n  }\n\n  requestPermission() {\n    const element = document.querySelector('[data-controller*=\"bridge--notification-token\"]')\n    if (!element) return\n    const tokenController = this.application.getControllerForElementAndIdentifier(element, 'bridge--notification-token')\n    tokenController?.send('connect')\n    this.#checkStatus(1000)\n  }\n\n  #onVisibilityChange() {\n    if (document.visibilityState === 'visible') {\n      this.#checkStatus(0, true)\n    }\n  }\n\n  #checkStatus(delay = 0, reloadOnChange = false) {\n    const check = () => {\n      this.send('connect', {}, (message) => {\n        const data = message?.data || message\n        const newStatus = data?.status?.toLowerCase()\n\n        if (reloadOnChange && this.#lastStatus && this.#lastStatus !== newStatus) {\n          window.Turbo.visit(window.location.href, { action: 'replace' })\n          return\n        }\n\n        this.#lastStatus = newStatus\n        this.#updateUI(newStatus)\n      })\n    }\n    if (delay > 0) {\n      setTimeout(check, delay)\n    } else {\n      check()\n    }\n  }\n\n  #updateUI(status) {\n    const isAuthorized = this.#isAuthorized(status)\n    const isNotDetermined = status === 'not_determined'\n\n    if (this.hasStatusTarget) {\n      this.statusTarget.textContent = this.#statusText(status)\n      this.statusTarget.dataset.status = status || 'unknown'\n    }\n\n    if (this.hasMessageTarget) {\n      this.messageTarget.textContent = isAuthorized ? '' : this.#statusMessage(status)\n      this.messageTarget.style.display = isAuthorized ? 'none' : 'block'\n    }\n\n    if (this.hasToggleTarget) {\n      this.toggleTarget.disabled = !isAuthorized\n    }\n\n    if (this.hasRequestButtonTarget) {\n      this.requestButtonTarget.style.display = isNotDetermined ? 'block' : 'none'\n    }\n\n    if (this.hasSettingsButtonTarget) {\n      this.settingsButtonTarget.style.display = !isAuthorized && !isNotDetermined ? 'block' : 'none'\n    }\n\n    this.#updateTestButtons(isAuthorized)\n  }\n\n  toggleTestButtons() {\n    this.#updateTestButtons(this.#isAuthorized(this.#lastStatus))\n  }\n\n  #updateTestButtons(isAuthorized) {\n    if (this.hasTestButtonsTarget) {\n      const toggledOn = this.hasToggleTarget ? this.toggleTarget.checked : true\n      this.testButtonsTarget.style.display = isAuthorized && toggledOn ? 'block' : 'none'\n    }\n  }\n\n  #isAuthorized(status) {\n    return status === 'granted' || status === 'provisional' || status === 'ephemeral'\n  }\n\n  #statusText(status) {\n    return status || 'unknown'\n  }\n\n  #statusMessage(status) {\n    const locale = this.localeValue || Cookies.get('locale') || 'en'\n    const isAuthorized = this.#isAuthorized(status)\n\n    let messageKey\n    if (!isAuthorized && status !== 'not_determined') {\n      messageKey = 'device_blocked'\n    } else if (status === 'not_determined') {\n      messageKey = 'not_determined'\n    } else if (isAuthorized) {\n      messageKey = 'enabled'\n    } else {\n      messageKey = 'unknown'\n    }\n\n    return i18n.t(`notifications.push_notification_settings.message.${messageKey}`, {\n      lng: locale,\n    })\n  }\n}\n", "import { BridgeComponent } from \"@hotwired/hotwire-native-bridge\"\n// aka Action Sheet\n// open a menu by clicking a Native button\n\n// Source:\n// https://github.com/hotwired/hotwire-native-demo/blob/main/public/javascript/controllers/bridge/overflow_menu_controller.js\n// Docs:\n// https://blog.corsego.com/hotwire-native-bridge-menu-component\n\n// Example:\n// <div data-controller=\"bridge--menu\" class=\"hotwire-native:hidden\">\n//   <button\n//     data-controller=\"bridge--overflow-menu\"\n//     data-action=\"click->bridge--menu#show click->menu#show\">\n//     Open Menu\n//   </button>\n//   <p data-bridge--menu-target=\"title\">Select an option</p>\n//   <%= link_to \"Edit\", edit_task_path(@task), data: {\"bridge--menu-target\": \"item\"} %>\n//   <%= button_to \"Destroy\", @task, method: :delete, data: {\"bridge--menu-target\": \"item\", turbo_confirm: \"Are you sure?\" } %>\n// </div>\nexport default class extends BridgeComponent {\n  static component = \"overflow-menu\"\n\n  connect() {\n    super.connect()\n    this.notifyBridgeOfConnect()\n  }\n\n  notifyBridgeOfConnect() {\n    const label = this.bridgeElement.title\n\n    this.send(\"connect\", { label }, () => {\n      this.bridgeElement.click()\n    })\n  }\n}", "import { BridgeComponent } from \"@hotwired/hotwire-native-bridge\"\n\n// Triggers app reset when the reset_app page loads\n// Usage:\n// <div data-controller=\"bridge--reset-app\"></div>\nexport default class extends BridgeComponent {\n  static component = \"reset-app\"\n\n  connect() {\n    // super.connect()\n    this.send('resetApp', {}, () => {})\n  }\n}\n\n", "import { BridgeComponent } from \"@hotwired/hotwire-native-bridge\"\n// Docs:\n// https://blog.corsego.com/hotwire-native-leave-a-review-bridge-component\n\n// Example:\n// <meta data-controller=\"bridge--review-prompt\" />\nexport default class extends BridgeComponent {\n  static component = \"review-prompt\"\n\n  connect() {\n    console.log(\"ReviewPromptController connected!\");\n    super.connect()\n    this.send(\"connect\")\n  }\n}", "import { BridgeComponent } from \"@hotwired/hotwire-native-bridge\"\n\nexport default class extends BridgeComponent {\n  static component = \"sign-out\"\n\n  static values = {\n    path: String\n  }\n\n  signOut(event) {\n    event.preventDefault()\n    event.stopImmediatePropagation()\n\n    const path = this.pathValue\n    this.send(\"signOut\", {path}, () => {})\n  }\n}\n", "import { BridgeComponent } from '@hotwired/hotwire-native-bridge'\n\n// Opens iOS Settings app to notification settings\n// Usage:\n// <button data-controller=\"bridge--open-settings\" data-action=\"click->bridge--open-settings#open\">\n//   Open Settings\n// </button>\nexport default class extends BridgeComponent {\n  static component = 'open-settings'\n\n  open() {\n    this.send('open', {}, () => {})\n  }\n}\n", "import { i18n } from '../i18n-js/config'\nimport Cookies from 'js-cookie'\nimport { Trix } from '../trix'\n\ndocument.addEventListener('trix-before-initialize', () => {\n  const locale = document.documentElement.lang || Cookies.get('locale') || 'en'\n  const newLang = i18n.t('trix', { returnObjects: true, lng: locale })\n  Object.assign((Trix.config.lang || {}), newLang) // eslint-disable-line\n})\n\ndocument.addEventListener('trix-initialize', function () {\n  addEventListener('trix-focus', updateTrixToolbarVisability)\n  addEventListener('trix-blur', updateTrixToolbarVisability)\n  updateTrixToolbarVisability()\n})\n\nfunction updateTrixToolbarVisability() {\n  document.querySelectorAll('trix-editor').forEach(function (editorElement) {\n    var toolbarElement = editorElement.toolbarElement\n    if (editorElement == document.activeElement) {\n      toolbarElement.classList.add('visible')\n    } else {\n      // don't hide the toolbar if we've unfocused to focus on the link dialog.\n      if (!toolbarElement.contains(document.activeElement)) {\n        toolbarElement.classList.remove('visible')\n      }\n    }\n  })\n}\n", "import '@turbo-boost/streams'\nimport '@turbo-boost/commands'\nimport '@turbo-boost/elements'\nimport './commands'\n", "export default '0.1.11'\n", "const schema = {\n  turboPermanentAttribute: 'data-turbo-permanent'\n}\n\nexport default { ...schema }\n", "// base IIFE to define idiomorph\nvar Idiomorph = (function () {\n        'use strict';\n\n        //=============================================================================\n        // AND NOW IT BEGINS...\n        //=============================================================================\n        let EMPTY_SET = new Set();\n\n        // default configuration values, updatable by users now\n        let defaults = {\n            morphStyle: \"outerHTML\",\n            callbacks : {\n                beforeNodeAdded: noOp,\n                afterNodeAdded: noOp,\n                beforeNodeMorphed: noOp,\n                afterNodeMorphed: noOp,\n                beforeNodeRemoved: noOp,\n                afterNodeRemoved: noOp,\n                beforeAttributeUpdated: noOp,\n\n            },\n            head: {\n                style: 'merge',\n                shouldPreserve: function (elt) {\n                    return elt.getAttribute(\"im-preserve\") === \"true\";\n                },\n                shouldReAppend: function (elt) {\n                    return elt.getAttribute(\"im-re-append\") === \"true\";\n                },\n                shouldRemove: noOp,\n                afterHeadMorphed: noOp,\n            }\n        };\n\n        //=============================================================================\n        // Core Morphing Algorithm - morph, morphNormalizedContent, morphOldNodeTo, morphChildren\n        //=============================================================================\n        function morph(oldNode, newContent, config = {}) {\n\n            if (oldNode instanceof Document) {\n                oldNode = oldNode.documentElement;\n            }\n\n            if (typeof newContent === 'string') {\n                newContent = parseContent(newContent);\n            }\n\n            let normalizedContent = normalizeContent(newContent);\n\n            let ctx = createMorphContext(oldNode, normalizedContent, config);\n\n            return morphNormalizedContent(oldNode, normalizedContent, ctx);\n        }\n\n        function morphNormalizedContent(oldNode, normalizedNewContent, ctx) {\n            if (ctx.head.block) {\n                let oldHead = oldNode.querySelector('head');\n                let newHead = normalizedNewContent.querySelector('head');\n                if (oldHead && newHead) {\n                    let promises = handleHeadElement(newHead, oldHead, ctx);\n                    // when head promises resolve, call morph again, ignoring the head tag\n                    Promise.all(promises).then(function () {\n                        morphNormalizedContent(oldNode, normalizedNewContent, Object.assign(ctx, {\n                            head: {\n                                block: false,\n                                ignore: true\n                            }\n                        }));\n                    });\n                    return;\n                }\n            }\n\n            if (ctx.morphStyle === \"innerHTML\") {\n\n                // innerHTML, so we are only updating the children\n                morphChildren(normalizedNewContent, oldNode, ctx);\n                return oldNode.children;\n\n            } else if (ctx.morphStyle === \"outerHTML\" || ctx.morphStyle == null) {\n                // otherwise find the best element match in the new content, morph that, and merge its siblings\n                // into either side of the best match\n                let bestMatch = findBestNodeMatch(normalizedNewContent, oldNode, ctx);\n\n                // stash the siblings that will need to be inserted on either side of the best match\n                let previousSibling = bestMatch?.previousSibling;\n                let nextSibling = bestMatch?.nextSibling;\n\n                // morph it\n                let morphedNode = morphOldNodeTo(oldNode, bestMatch, ctx);\n\n                if (bestMatch) {\n                    // if there was a best match, merge the siblings in too and return the\n                    // whole bunch\n                    return insertSiblings(previousSibling, morphedNode, nextSibling);\n                } else {\n                    // otherwise nothing was added to the DOM\n                    return []\n                }\n            } else {\n                throw \"Do not understand how to morph style \" + ctx.morphStyle;\n            }\n        }\n\n\n        /**\n         * @param possibleActiveElement\n         * @param ctx\n         * @returns {boolean}\n         */\n        function ignoreValueOfActiveElement(possibleActiveElement, ctx) {\n            return ctx.ignoreActiveValue && possibleActiveElement === document.activeElement && possibleActiveElement !== document.body;\n        }\n\n        /**\n         * @param oldNode root node to merge content into\n         * @param newContent new content to merge\n         * @param ctx the merge context\n         * @returns {Element} the element that ended up in the DOM\n         */\n        function morphOldNodeTo(oldNode, newContent, ctx) {\n            if (ctx.ignoreActive && oldNode === document.activeElement) {\n                // don't morph focused element\n            } else if (newContent == null) {\n                if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return oldNode;\n\n                oldNode.remove();\n                ctx.callbacks.afterNodeRemoved(oldNode);\n                return null;\n            } else if (!isSoftMatch(oldNode, newContent)) {\n                if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return oldNode;\n                if (ctx.callbacks.beforeNodeAdded(newContent) === false) return oldNode;\n\n                oldNode.parentElement.replaceChild(newContent, oldNode);\n                ctx.callbacks.afterNodeAdded(newContent);\n                ctx.callbacks.afterNodeRemoved(oldNode);\n                return newContent;\n            } else {\n                if (ctx.callbacks.beforeNodeMorphed(oldNode, newContent) === false) return oldNode;\n\n                if (oldNode instanceof HTMLHeadElement && ctx.head.ignore) {\n                    // ignore the head element\n                } else if (oldNode instanceof HTMLHeadElement && ctx.head.style !== \"morph\") {\n                    handleHeadElement(newContent, oldNode, ctx);\n                } else {\n                    syncNodeFrom(newContent, oldNode, ctx);\n                    if (!ignoreValueOfActiveElement(oldNode, ctx)) {\n                        morphChildren(newContent, oldNode, ctx);\n                    }\n                }\n                ctx.callbacks.afterNodeMorphed(oldNode, newContent);\n                return oldNode;\n            }\n        }\n\n        /**\n         * This is the core algorithm for matching up children.  The idea is to use id sets to try to match up\n         * nodes as faithfully as possible.  We greedily match, which allows us to keep the algorithm fast, but\n         * by using id sets, we are able to better match up with content deeper in the DOM.\n         *\n         * Basic algorithm is, for each node in the new content:\n         *\n         * - if we have reached the end of the old parent, append the new content\n         * - if the new content has an id set match with the current insertion point, morph\n         * - search for an id set match\n         * - if id set match found, morph\n         * - otherwise search for a \"soft\" match\n         * - if a soft match is found, morph\n         * - otherwise, prepend the new node before the current insertion point\n         *\n         * The two search algorithms terminate if competing node matches appear to outweigh what can be achieved\n         * with the current node.  See findIdSetMatch() and findSoftMatch() for details.\n         *\n         * @param {Element} newParent the parent element of the new content\n         * @param {Element } oldParent the old content that we are merging the new content into\n         * @param ctx the merge context\n         */\n        function morphChildren(newParent, oldParent, ctx) {\n\n            let nextNewChild = newParent.firstChild;\n            let insertionPoint = oldParent.firstChild;\n            let newChild;\n\n            // run through all the new content\n            while (nextNewChild) {\n\n                newChild = nextNewChild;\n                nextNewChild = newChild.nextSibling;\n\n                // if we are at the end of the exiting parent's children, just append\n                if (insertionPoint == null) {\n                    if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n                    oldParent.appendChild(newChild);\n                    ctx.callbacks.afterNodeAdded(newChild);\n                    removeIdsFromConsideration(ctx, newChild);\n                    continue;\n                }\n\n                // if the current node has an id set match then morph\n                if (isIdSetMatch(newChild, insertionPoint, ctx)) {\n                    morphOldNodeTo(insertionPoint, newChild, ctx);\n                    insertionPoint = insertionPoint.nextSibling;\n                    removeIdsFromConsideration(ctx, newChild);\n                    continue;\n                }\n\n                // otherwise search forward in the existing old children for an id set match\n                let idSetMatch = findIdSetMatch(newParent, oldParent, newChild, insertionPoint, ctx);\n\n                // if we found a potential match, remove the nodes until that point and morph\n                if (idSetMatch) {\n                    insertionPoint = removeNodesBetween(insertionPoint, idSetMatch, ctx);\n                    morphOldNodeTo(idSetMatch, newChild, ctx);\n                    removeIdsFromConsideration(ctx, newChild);\n                    continue;\n                }\n\n                // no id set match found, so scan forward for a soft match for the current node\n                let softMatch = findSoftMatch(newParent, oldParent, newChild, insertionPoint, ctx);\n\n                // if we found a soft match for the current node, morph\n                if (softMatch) {\n                    insertionPoint = removeNodesBetween(insertionPoint, softMatch, ctx);\n                    morphOldNodeTo(softMatch, newChild, ctx);\n                    removeIdsFromConsideration(ctx, newChild);\n                    continue;\n                }\n\n                // abandon all hope of morphing, just insert the new child before the insertion point\n                // and move on\n                if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n                oldParent.insertBefore(newChild, insertionPoint);\n                ctx.callbacks.afterNodeAdded(newChild);\n                removeIdsFromConsideration(ctx, newChild);\n            }\n\n            // remove any remaining old nodes that didn't match up with new content\n            while (insertionPoint !== null) {\n\n                let tempNode = insertionPoint;\n                insertionPoint = insertionPoint.nextSibling;\n                removeNode(tempNode, ctx);\n            }\n        }\n\n        //=============================================================================\n        // Attribute Syncing Code\n        //=============================================================================\n\n        /**\n         * @param attr {String} the attribute to be mutated\n         * @param to {Element} the element that is going to be updated\n         * @param updateType {(\"update\"|\"remove\")}\n         * @param ctx the merge context\n         * @returns {boolean} true if the attribute should be ignored, false otherwise\n         */\n        function ignoreAttribute(attr, to, updateType, ctx) {\n            if(attr === 'value' && ctx.ignoreActiveValue && to === document.activeElement){\n                return true;\n            }\n            return ctx.callbacks.beforeAttributeUpdated(attr, to, updateType) === false;\n        }\n\n        /**\n         * syncs a given node with another node, copying over all attributes and\n         * inner element state from the 'from' node to the 'to' node\n         *\n         * @param {Element} from the element to copy attributes & state from\n         * @param {Element} to the element to copy attributes & state to\n         * @param ctx the merge context\n         */\n        function syncNodeFrom(from, to, ctx) {\n            let type = from.nodeType\n\n            // if is an element type, sync the attributes from the\n            // new node into the new node\n            if (type === 1 /* element type */) {\n                const fromAttributes = from.attributes;\n                const toAttributes = to.attributes;\n                for (const fromAttribute of fromAttributes) {\n                    if (ignoreAttribute(fromAttribute.name, to, 'update', ctx)) {\n                        continue;\n                    }\n                    if (to.getAttribute(fromAttribute.name) !== fromAttribute.value) {\n                        to.setAttribute(fromAttribute.name, fromAttribute.value);\n                    }\n                }\n                // iterate backwards to avoid skipping over items when a delete occurs\n                for (let i = toAttributes.length - 1; 0 <= i; i--) {\n                    const toAttribute = toAttributes[i];\n                    if (ignoreAttribute(toAttribute.name, to, 'remove', ctx)) {\n                        continue;\n                    }\n                    if (!from.hasAttribute(toAttribute.name)) {\n                        to.removeAttribute(toAttribute.name);\n                    }\n                }\n            }\n\n            // sync text nodes\n            if (type === 8 /* comment */ || type === 3 /* text */) {\n                if (to.nodeValue !== from.nodeValue) {\n                    to.nodeValue = from.nodeValue;\n                }\n            }\n\n            if (!ignoreValueOfActiveElement(to, ctx)) {\n                // sync input values\n                syncInputValue(from, to, ctx);\n            }\n        }\n\n        /**\n         * @param from {Element} element to sync the value from\n         * @param to {Element} element to sync the value to\n         * @param attributeName {String} the attribute name\n         * @param ctx the merge context\n         */\n        function syncBooleanAttribute(from, to, attributeName, ctx) {\n            if (from[attributeName] !== to[attributeName]) {\n                let ignoreUpdate = ignoreAttribute(attributeName, to, 'update', ctx);\n                if (!ignoreUpdate) {\n                    to[attributeName] = from[attributeName];\n                }\n                if (from[attributeName]) {\n                    if (!ignoreUpdate) {\n                        to.setAttribute(attributeName, from[attributeName]);\n                    }\n                } else {\n                    if (!ignoreAttribute(attributeName, to, 'remove', ctx)) {\n                        to.removeAttribute(attributeName);\n                    }\n                }\n            }\n        }\n\n        /**\n         * NB: many bothans died to bring us information:\n         *\n         *  https://github.com/patrick-steele-idem/morphdom/blob/master/src/specialElHandlers.js\n         *  https://github.com/choojs/nanomorph/blob/master/lib/morph.jsL113\n         *\n         * @param from {Element} the element to sync the input value from\n         * @param to {Element} the element to sync the input value to\n         * @param ctx the merge context\n         */\n        function syncInputValue(from, to, ctx) {\n            if (from instanceof HTMLInputElement &&\n                to instanceof HTMLInputElement &&\n                from.type !== 'file') {\n\n                let fromValue = from.value;\n                let toValue = to.value;\n\n                // sync boolean attributes\n                syncBooleanAttribute(from, to, 'checked', ctx);\n                syncBooleanAttribute(from, to, 'disabled', ctx);\n\n                if (!from.hasAttribute('value')) {\n                    if (!ignoreAttribute('value', to, 'remove', ctx)) {\n                        to.value = '';\n                        to.removeAttribute('value');\n                    }\n                } else if (fromValue !== toValue) {\n                    if (!ignoreAttribute('value', to, 'update', ctx)) {\n                        to.setAttribute('value', fromValue);\n                        to.value = fromValue;\n                    }\n                }\n            } else if (from instanceof HTMLOptionElement) {\n                syncBooleanAttribute(from, to, 'selected', ctx)\n            } else if (from instanceof HTMLTextAreaElement && to instanceof HTMLTextAreaElement) {\n                let fromValue = from.value;\n                let toValue = to.value;\n                if (ignoreAttribute('value', to, 'update', ctx)) {\n                    return;\n                }\n                if (fromValue !== toValue) {\n                    to.value = fromValue;\n                }\n                if (to.firstChild && to.firstChild.nodeValue !== fromValue) {\n                    to.firstChild.nodeValue = fromValue\n                }\n            }\n        }\n\n        //=============================================================================\n        // the HEAD tag can be handled specially, either w/ a 'merge' or 'append' style\n        //=============================================================================\n        function handleHeadElement(newHeadTag, currentHead, ctx) {\n\n            let added = []\n            let removed = []\n            let preserved = []\n            let nodesToAppend = []\n\n            let headMergeStyle = ctx.head.style;\n\n            // put all new head elements into a Map, by their outerHTML\n            let srcToNewHeadNodes = new Map();\n            for (const newHeadChild of newHeadTag.children) {\n                srcToNewHeadNodes.set(newHeadChild.outerHTML, newHeadChild);\n            }\n\n            // for each elt in the current head\n            for (const currentHeadElt of currentHead.children) {\n\n                // If the current head element is in the map\n                let inNewContent = srcToNewHeadNodes.has(currentHeadElt.outerHTML);\n                let isReAppended = ctx.head.shouldReAppend(currentHeadElt);\n                let isPreserved = ctx.head.shouldPreserve(currentHeadElt);\n                if (inNewContent || isPreserved) {\n                    if (isReAppended) {\n                        // remove the current version and let the new version replace it and re-execute\n                        removed.push(currentHeadElt);\n                    } else {\n                        // this element already exists and should not be re-appended, so remove it from\n                        // the new content map, preserving it in the DOM\n                        srcToNewHeadNodes.delete(currentHeadElt.outerHTML);\n                        preserved.push(currentHeadElt);\n                    }\n                } else {\n                    if (headMergeStyle === \"append\") {\n                        // we are appending and this existing element is not new content\n                        // so if and only if it is marked for re-append do we do anything\n                        if (isReAppended) {\n                            removed.push(currentHeadElt);\n                            nodesToAppend.push(currentHeadElt);\n                        }\n                    } else {\n                        // if this is a merge, we remove this content since it is not in the new head\n                        if (ctx.head.shouldRemove(currentHeadElt) !== false) {\n                            removed.push(currentHeadElt);\n                        }\n                    }\n                }\n            }\n\n            // Push the remaining new head elements in the Map into the\n            // nodes to append to the head tag\n            nodesToAppend.push(...srcToNewHeadNodes.values());\n            log(\"to append: \", nodesToAppend);\n\n            let promises = [];\n            for (const newNode of nodesToAppend) {\n                log(\"adding: \", newNode);\n                let newElt = document.createRange().createContextualFragment(newNode.outerHTML).firstChild;\n                log(newElt);\n                if (ctx.callbacks.beforeNodeAdded(newElt) !== false) {\n                    if (newElt.href || newElt.src) {\n                        let resolve = null;\n                        let promise = new Promise(function (_resolve) {\n                            resolve = _resolve;\n                        });\n                        newElt.addEventListener('load', function () {\n                            resolve();\n                        });\n                        promises.push(promise);\n                    }\n                    currentHead.appendChild(newElt);\n                    ctx.callbacks.afterNodeAdded(newElt);\n                    added.push(newElt);\n                }\n            }\n\n            // remove all removed elements, after we have appended the new elements to avoid\n            // additional network requests for things like style sheets\n            for (const removedElement of removed) {\n                if (ctx.callbacks.beforeNodeRemoved(removedElement) !== false) {\n                    currentHead.removeChild(removedElement);\n                    ctx.callbacks.afterNodeRemoved(removedElement);\n                }\n            }\n\n            ctx.head.afterHeadMorphed(currentHead, {added: added, kept: preserved, removed: removed});\n            return promises;\n        }\n\n        //=============================================================================\n        // Misc\n        //=============================================================================\n\n        function log() {\n            //console.log(arguments);\n        }\n\n        function noOp() {\n        }\n\n        /*\n          Deep merges the config object and the Idiomoroph.defaults object to\n          produce a final configuration object\n         */\n        function mergeDefaults(config) {\n            let finalConfig = {};\n            // copy top level stuff into final config\n            Object.assign(finalConfig, defaults);\n            Object.assign(finalConfig, config);\n\n            // copy callbacks into final config (do this to deep merge the callbacks)\n            finalConfig.callbacks = {};\n            Object.assign(finalConfig.callbacks, defaults.callbacks);\n            Object.assign(finalConfig.callbacks, config.callbacks);\n\n            // copy head config into final config  (do this to deep merge the head)\n            finalConfig.head = {};\n            Object.assign(finalConfig.head, defaults.head);\n            Object.assign(finalConfig.head, config.head);\n            return finalConfig;\n        }\n\n        function createMorphContext(oldNode, newContent, config) {\n            config = mergeDefaults(config);\n            return {\n                target: oldNode,\n                newContent: newContent,\n                config: config,\n                morphStyle: config.morphStyle,\n                ignoreActive: config.ignoreActive,\n                ignoreActiveValue: config.ignoreActiveValue,\n                idMap: createIdMap(oldNode, newContent),\n                deadIds: new Set(),\n                callbacks: config.callbacks,\n                head: config.head\n            }\n        }\n\n        function isIdSetMatch(node1, node2, ctx) {\n            if (node1 == null || node2 == null) {\n                return false;\n            }\n            if (node1.nodeType === node2.nodeType && node1.tagName === node2.tagName) {\n                if (node1.id !== \"\" && node1.id === node2.id) {\n                    return true;\n                } else {\n                    return getIdIntersectionCount(ctx, node1, node2) > 0;\n                }\n            }\n            return false;\n        }\n\n        function isSoftMatch(node1, node2) {\n            if (node1 == null || node2 == null) {\n                return false;\n            }\n            return node1.nodeType === node2.nodeType && node1.tagName === node2.tagName\n        }\n\n        function removeNodesBetween(startInclusive, endExclusive, ctx) {\n            while (startInclusive !== endExclusive) {\n                let tempNode = startInclusive;\n                startInclusive = startInclusive.nextSibling;\n                removeNode(tempNode, ctx);\n            }\n            removeIdsFromConsideration(ctx, endExclusive);\n            return endExclusive.nextSibling;\n        }\n\n        //=============================================================================\n        // Scans forward from the insertionPoint in the old parent looking for a potential id match\n        // for the newChild.  We stop if we find a potential id match for the new child OR\n        // if the number of potential id matches we are discarding is greater than the\n        // potential id matches for the new child\n        //=============================================================================\n        function findIdSetMatch(newContent, oldParent, newChild, insertionPoint, ctx) {\n\n            // max id matches we are willing to discard in our search\n            let newChildPotentialIdCount = getIdIntersectionCount(ctx, newChild, oldParent);\n\n            let potentialMatch = null;\n\n            // only search forward if there is a possibility of an id match\n            if (newChildPotentialIdCount > 0) {\n                let potentialMatch = insertionPoint;\n                // if there is a possibility of an id match, scan forward\n                // keep track of the potential id match count we are discarding (the\n                // newChildPotentialIdCount must be greater than this to make it likely\n                // worth it)\n                let otherMatchCount = 0;\n                while (potentialMatch != null) {\n\n                    // If we have an id match, return the current potential match\n                    if (isIdSetMatch(newChild, potentialMatch, ctx)) {\n                        return potentialMatch;\n                    }\n\n                    // computer the other potential matches of this new content\n                    otherMatchCount += getIdIntersectionCount(ctx, potentialMatch, newContent);\n                    if (otherMatchCount > newChildPotentialIdCount) {\n                        // if we have more potential id matches in _other_ content, we\n                        // do not have a good candidate for an id match, so return null\n                        return null;\n                    }\n\n                    // advanced to the next old content child\n                    potentialMatch = potentialMatch.nextSibling;\n                }\n            }\n            return potentialMatch;\n        }\n\n        //=============================================================================\n        // Scans forward from the insertionPoint in the old parent looking for a potential soft match\n        // for the newChild.  We stop if we find a potential soft match for the new child OR\n        // if we find a potential id match in the old parents children OR if we find two\n        // potential soft matches for the next two pieces of new content\n        //=============================================================================\n        function findSoftMatch(newContent, oldParent, newChild, insertionPoint, ctx) {\n\n            let potentialSoftMatch = insertionPoint;\n            let nextSibling = newChild.nextSibling;\n            let siblingSoftMatchCount = 0;\n\n            while (potentialSoftMatch != null) {\n\n                if (getIdIntersectionCount(ctx, potentialSoftMatch, newContent) > 0) {\n                    // the current potential soft match has a potential id set match with the remaining new\n                    // content so bail out of looking\n                    return null;\n                }\n\n                // if we have a soft match with the current node, return it\n                if (isSoftMatch(newChild, potentialSoftMatch)) {\n                    return potentialSoftMatch;\n                }\n\n                if (isSoftMatch(nextSibling, potentialSoftMatch)) {\n                    // the next new node has a soft match with this node, so\n                    // increment the count of future soft matches\n                    siblingSoftMatchCount++;\n                    nextSibling = nextSibling.nextSibling;\n\n                    // If there are two future soft matches, bail to allow the siblings to soft match\n                    // so that we don't consume future soft matches for the sake of the current node\n                    if (siblingSoftMatchCount >= 2) {\n                        return null;\n                    }\n                }\n\n                // advanced to the next old content child\n                potentialSoftMatch = potentialSoftMatch.nextSibling;\n            }\n\n            return potentialSoftMatch;\n        }\n\n        function parseContent(newContent) {\n            let parser = new DOMParser();\n\n            // remove svgs to avoid false-positive matches on head, etc.\n            let contentWithSvgsRemoved = newContent.replace(/<svg(\\s[^>]*>|>)([\\s\\S]*?)<\\/svg>/gim, '');\n\n            // if the newContent contains a html, head or body tag, we can simply parse it w/o wrapping\n            if (contentWithSvgsRemoved.match(/<\\/html>/) || contentWithSvgsRemoved.match(/<\\/head>/) || contentWithSvgsRemoved.match(/<\\/body>/)) {\n                let content = parser.parseFromString(newContent, \"text/html\");\n                // if it is a full HTML document, return the document itself as the parent container\n                if (contentWithSvgsRemoved.match(/<\\/html>/)) {\n                    content.generatedByIdiomorph = true;\n                    return content;\n                } else {\n                    // otherwise return the html element as the parent container\n                    let htmlElement = content.firstChild;\n                    if (htmlElement) {\n                        htmlElement.generatedByIdiomorph = true;\n                        return htmlElement;\n                    } else {\n                        return null;\n                    }\n                }\n            } else {\n                // if it is partial HTML, wrap it in a template tag to provide a parent element and also to help\n                // deal with touchy tags like tr, tbody, etc.\n                let responseDoc = parser.parseFromString(\"<body><template>\" + newContent + \"</template></body>\", \"text/html\");\n                let content = responseDoc.body.querySelector('template').content;\n                content.generatedByIdiomorph = true;\n                return content\n            }\n        }\n\n        function normalizeContent(newContent) {\n            if (newContent == null) {\n                // noinspection UnnecessaryLocalVariableJS\n                const dummyParent = document.createElement('div');\n                return dummyParent;\n            } else if (newContent.generatedByIdiomorph) {\n                // the template tag created by idiomorph parsing can serve as a dummy parent\n                return newContent;\n            } else if (newContent instanceof Node) {\n                // a single node is added as a child to a dummy parent\n                const dummyParent = document.createElement('div');\n                dummyParent.append(newContent);\n                return dummyParent;\n            } else {\n                // all nodes in the array or HTMLElement collection are consolidated under\n                // a single dummy parent element\n                const dummyParent = document.createElement('div');\n                for (const elt of [...newContent]) {\n                    dummyParent.append(elt);\n                }\n                return dummyParent;\n            }\n        }\n\n        function insertSiblings(previousSibling, morphedNode, nextSibling) {\n            let stack = []\n            let added = []\n            while (previousSibling != null) {\n                stack.push(previousSibling);\n                previousSibling = previousSibling.previousSibling;\n            }\n            while (stack.length > 0) {\n                let node = stack.pop();\n                added.push(node); // push added preceding siblings on in order and insert\n                morphedNode.parentElement.insertBefore(node, morphedNode);\n            }\n            added.push(morphedNode);\n            while (nextSibling != null) {\n                stack.push(nextSibling);\n                added.push(nextSibling); // here we are going in order, so push on as we scan, rather than add\n                nextSibling = nextSibling.nextSibling;\n            }\n            while (stack.length > 0) {\n                morphedNode.parentElement.insertBefore(stack.pop(), morphedNode.nextSibling);\n            }\n            return added;\n        }\n\n        function findBestNodeMatch(newContent, oldNode, ctx) {\n            let currentElement;\n            currentElement = newContent.firstChild;\n            let bestElement = currentElement;\n            let score = 0;\n            while (currentElement) {\n                let newScore = scoreElement(currentElement, oldNode, ctx);\n                if (newScore > score) {\n                    bestElement = currentElement;\n                    score = newScore;\n                }\n                currentElement = currentElement.nextSibling;\n            }\n            return bestElement;\n        }\n\n        function scoreElement(node1, node2, ctx) {\n            if (isSoftMatch(node1, node2)) {\n                return .5 + getIdIntersectionCount(ctx, node1, node2);\n            }\n            return 0;\n        }\n\n        function removeNode(tempNode, ctx) {\n            removeIdsFromConsideration(ctx, tempNode)\n            if (ctx.callbacks.beforeNodeRemoved(tempNode) === false) return;\n\n            tempNode.remove();\n            ctx.callbacks.afterNodeRemoved(tempNode);\n        }\n\n        //=============================================================================\n        // ID Set Functions\n        //=============================================================================\n\n        function isIdInConsideration(ctx, id) {\n            return !ctx.deadIds.has(id);\n        }\n\n        function idIsWithinNode(ctx, id, targetNode) {\n            let idSet = ctx.idMap.get(targetNode) || EMPTY_SET;\n            return idSet.has(id);\n        }\n\n        function removeIdsFromConsideration(ctx, node) {\n            let idSet = ctx.idMap.get(node) || EMPTY_SET;\n            for (const id of idSet) {\n                ctx.deadIds.add(id);\n            }\n        }\n\n        function getIdIntersectionCount(ctx, node1, node2) {\n            let sourceSet = ctx.idMap.get(node1) || EMPTY_SET;\n            let matchCount = 0;\n            for (const id of sourceSet) {\n                // a potential match is an id in the source and potentialIdsSet, but\n                // that has not already been merged into the DOM\n                if (isIdInConsideration(ctx, id) && idIsWithinNode(ctx, id, node2)) {\n                    ++matchCount;\n                }\n            }\n            return matchCount;\n        }\n\n        /**\n         * A bottom up algorithm that finds all elements with ids inside of the node\n         * argument and populates id sets for those nodes and all their parents, generating\n         * a set of ids contained within all nodes for the entire hierarchy in the DOM\n         *\n         * @param node {Element}\n         * @param {Map<Node, Set<String>>} idMap\n         */\n        function populateIdMapForNode(node, idMap) {\n            let nodeParent = node.parentElement;\n            // find all elements with an id property\n            let idElements = node.querySelectorAll('[id]');\n            for (const elt of idElements) {\n                let current = elt;\n                // walk up the parent hierarchy of that element, adding the id\n                // of element to the parent's id set\n                while (current !== nodeParent && current != null) {\n                    let idSet = idMap.get(current);\n                    // if the id set doesn't exist, create it and insert it in the  map\n                    if (idSet == null) {\n                        idSet = new Set();\n                        idMap.set(current, idSet);\n                    }\n                    idSet.add(elt.id);\n                    current = current.parentElement;\n                }\n            }\n        }\n\n        /**\n         * This function computes a map of nodes to all ids contained within that node (inclusive of the\n         * node).  This map can be used to ask if two nodes have intersecting sets of ids, which allows\n         * for a looser definition of \"matching\" than tradition id matching, and allows child nodes\n         * to contribute to a parent nodes matching.\n         *\n         * @param {Element} oldContent  the old content that will be morphed\n         * @param {Element} newContent  the new content to morph to\n         * @returns {Map<Node, Set<String>>} a map of nodes to id sets for the\n         */\n        function createIdMap(oldContent, newContent) {\n            let idMap = new Map();\n            populateIdMapForNode(oldContent, idMap);\n            populateIdMapForNode(newContent, idMap);\n            return idMap;\n        }\n\n        //=============================================================================\n        // This is what ends up becoming the Idiomorph global object\n        //=============================================================================\n        return {\n            morph,\n            defaults\n        }\n    })();\n\nexport {Idiomorph};\n", "import { Idiomorph } from 'idiomorph'\nimport schema from './schema'\n\nlet _method\nlet _delay = 0\n\nconst trixEditor = /TRIX-EDITOR/i\n\nfunction isElement(node) {\n  return node.nodeType === Node.ELEMENT_NODE\n}\n\nfunction isTurboPermanent(node) {\n  if (!isElement(node)) return false\n  return (\n    node.hasAttribute(schema.turboPermanentAttribute) &&\n    node.getAttribute(schema.turboPermanentAttribute) !== 'false'\n  )\n}\n\nfunction isActive(node) {\n  if (!isElement(node)) return false\n  return node === document.activeElement\n}\n\nfunction morphAllowed(node) {\n  if (isTurboPermanent(node)) return false\n  if (isActive(node) && node.tagName.match(trixEditor)) return false\n  return true\n}\n\nconst defaultOptions = {\n  callbacks: { beforeNodeMorphed: (oldNode, _newNode) => morphAllowed(oldNode) },\n  morphStyle: 'outerHTML',\n  ignoreActiveValue: true,\n  head: { style: 'merge' }\n}\n\nfunction morph(element, html, options = {}) {\n  const callbacks = { ...defaultOptions.callbacks, ...options.callbacks }\n  options = { ...defaultOptions, ...options, callbacks }\n\n  return new Promise(resolve => {\n    setTimeout(() => {\n      Idiomorph.morph(element, html, options)\n      resolve()\n    }, _delay)\n  })\n}\n\n_method = morph\n\nexport default {\n  get delay() {\n    return _delay\n  },\n\n  set delay(ms) {\n    _delay = ms\n  },\n\n  get method() {\n    return _method\n  },\n\n  set method(fn) {\n    _method = fn\n  }\n}\n", "import morph from './morph'\n\nconst invokeEvents = {\n  before: 'turbo-boost:stream:before-invoke',\n  after: 'turbo-boost:stream:after-invoke',\n  finish: 'turbo-boost:stream:finish-invoke'\n}\n\n// Invokes the callback on a single receiver with before/after events\nfunction withInvokeEvents(receiver, detail, callback) {\n  const { object, target } = receiver\n  detail = detail || {}\n  detail = { ...detail, object: receiver.object }\n  const options = { detail, bubbles: true }\n\n  target.dispatchEvent(new CustomEvent(invokeEvents.before, options))\n\n  // the before event can provide invoke instructions my modifying the event detail\n  // For example, { delay: 1000 } will delay the invocation by 1000ms\n  let { delay } = detail.invoke || {}\n  delay = delay || 0\n\n  const execute = () => {\n    const result = callback(object)\n    options.detail.result = result\n    target.dispatchEvent(new CustomEvent(invokeEvents.after, options))\n\n    let promise\n    if (result instanceof Animation) promise = result.finished\n    if (result instanceof Promise) promise = result\n\n    if (promise)\n      promise\n        .then(() => {\n          options.detail.promise = 'fulfilled'\n          target.dispatchEvent(new CustomEvent(invokeEvents.finish, options))\n        })\n        .catch(error => {\n          options.detail.promise = 'rejected'\n          options.detail.error = error\n          target.dispatchEvent(new CustomEvent(invokeEvents.finish, options))\n        })\n    else target.dispatchEvent(new CustomEvent(invokeEvents.finish, options))\n  }\n\n  if (delay > 0) setTimeout(execute, delay)\n  else execute()\n}\n\nfunction invokeDispatchEvent(method, args, receivers) {\n  const eventName = args[0]\n  const eventOptions = args[1]\n  const detail = { method, eventName, eventOptions }\n  receivers.forEach(receiver =>\n    withInvokeEvents(receiver, detail, object =>\n      object.dispatchEvent(new CustomEvent(eventName, eventOptions))\n    )\n  )\n}\n\nfunction invokeMorph(method, args, receivers) {\n  const html = args[0]\n  const detail = { method, html }\n  receivers.forEach(receiver => withInvokeEvents(receiver, detail, object => morph.method(object, html)))\n}\n\nfunction invokeAssignment(method, args, receivers) {\n  const property = method.slice(0, -1).trim()\n  const value = args[0]\n  const detail = { method, property, value }\n  receivers.forEach(receiver => withInvokeEvents(receiver, detail, object => (object[property] = value)))\n}\n\nfunction invokeMethod(method, args, receivers) {\n  const detail = { method, args }\n  receivers.forEach(receiver =>\n    withInvokeEvents(receiver, detail, object => object[method].apply(object, args))\n  )\n}\n\n// Performs an invocation on all receivers for the given method and args\nfunction performInvoke(method, args, receivers) {\n  // dispatch ................................................................................................\n  if (method.match(/^dispatch(Event)?$/)) return invokeDispatchEvent(method, args, receivers)\n\n  // morph ...................................................................................................\n  if (method.match(/^morph|mutate$/)) return invokeMorph(method, args, receivers)\n\n  // assignment ..............................................................................................\n  if (method.endsWith('=')) return invokeAssignment(method, args, receivers)\n\n  // method ..................................................................................................\n  return invokeMethod(method, args, receivers)\n}\n\nfunction invoke() {\n  const payload = JSON.parse(this.templateContent.textContent)\n  const { id, selector, receiver, method, args, delay } = payload\n  let receivers = [{ object: self, target: self }]\n  if (selector)\n    receivers = Array.from(document.querySelectorAll(selector)).map(el => ({\n      object: el,\n      target: el\n    }))\n\n  if (receiver) {\n    receivers = receivers.map(r => {\n      let { object, target } = r\n      const chain = receiver.split('.')\n      while (chain.length > 0) {\n        object = object[chain.shift()]\n        if (object.dispatchEvent) target = object\n      }\n      return { object, target }\n    })\n  }\n\n  if (delay > 0) setTimeout(() => performInvoke(method, args, receivers), delay)\n  else performInvoke(method, args, receivers)\n}\n\nexport { invoke, invokeEvents }\n", "import VERSION from './version'\nimport schema from './schema'\nimport morph from './morph'\nimport { invoke, invokeEvents } from './invoke'\n\nif (!self['Turbo'])\n  throw new Error(\n    '`Turbo` is not defined! Be sure to import `@turbo-boost/streams` after `@hotwired/turbo` or `@hotwired/turbo-rails`.'\n  )\n\nif (!Turbo['StreamActions'])\n  throw new Error(\n    '`Turbo.StreamActions` is not defined! Verify that you are running >= `7.2.0` of `@hotwired/turbo`.'\n  )\n\nTurbo.StreamActions.invoke = invoke\nself.TurboBoost = self.TurboBoost || {}\nself.TurboBoost.Streams = { invoke, invokeEvents, morph, schema, VERSION }\n\nconsole.info('@turbo-boost/streams has initialized and registered new stream actions with Turbo.')\n\nexport default self.TurboBoost.Streams\n", "const RESPONSE_HEADER = 'TurboBoost-Command'\n\nconst types = {\n  boost: 'text/vnd.turbo-boost.html',\n  stream: 'text/vnd.turbo-stream.html',\n  html: 'text/html',\n  xhtml: 'application/xhtml+xml',\n  json: 'application/json'\n}\n\n// Prepares request headers for TurboBoost Command invocations\nconst prepare = (headers = {}) => {\n  headers = { ...headers }\n\n  // Assign Accept values\n  const accepts = (headers['Accept'] || '')\n    .split(',')\n    .map(val => val.trim())\n    .filter(val => val.length)\n\n  accepts.unshift(types.boost, types.stream, types.html, types.xhtml)\n  headers['Accept'] = [...new Set(accepts)].join(', ')\n\n  // Assign Content-Type (Commands POST JSON via fetch/XHR)\n  headers['Content-Type'] = types.json\n\n  // Assign X-Requested-With for XHR detection\n  headers['X-Requested-With'] = 'XMLHttpRequest'\n\n  return headers\n}\n\n// Tokenizes the 'TurboBoost-Command' HTTP response header value\nconst tokenize = value => {\n  if (value) {\n    const [name, status, strategy] = value.split(', ')\n    return { name, status, strategy }\n  }\n\n  return {}\n}\n\nexport default { prepare, tokenize, RESPONSE_HEADER }\n", "const append = content => {\n  document.body.insertAdjacentHTML('beforeend', content)\n}\n\nconst replace = content => {\n  const parser = new DOMParser()\n  const doc = parser.parseFromString(content, 'text/html')\n  const head = document.querySelector('head')\n  const body = document.querySelector('body')\n  const newHead = doc.querySelector('head')\n  const newBody = doc.querySelector('body')\n  if (head && newHead) TurboBoost?.Streams?.morph?.method(head, newHead)\n  if (body && newBody) TurboBoost?.Streams?.morph?.method(body, newBody)\n}\n\n// TODO: dispatch events after append/replace so we can apply page state\nexport const render = (strategy, content) => {\n  if (strategy && content) {\n    if (strategy.match(/^Append$/i)) return append(content)\n    if (strategy.match(/^Replace$/i)) return replace(content)\n  }\n}\n\nexport default { render }\n", "import headers from './headers'\nimport { render } from './renderer'\n\nconst frameSources = {}\n\n// fires after receiving a turbo HTTP response\naddEventListener('turbo:before-fetch-response', event => {\n  const frame = event.target.closest('turbo-frame')\n  if (frame?.id && frame?.src) frameSources[frame.id] = frame.src\n\n  const { fetchResponse: response } = event.detail\n  const header = response.header(headers.RESPONSE_HEADER)\n\n  if (!header) return\n\n  // We'll take it from here Hotwire...\n  event.preventDefault()\n  const { strategy } = headers.tokenize(header)\n  response.responseHTML.then(content => render(strategy, content))\n})\n\n// fires when a frame element is navigated and finishes loading\naddEventListener('turbo:frame-load', event => {\n  const frame = event.target.closest('turbo-frame')\n  frame.dataset.src = frameSources[frame.id] || frame.src || frame.dataset.src\n  delete frameSources[frame.id]\n})\n", "const schema = {\n  // attributes\n  frameAttribute: 'data-turbo-frame',\n  methodAttribute: 'data-turbo-method',\n  commandAttribute: 'data-turbo-command',\n  confirmAttribute: 'data-turbo-confirm',\n  stateAttributesAttribute: 'data-turbo-boost-state-attributes'\n}\n\nexport default { ...schema }\n", "export const commandEvents = {\n  start: 'turbo-boost:command:start',\n  success: 'turbo-boost:command:success',\n  finish: 'turbo-boost:command:finish',\n  abort: 'turbo-boost:command:abort',\n  clientError: 'turbo-boost:command:client-error',\n  serverError: 'turbo-boost:command:server-error'\n}\n\nexport const stateEvents = {\n  stateChange: 'turbo-boost:state:change',\n  stateInitialize: 'turbo-boost:state:initialize'\n}\n\nexport const turboEvents = {\n  frameLoad: 'turbo:frame-load',\n  load: 'turbo:load'\n}\n\nexport function dispatch(name, target, options = {}) {\n  return new Promise(resolve => {\n    options = options || {}\n    options.detail = options.detail || {}\n    target = target || document\n    const evt = new CustomEvent(name, { ...options, bubbles: true })\n    target.dispatchEvent(evt)\n    resolve(evt)\n  })\n}\n", "const active = {}\n\nfunction add(payload) {\n  active[payload.id] = payload\n}\n\nfunction remove(id) {\n  delete active[id]\n}\n\nexport default {\n  add,\n  remove,\n  get commands() {\n    return [...Object.values(active)]\n  },\n  get length() {\n    return Object.keys(active).length\n  }\n}\n", "import { commandEvents } from './events'\nimport schema from './schema'\n\nconst confirmation = {\n  method: message => Promise.resolve(confirm(message))\n}\n\nconst isTurboMethod = event => event.detail.driver === 'method'\n\nconst isTurboForm = event => {\n  if (event.detail.driver !== 'form') return false\n\n  const element = event.target\n  const frame = element.closest('turbo-frame')\n  const target = element.closest(`[${schema.frameAttribute}]`)\n  return !!(frame || target)\n}\n\nconst shouldDelegate = event => isTurboMethod(event) || isTurboForm(event)\n\ndocument.addEventListener(commandEvents.start, async event => {\n  const message = event.target.getAttribute(schema.confirmAttribute)\n  if (!message) return\n\n  event.detail.confirmation = true\n\n  if (shouldDelegate(event)) return // delegate confirmation handling to Turbo\n\n  const proceed = await confirmation.method(message)\n  if (!proceed) event.preventDefault()\n})\n\nexport default confirmation\n", "let events = []\nlet eventListener\n\nfunction register(eventName, selectors) {\n  const match = events.find(evt => evt.name === eventName)\n  if (match) events.splice(events.indexOf(match), 1)\n  events = [{ name: eventName, selectors }, ...events]\n\n  document.removeEventListener(eventName, eventListener, true)\n  document.addEventListener(eventName, eventListener, true)\n\n  return { ...events.find(evt => evt.name === eventName) }\n}\n\nfunction getRegisteredEventForElement(element) {\n  return events.find(evt =>\n    evt.selectors.find(selector => Array.from(document.querySelectorAll(selector)).find(el => el === element))\n  )\n}\n\nfunction isRegisteredForElement(eventName, element) {\n  const evt = getRegisteredEventForElement(element)\n  return evt && evt.name === eventName\n}\n\nexport default {\n  register,\n  isRegisteredForElement,\n  get events() {\n    return [...events]\n  },\n  set handler(fn) {\n    eventListener = fn\n  }\n}\n", "import schema from './schema'\n\nfunction findClosestCommand(element) {\n  return element.closest(`[${schema.commandAttribute}]`)\n}\n\nfunction findClosestFrameWithSource(element) {\n  return (\n    element.closest('turbo-frame[src]') ||\n    element.closest('turbo-frame[data-turbo-frame-src]') ||\n    element.closest('turbo-frame')\n  )\n}\n\nfunction assignElementValueToPayload(element, payload = {}) {\n  if (element.tagName.toLowerCase() !== 'select') return (payload.value = element.value || null)\n\n  if (!element.multiple) return (payload.value = element.options[element.selectedIndex].value)\n\n  payload.values = Array.from(element.options).reduce((memo, option) => {\n    if (option.selected) memo.push(option.value)\n    return memo\n  }, [])\n}\n\nfunction buildAttributePayload(element) {\n  const payload = Array.from(element.attributes).reduce((memo, attr) => {\n    let value = attr.value\n    memo[attr.name] = value\n    return memo\n  }, {})\n\n  payload.tag = element.tagName\n  payload.checked = !!element.checked\n  payload.disabled = !!element.disabled\n  assignElementValueToPayload(element, payload)\n\n  // reduce payload size to keep URL length smaller\n  delete payload.class\n  delete payload.action\n  delete payload.href\n  delete payload[schema.commandAttribute]\n  delete payload[schema.frameAttribute]\n\n  return payload\n}\n\nexport default {\n  buildAttributePayload,\n  findClosestCommand,\n  findClosestFrameWithSource\n}\n", "const invokeCommand = (form, payload = {}) => {\n  const input = form.querySelector('input[name=\"turbo_boost_command\"]') || document.createElement('input')\n  input.type = 'hidden'\n  input.name = 'turbo_boost_command'\n  input.value = JSON.stringify(payload)\n  if (!form.contains(input)) form.appendChild(input)\n}\n\nexport default { invokeCommand }\n", "import activity from './activity'\nimport { dispatch, commandEvents } from './events'\n\nfunction finish(event) {\n  setTimeout(() => dispatch(commandEvents.finish, event.target, { detail: event.detail }))\n}\n\nconst events = [commandEvents.abort, commandEvents.serverError, commandEvents.success]\nevents.forEach(name => addEventListener(name, finish))\naddEventListener(commandEvents.finish, event => activity.remove(event.detail.id), true)\n\nexport default { events: commandEvents }\n", "const buildURL = path => {\n  const a = document.createElement('a')\n  a.href = path\n  return new URL(a)\n}\n\nexport default {\n  get commandInvocationURL() {\n    return buildURL('/turbo-boost-command-invocation')\n  }\n}\n", "import headers from './headers'\nimport lifecycle from './lifecycle'\nimport urls from './urls'\nimport { dispatch } from './events'\nimport { render } from './renderer'\n\nconst parseError = error => {\n  const message = `Unexpected error performing a TurboBoost Command! ${error.message}`\n  dispatch(lifecycle.events.clientError, document, { detail: { message, error } }, true)\n}\n\nconst parseAndRenderResponse = response => {\n  const { strategy } = headers.tokenize(response.headers.get(headers.RESPONSE_HEADER))\n  response.text().then(content => render(strategy, content))\n}\n\nconst invoke = (payload = {}) => {\n  try {\n    fetch(urls.commandInvocationURL.href, {\n      method: 'POST',\n      headers: headers.prepare({}),\n      body: JSON.stringify(payload)\n    })\n      .then(parseAndRenderResponse)\n      .catch(parseError)\n  } catch (error) {\n    parseError(error)\n  }\n}\n\nexport { invoke }\n", "import { invoke } from '../invoker'\n\nconst invokeCommand = (_, payload) => invoke(payload)\n\nexport default { invokeCommand }\n", "let activeElement\nlet activePayload\n\nconst reset = () => {\n  activeElement = null\n  activePayload = null\n}\n\nconst invokeCommand = (element, payload = {}) => {\n  activeElement = element\n  activePayload = payload\n}\n\nconst amendForm = form => {\n  try {\n    if (!activeElement) return\n    if (form.getAttribute('method') !== activeElement.dataset.turboMethod) return\n    if (form.getAttribute('action') !== activeElement.href) return\n\n    const input = form.querySelector('input[name=\"turbo_boost_command\"]') || document.createElement('input')\n    input.type = 'hidden'\n    input.name = 'turbo_boost_command'\n    input.value = JSON.stringify(activePayload)\n    if (!form.contains(input)) form.appendChild(input)\n  } finally {\n    reset() // ensure reset\n  }\n}\n\ndocument.addEventListener('submit', event => amendForm(event.target), true)\n\nexport default { invokeCommand }\n", "import { invoke } from '../invoker'\n\nconst invokeCommand = (_, payload = {}) => invoke(payload)\n\nexport default { invokeCommand }\n", "import elements from '../elements'\nimport formDriver from './form'\nimport frameDriver from './frame'\nimport methodDriver from './method'\nimport windowDriver from './window'\n\nfunction src(element, frame) {\n  frame = frame || { dataset: {} }\n  return element.href || frame.src || frame.dataset.src || location.href\n}\n\nfunction find(element) {\n  let frame = elements.findClosestFrameWithSource(element)\n\n  const { turboFrame, turboMethod } = element.dataset\n\n  if (element.tagName.toLowerCase() === 'form')\n    return {\n      name: 'form',\n      reason: 'Element is a form.',\n      frame,\n      src: element.action,\n      invokeCommand: formDriver.invokeCommand\n    }\n\n  if (turboMethod?.length)\n    return {\n      name: 'method',\n      reason: 'Element defines data-turbo-method.',\n      frame,\n      src: element.href,\n      invokeCommand: methodDriver.invokeCommand\n    }\n\n  // element targets a frame that is not _self\n  if (turboFrame && turboFrame !== '_self') {\n    frame = document.getElementById(turboFrame)\n    return {\n      name: 'frame',\n      reason: 'element targets a frame that is not _self',\n      frame,\n      src: src(element, frame),\n      invokeCommand: frameDriver.invokeCommand\n    }\n  }\n\n  // element does NOT target a frame or targets _self and is contained by a frame\n  if ((!turboFrame || turboFrame === '_self') && frame)\n    return {\n      name: 'frame',\n      reason: 'element does NOT target a frame or targets _self and is contained by a frame',\n      frame,\n      src: src(element, frame),\n      invokeCommand: frameDriver.invokeCommand\n    }\n\n  // element matches one or more of the following conditions\n  // - targets _top\n  // - does NOT target a frame\n  // - is NOT contained by a frame\n  return {\n    name: 'window',\n    reason:\n      'element matches one or more of the following conditions (targets _top, does NOT target a frame, is NOT contained by a frame)',\n    frame: null,\n    src: src(element),\n    invokeCommand: windowDriver.invokeCommand\n  }\n}\n\nexport default { find }\n", "// TODO: Move Logger to its own library (i.e. TurboBoost.Logger)\nimport { commandEvents as events } from './events'\n\nlet currentLevel = 'unknown'\nlet initialized = false\nlet history = []\n\nconst logLevels = {\n  debug: Object.values(events),\n  info: Object.values(events),\n  warn: [events.abort, events.clientError, events.serverError],\n  error: [events.clientError, events.serverError],\n  unknown: []\n}\n\nconst shouldLogEvent = event => {\n  if (!logLevels[currentLevel].includes(event.type)) return false\n  if (typeof console[currentLevel] !== 'function') return false\n\n  const { detail } = event\n  if (!detail.id) return true\n\n  const key = `${event.type}-${detail.id}`\n  if (history.includes(key)) return false\n\n  if (history.length > 16) history.shift()\n  history.push(key)\n\n  return true\n}\n\nconst logMethod = event => {\n  if (logLevels.error.includes(event.type)) return 'error'\n  if (logLevels.warn.includes(event.type)) return 'warn'\n  if (logLevels.info.includes(event.type)) return 'info'\n  if (logLevels.debug.includes(event.type)) return 'debug'\n  return 'log'\n}\n\nconst logEvent = event => {\n  if (shouldLogEvent(event)) {\n    const { target, type, detail } = event\n    const id = detail.id || ''\n    const commandName = detail.name || ''\n\n    let duration = ''\n    if (detail.startedAt) duration = `${Date.now() - detail.startedAt}ms `\n\n    const typeParts = type.split(':')\n    const lastPart = typeParts.pop()\n    const eventName = `%c${typeParts.join(':')}:%c${lastPart}`\n    const message = [`%c${commandName}`, `%c${duration}`, eventName]\n\n    console[logMethod(event)](\n      message.join(' ').replace(/\\s{2,}/g, ' '),\n      'color:deepskyblue',\n      'color:lime',\n      'color:darkgray',\n      eventName.match(/abort|error/i) ? 'color:red' : 'color:deepskyblue',\n      { id, detail, target }\n    )\n  }\n}\n\nif (!initialized) {\n  initialized = true\n  Object.values(events).forEach(name => addEventListener(name, event => logEvent(event)))\n}\n\nexport default {\n  get level() {\n    return currentLevel\n  },\n  set level(value) {\n    if (!Object.keys(logLevels).includes(value)) value = 'unknown'\n    return (currentLevel = value)\n  }\n}\n", "import { dispatch, stateEvents as events } from '../events'\n\nlet head\n\nfunction observable(object, parent = null) {\n  if (!object || typeof object !== 'object') return object\n\n  const proxy = new Proxy(object, {\n    deleteProperty(target, key) {\n      delete target[key]\n      dispatch(events.stateChange, document, { detail: { state: head } })\n      return true\n    },\n\n    set(target, key, value, _receiver) {\n      target[key] = observable(value, this)\n      dispatch(events.stateChange, document, { detail: { state: head } })\n      return true\n    }\n  })\n\n  if (Array.isArray(object)) {\n    object.forEach((value, index) => (object[index] = observable(value, proxy)))\n  } else if (typeof object === 'object') {\n    for (const [key, value] of Object.entries(object)) object[key] = observable(value, proxy)\n  }\n\n  if (!parent) head = proxy\n  return proxy\n}\n\nexport default observable\n", "import schema from '../schema.js'\n\nconst updateElement = (id, attribute, value, attempts = 1) => {\n  if (attempts > 20) return\n  const element = document.getElementById(id)\n  if (element?.isConnected) return element.setAttribute(attribute, value)\n  setTimeout(() => updateElement(id, attribute, value, attempts + 1), attempts * 5)\n}\n\nconst buildState = () => {\n  const elements = Array.from(document.querySelectorAll(`[id][${schema.stateAttributesAttribute}]`))\n  return elements.reduce((memo, element) => {\n    const attributes = JSON.parse(element.getAttribute(schema.stateAttributesAttribute))\n    if (element.id) {\n      const stateAttributes = attributes.reduce((acc, name) => {\n        if (element.hasAttribute(name)) acc[name] = element.getAttribute(name) || name\n        return acc\n      }, {})\n      if (Object.values(stateAttributes).length) memo[element.id] = stateAttributes\n    }\n    return memo\n  }, {})\n}\n\nconst restoreState = (state = {}) => {\n  for (const [id, attributes] of Object.entries(state)) {\n    for (const [attribute, value] of Object.entries(attributes)) updateElement(id, attribute, value)\n  }\n}\n\nexport default {\n  buildState,\n  restoreState\n}\n", "function save(name, value) {\n  if (typeof value !== 'object') value = {}\n  return localStorage.setItem(String(name), JSON.stringify(value))\n}\n\nfunction find(name) {\n  const stored = localStorage.getItem(String(name))\n  return stored ? JSON.parse(stored) : {}\n}\n\nexport default { save, find }\n", "// TODO: Move State to its own library\nimport observable from './observable'\nimport page from './page'\nimport storage from './storage'\nimport { dispatch, stateEvents } from '../events'\n\nconst key = 'TurboBoost::State'\nconst stub = { pages: {}, signed: null, unsigned: {} }\n\nlet signed = null // signed state <string>\nlet unsigned = {} // unsigned state (optimistic) <object>\n\nconst restore = () => {\n  const saved = { ...stub, ...storage.find(key) }\n  signed = saved.signed\n  unsigned = observable(saved.unsigned)\n  saved.pages[location.pathname] = saved.pages[location.pathname] || {}\n  page.restoreState(saved.pages[location.pathname])\n}\n\nconst save = () => {\n  const saved = { ...stub, ...storage.find(key) }\n  const fresh = {\n    signed: signed || saved.signed,\n    unsigned: { ...saved.unsigned, ...unsigned },\n    pages: { ...saved.pages }\n  }\n\n  // update the current page's state entry\n  const pageKey = location.pathname\n  const pageState = page.buildState()\n  Object.values(pageState).length ? (fresh.pages[pageKey] = pageState) : delete fresh.pages[pageKey]\n\n  storage.save(key, fresh)\n}\n\nconst initialize = json => {\n  const state = { ...stub, ...JSON.parse(json) }\n  signed = state.signed\n  unsigned = observable(state.unsigned)\n  save()\n  dispatch(stateEvents.stateInitialize, document, { detail: unsigned })\n}\n\n// setup\naddEventListener('DOMContentLoaded', restore)\naddEventListener('turbo:morph', restore)\naddEventListener('turbo:render', restore)\naddEventListener('turbo:before-fetch-request', save)\naddEventListener('beforeunload', save)\n\nexport default {\n  initialize,\n  buildPageState: page.buildState,\n  get signed() {\n    return signed\n  },\n  get unsigned() {\n    return unsigned\n  }\n}\n", "function v4() {\n  return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c =>\n    (c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16)\n  )\n}\n\nexport default { v4 }\n", "export default '0.3.2'\n", "import './turbo'\nimport schema from './schema'\nimport { dispatch, commandEvents } from './events'\nimport activity from './activity'\nimport confirmation from './confirmation'\nimport delegates from './delegates'\nimport drivers from './drivers'\nimport elements from './elements'\nimport './lifecycle'\nimport logger from './logger'\nimport state from './state'\nimport uuids from './uuids'\nimport VERSION from './version'\n\nconst TurboBoost = self.TurboBoost || {}\n\nconst Commands = {\n  VERSION,\n  active: false,\n  confirmation,\n  logger,\n  schema,\n  events: commandEvents,\n  registerEventDelegate: delegates.register,\n  get eventDelegates() {\n    return delegates.events\n  }\n}\n\nfunction buildCommandPayload(id, element) {\n  return {\n    csrfToken: document.querySelector('meta[name=\"csrf-token\"]')?.getAttribute('content'), // -- Rails CSRF token\n    id, //-------------------------------------------------------------------------------------- Uniquely identifies the command invocation\n    name: element.getAttribute(schema.commandAttribute), //------------------------------------- Command name\n    elementId: element.id.length ? element.id : null, //---------------------------------------- ID of the element that triggered the command\n    elementAttributes: elements.buildAttributePayload(element), //------------------------------ Attributes of the element that triggered the command\n    startedAt: Date.now(), //------------------------------------------------------------------- Start time of when the command was invoked\n    state: {\n      page: state.buildPageState(),\n      signed: state.signed,\n      unsigned: state.unsigned\n    }\n  }\n}\n\nasync function invokeCommand(event) {\n  let element\n  let payload = {}\n\n  try {\n    element = elements.findClosestCommand(event.target)\n    if (!element) return\n    if (!delegates.isRegisteredForElement(event.type, element)) return\n\n    const commandId = uuids.v4()\n    let driver = drivers.find(element)\n    let payload = {\n      ...buildCommandPayload(commandId, element),\n      driver: driver.name,\n      frameId: driver.frame ? driver.frame.id : null,\n      src: driver.src\n    }\n\n    const startEvent = await dispatch(commandEvents.start, element, {\n      cancelable: true,\n      detail: payload\n    })\n\n    if (startEvent.defaultPrevented || (startEvent.detail.confirmation && event.defaultPrevented))\n      return dispatch(commandEvents.abort, element, {\n        detail: {\n          message: `An event handler for '${commandEvents.start}' prevented default behavior and blocked command invocation!`,\n          source: startEvent\n        }\n      })\n\n    // the element and thus the driver may have changed based on the start event handler(s)\n    driver = drivers.find(element)\n    payload = {\n      ...buildCommandPayload(commandId, element),\n      driver: driver.name,\n      frameId: driver.frame ? driver.frame.id : null,\n      src: driver.src\n    }\n\n    activity.add(payload)\n\n    if (['frame', 'window'].includes(driver.name)) event.preventDefault()\n\n    switch (driver.name) {\n      case 'method':\n        return driver.invokeCommand(element, payload)\n      case 'form':\n        return driver.invokeCommand(element, payload, event)\n      case 'frame':\n        return driver.invokeCommand(driver.frame, payload)\n      case 'window':\n        return driver.invokeCommand(self, payload)\n    }\n  } catch (error) {\n    dispatch(commandEvents.clientError, element, {\n      detail: { ...payload, error }\n    })\n  }\n}\n\nself.TurboBoost = { ...TurboBoost }\n\nif (!self.TurboBoost.Commands) {\n  // wire things up and setup defaults for event delegation\n  delegates.handler = invokeCommand\n  delegates.register('click', [`[${schema.commandAttribute}]`])\n  delegates.register('submit', [`form[${schema.commandAttribute}]`])\n  delegates.register('toggle', [`details[${schema.commandAttribute}]`])\n  delegates.register('change', [\n    `input[${schema.commandAttribute}]`,\n    `select[${schema.commandAttribute}]`,\n    `textarea[${schema.commandAttribute}]`\n  ])\n\n  self.TurboBoost.Commands = Commands\n  self.TurboBoost.State = {\n    initialize: state.initialize,\n    get current() {\n      return state.unsigned\n    }\n  }\n}\n\nexport default Commands\n", "import '@turbo-boost/commands'\nimport devtools from '@turbo-boost/devtools'\nimport VERSION from './version'\nimport './elements'\n\nself.TurboBoost = self.TurboBoost || {}\nself.TurboBoost.devtools = devtools\nself.TurboBoost.Elements = { VERSION }\n\nexport default self.TurboBoost.Elements\n", "export default '0.0.6'\n", "export function template(html) {\n  let template = document.createElement('template')\n  template.innerHTML = html\n  return template\n}\n\nexport function appendHTML(html, parent) {\n  parent = parent || document.body\n  const clone = template(html).content.cloneNode(true)\n  const child = clone.querySelector('*')\n  return parent.appendChild(child)\n}\n\nexport function addHighlight(element, options = {}) {\n  if (!element) return\n  removeHighlight(element)\n  let { outline, outlineOffset } = options\n\n  outline = outline || 'dashed 3px red'\n  outlineOffset = outlineOffset || '0px'\n\n  element.originalStyles = element.originalStyles || {\n    display: element.style.display,\n    minHeight: element.style.minHeight,\n    minWidth: element.style.minWidth,\n    outline: element.style.outline,\n    outlineOffset: element.style.outlineOffset\n  }\n\n  if (\n    getComputedStyle(element).display.match(/^inline$/i) &&\n    element.offsetWidth === 0 &&\n    element.offsetHeight === 0\n  ) {\n    element.style.display = 'inline-block'\n    element.style.minHeight = '2px'\n    element.style.minWidth = '2px'\n  }\n  element.style.outline = outline\n  element.style.outlineOffset = outlineOffset\n  element.dataset.turboBoostHighlight = true\n}\n\nexport function removeHighlight(element) {\n  if (!element) return\n  if (element.originalStyles) {\n    for (const [key, value] of Object.entries(element.originalStyles))\n      value ? (element.style[key] = value) : (element.style[key] = '')\n    delete element.originalStyles\n  }\n  delete element.dataset.turboBoostHighlight\n}\n\nexport function coordinates(element) {\n  if (!element) return {}\n  const rect = element.getBoundingClientRect()\n  const width = element.offsetWidth\n  const height = element.offsetHeight\n  const top = rect.top + window.scrollY\n  const left = rect.left + window.scrollX\n  const right = left + width\n  const bottom = top + height\n  return { top, left, right, bottom, width, height }\n}\n\nexport function attempt(callback) {\n  try {\n    callback()\n  } catch {}\n}\n", "export default class DevtoolElement extends HTMLElement {\n  constructor() {\n    super()\n    this.attachShadow({ mode: 'open' })\n    this.shadowRoot.innerHTML = this.html\n    this.labelElement.addEventListener('click', event => {\n      event.preventDefault()\n      this.toggle()\n    })\n    this.checkboxElement.addEventListener('change', event =>\n      this.dispatchEvent(new CustomEvent('change', { bubbles: true }))\n    )\n  }\n\n  toggle() {\n    this.checked ? this.uncheck() : this.check()\n  }\n\n  check() {\n    this.checkboxElement.checked = true\n    this.dispatchEvent(new CustomEvent('change', { bubbles: true }))\n  }\n\n  uncheck() {\n    this.checkboxElement.checked = false\n    this.dispatchEvent(new CustomEvent('change', { bubbles: true }))\n  }\n\n  get name() {\n    return this.getAttribute('name')\n  }\n\n  get checked() {\n    return this.checkboxElement.checked\n  }\n\n  get checkboxElement() {\n    return this.shadowRoot.querySelector('input')\n  }\n\n  get labelElement() {\n    return this.shadowRoot.querySelector('label')\n  }\n\n  get html() {\n    return `\n      <style>${this.stylesheet}</style>\n      <div>\n        <input name=\"checkbox\" type=\"checkbox\">\n        <label for=\"checkbox\"><slot name=\"label\"></slot></label>\n      </div>\n    `\n  }\n\n  get stylesheet() {\n    return `\n      :host, :host * {\n        cursor: pointer;\n      }\n\n      div {\n        display: flex;\n        margin-right: 10px;\n      }\n\n      input:checked + label{\n        font-weight: bold;\n      }\n\n      label {\n        color: black;\n      }\n    `\n  }\n}\n", "import { appendHTML } from '../utils/dom.js'\n\nexport default class SupervisorElement extends HTMLElement {\n  constructor() {\n    super()\n    this.enabledDevtools = {}\n    this.attachShadow({ mode: 'open' })\n    this.shadowRoot.innerHTML = this.html\n    this.shadowRoot.querySelector('button').addEventListener('click', () =>\n      this.dispatchEvent(\n        new CustomEvent('turbo-boost:devtools-close', {\n          bubbles: true\n        })\n      )\n    )\n\n    this.addEventListener('change', event => {\n      const devtoolElement = event.target\n      const { checked, name } = devtoolElement\n      checked ? this.enableDevtool(name) : this.disableDevtool(name)\n    })\n  }\n\n  enableDevtool(name) {\n    if (this.enabledDevtools[name]) return\n    this.enabledDevtools[name] = true\n    this.dispatchEvent(\n      new CustomEvent('turbo-boost:devtool-enable', {\n        bubbles: true,\n        detail: { name: name }\n      })\n    )\n  }\n\n  disableDevtool(name) {\n    if (!this.enabledDevtools[name]) return\n    delete this.enabledDevtools[name]\n    this.dispatchEvent(\n      new CustomEvent('turbo-boost:devtool-disable', {\n        bubbles: true,\n        detail: { name: name }\n      })\n    )\n  }\n\n  close() {\n    this.devtoolElements.forEach(el => {\n      if (el.checked) el.uncheck()\n    })\n    this.remove()\n  }\n\n  get devtoolElements() {\n    return this.querySelectorAll('[slot=\"devtool\"]')\n  }\n\n  get closeElement() {\n    return this.querySelector('button')\n  }\n\n  get html() {\n    return `\n      <style>${this.stylesheet}</style>\n      <div>\n        <img src=\"https://ik.imagekit.io/hopsoft/turbo-boost-logo_zHiiimlvT.webp?ik-sdk-version=javascript-1.4.3&updatedAt=1671722004342\">\n        <slot name=\"devtool\"></slot>\n        <button>\u2715</button>\n      </div>\n    `\n  }\n\n  get stylesheet() {\n    return `\n      :host {\n        background-color: gainsboro;\n        border-radius: 5px;\n        bottom: 20px;\n        display: block;\n        filter: drop-shadow(3px 3px 3px rgba(0,0,0,0.3));\n        left: 50%;\n        outline-offset: 1px;\n        outline: solid 2px black;\n        padding: 5px 10px;\n        position: fixed;\n        transform: translateX(-50%);\n        z-index: 8999;\n      }\n\n      * {\n        -webkit-user-select: none;\n        font-family: helvetica, sans-serif;\n        font-size: 1rem;\n        user-select: none;\n      }\n\n      img {\n        align-self: center;\n        cursor: grab;\n        height: 25px;\n        margin-left: -5px;\n        vertical-align: middle;\n      }\n\n      div {\n        display: flex;\n        gap: 0 5px;\n        position: relative;\n      }\n\n      [slot=\"devtool\"] {\n        align-self: center;\n      }\n\n      button {\n        align-self: center;\n        background-color: darkgray;\n        border-radius: 50%;\n        border: none;\n        color: black;\n        cursor: pointer;\n        font-size: 10px;\n        height: 18px;\n        line-height: 18px;\n        margin-right: -5px;\n        opacity: 0.5;\n        outline: solid 1px black;\n        padding: 0 2px;\n        width: 18px;\n      }\n\n      button:hover {\n        opacity: 1;\n      }\n    `\n  }\n}\n", "export default class TooltipElement extends HTMLElement {\n  constructor() {\n    super()\n    this.attachShadow({ mode: 'open' })\n    this.shadowRoot.innerHTML = this.html\n  }\n\n  connectedCallback() {\n    const savedTransform = localStorage.getItem(`turbo-boost-devtools-${location.href}-${this.id}-transform`)\n\n    if (savedTransform) {\n      this.style.transform = savedTransform\n    }\n  }\n\n  disconnectedCallback() {\n    if (this.id !== 'undefined' && this.id !== '') {\n      localStorage.setItem(`turbo-boost-devtools-${location.href}-${this.id}-transform`, this.style.transform)\n    }\n  }\n\n  get color() {\n    return this.getAttribute('color') || 'darkslategray'\n  }\n\n  get backgroundColor() {\n    return this.getAttribute('background-color') || 'gainsboro'\n  }\n\n  get position() {\n    return this.getAttribute('position') || 'top'\n  }\n\n  get html() {\n    return `\n      <style>${this.stylesheet}</style>\n      <div role=\"container\">\n        <div role=\"title\">\n          <slot name=\"title\"></slot>\n          <img src=\"https://ik.imagekit.io/hopsoft/turbo-boost-logo_zHiiimlvT.webp?ik-sdk-version=javascript-1.4.3&updatedAt=1671722004342\">\n        </div>\n        <slot name=\"subtitle\"></slot>\n        <slot name=\"content-top\"></slot>\n        <slot name=\"content\"></slot>\n        <slot name=\"content-bottom\"></slot>\n      </div>\n    `\n  }\n\n  get stylesheet() {\n    return `\n      :host {\n        display: block;\n        position: absolute;\n        z-index: 8999;\n      }\n\n      * {\n        color: ${this.color}\n        font-size: 1rem;\n      }\n\n      [role=\"container\"] {\n        background-color: ${this.backgroundColor};\n        border-radius: 15px;\n        filter: drop-shadow(3px 3px 3px rgba(0,0,0,0.3));\n        font-family: monospace;\n        min-height: 30px;\n        min-width: 100px;\n        opacity: 0.9;\n        outline-offset: 1px;\n        outline: dashed 3px ${this.color};\n        padding: 12px;\n        position: relative;\n        white-space: nowrap;\n      }\n\n      [role=\"title\"] {\n        display: flex;\n      }\n\n      [role=\"title\"] slot[name=\"title\"] {\n        color: ${this.color};\n        display: block;\n        flex-grow: 1;\n        font-weight: bold;\n      }\n\n      [role=\"title\"] img {\n        height: 25px;\n        vertical-align: middle;\n      }\n\n      slot[name=\"subtitle\"] {\n        border-bottom: dotted 1px ${this.color};\n        border-top: dotted 1px ${this.color};\n        color: ${this.color};\n        display: block;\n        font-size: 0.8rem;\n        font-weight: lighter;\n        margin-bottom: 12px;\n        margin-top: 8px;\n        padding-bottom: 4px;\n        padding-top: 4px;\n        width: 100%;\n      }\n\n      slot[name=\"content-top\"],\n      slot[name=\"content\"],\n      slot[name=\"content-bottom\"] {\n        display: block;\n        font-weight: normal;\n      }\n\n      slot[name=\"content-top\"] {\n        color: ${this.color};\n        margin-bottom: 8px;\n      }\n\n      slot[name=\"content\"],\n      slot[name=\"content-bottom\"] {\n        opacity: 0.7;\n        padding-left: 12px;\n      }\n\n      slot[name=\"content\"] {\n        color: ${this.color};\n      }\n\n      slot[name=\"content-bottom\"] {\n        color: red;\n      }\n    `\n  }\n}\n", "const added = []\n\nconst dependencies = {\n  LeaderLine: {\n    src: 'https://cdnjs.cloudflare.com/ajax/libs/leader-line/1.0.7/leader-line.min.js',\n    integrity:\n      'sha512-0dNdzMjpT6pJdFGF1DwybFCfm3K/lzHhxaMXC/92J9/DZujHlqYFqmhTOAoD0o+LkeEsVK2ar/ESs7/Q2B6wJg==',\n    global: 'LeaderLine'\n  },\n\n  PlainDraggable: {\n    src: 'https://cdn.jsdelivr.net/npm/plain-draggable@2.5.14/plain-draggable.min.js',\n    global: 'PlainDraggable'\n  }\n}\n\nfunction exists(dependency) {\n  if (dependency.global && self[dependency.global]) return true\n  if (document.querySelector(`[src='${dependency.src}']`)) return true\n  return added.includes(dependency)\n}\n\nfunction add(dependency) {\n  if (exists(dependency)) return\n  added.push(dependency)\n\n  const { src, integrity } = dependency\n  const script = document.createElement('script')\n  script.setAttribute('src', src)\n  script.setAttribute('crossorigin', 'anonymous')\n  script.setAttribute('referrerpolicy', 'no-referrer')\n  if (integrity) script.setAttribute('integrity', integrity)\n  document.head.appendChild(script)\n}\n\nfunction remove(dependency) {\n  if (!added.includes(dependency)) return\n  added.splice(added.indexOf(dependency), 1)\n\n  const { src } = dependency\n  const el = document.querySelector(`script[src='${src}']`)\n  if (el) el.remove()\n  if (dependency.global && self[dependency.global]) self[dependency.global] = null\n}\n\nfunction removeAll() {\n  ;[...added].forEach(dependency => remove(dependency))\n}\n\nexport default { ...dependencies, add, remove, removeAll }\n", "import { appendHTML } from './utils/dom'\nimport DevtoolElement from './elements/devtool_element'\nimport SupervisorElement from './elements/supervisor_element'\nimport TooltipElement from './elements/tooltip_element'\nimport dependencies from './dependencies'\n\ncustomElements.define('turbo-boost-devtool', DevtoolElement)\ncustomElements.define('turbo-boost-devtool-supervisor', SupervisorElement)\ncustomElements.define('turbo-boost-devtool-tooltip', TooltipElement)\n\nlet supervisorElement\n\nfunction makeDraggable() {\n  if (!supervisorElement) return\n  try {\n    new PlainDraggable(supervisorElement)\n  } catch {\n    setTimeout(makeDraggable, 200)\n  }\n}\n\nfunction stop() {\n  if (stopped()) return\n  supervisorElement.close()\n  supervisorElement.dispatchEvent(\n    new CustomEvent('turbo-boost:devtools-stop', {\n      bubbles: true\n    })\n  )\n  supervisorElement = null\n  dependencies.removeAll()\n}\n\nfunction start() {\n  if (started()) return\n  dependencies.add(dependencies.LeaderLine)\n  dependencies.add(dependencies.PlainDraggable)\n  supervisorElement = appendHTML('<turbo-boost-devtool-supervisor></turbo-boost-devtool-supervisor>')\n  setTimeout(makeDraggable, 200)\n  supervisorElement.dispatchEvent(\n    new CustomEvent('turbo-boost:devtools-start', {\n      bubbles: true\n    })\n  )\n}\n\nfunction restart() {\n  const enabledList = supervisorElement ? Object.keys(supervisorElement.enabledDevtools) : []\n\n  stop()\n  start()\n\n  supervisorElement.devtoolElements.forEach(el => {\n    if (enabledList.includes(el.name)) el.check()\n  })\n}\n\nfunction started() {\n  return !!supervisorElement\n}\n\nfunction stopped() {\n  return !started()\n}\n\nlet restartTimeout\nfunction debouncedRestart() {\n  clearTimeout(restartTimeout)\n  restartTimeout = setTimeout(restart, 25)\n}\n\nfunction autoRestart() {\n  if (started()) debouncedRestart()\n}\n\naddEventListener('turbo:load', autoRestart)\naddEventListener('turbo-frame:load', autoRestart)\naddEventListener('turbo-boost:devtools-connect', autoRestart)\naddEventListener('turbo-boost:devtools-close', stop)\n\nif (window.TurboBoost) {\n  addEventListener(TurboBoost.Commands.events.success, autoRestart)\n  addEventListener(TurboBoost.Commands.events.finish, autoRestart)\n}\n\nfunction register(name, label) {\n  if (!supervisorElement) return\n  return appendHTML(\n    `\n      <turbo-boost-devtool name=\"${name}\" slot=\"devtool\">\n        <span slot=\"label\">${label}</span>\n      </turbo-boost-devtool>\n    `,\n    supervisorElement\n  )\n}\n\nfunction enabled(name) {\n  if (!supervisorElement) return false\n  return supervisorElement.enabledDevtools[name]\n}\n\nexport default {\n  enabled,\n  register,\n  start,\n  stop,\n  restart: debouncedRestart,\n  get started() {\n    return started()\n  },\n  get stopped() {\n    return stopped()\n  }\n}\n", "// Icons courtesy of https://feathericons.com/\nimport supervisor from './supervisor'\nimport { appendHTML, addHighlight, attempt, coordinates, removeHighlight } from './utils/dom.js'\n\nfunction appendTooltip(title, subtitle, content, options = {}) {\n  let { backgroundColor, color, position, id } = options\n  color = color || 'white'\n  position = position || 'top'\n  return appendHTML(`\n    <turbo-boost-devtool-tooltip id=\"${id}\" position=\"${position}\" background-color=\"${backgroundColor}\" color=\"${color}\">\n      <div slot='title'>${title}</div>\n      <div slot='subtitle'>${subtitle}</div>\n      ${content}\n    </turbo-boost-devtool-tooltip>\n  `)\n}\n\nlet activeTarget\n\nexport default class Devtool {\n  constructor(delegate) {\n    this.delegate = delegate\n\n    let hideTimeout\n    const debouncedHide = () => {\n      clearTimeout(hideTimeout)\n      hideTimeout = setTimeout(this.hide({ active: false }), 25)\n    }\n\n    this.eventListeners['turbo-boost:devtool-enable'] = event => {\n      // LeaderLine.positionByWindowResize = false\n      const { name } = event.detail\n      if (name !== this.delegate.name) return\n\n      addHighlight(this.delegate.triggerElement, {\n        outline: '3px dashed blueviolet',\n        outlineOffset: '2px'\n      })\n\n      this.hide({ active: false })\n      if (this.active) this.show()\n    }\n\n    this.eventListeners['turbo-boost:devtool-disable'] = event => {\n      const { name } = event.detail\n      if (name === this.delegate.name) removeHighlight(this.delegate.triggerElement)\n    }\n\n    this.eventListeners['click'] = event => {\n      if (event.target.closest('turbo-boost-devtool-tooltip')) return\n      debouncedHide()\n    }\n\n    this.eventListeners['turbo:load'] = debouncedHide\n    this.eventListeners['turbo-frame:load'] = debouncedHide\n    if (window.TurboBoost) {\n      this.eventListeners[TurboBoost.Commands.events.finish] = debouncedHide\n    }\n\n    this.registerEventListeners()\n  }\n\n  registerEventListeners() {\n    Object.entries(this.eventListeners).forEach(([type, listener]) => {\n      addEventListener(type, listener)\n    })\n  }\n\n  unregisterEventListeners() {\n    Object.entries(this.eventListeners).forEach(([type, listener]) => {\n      removeEventListener(type, listener)\n    })\n  }\n\n  get eventListeners() {\n    return this._eventListeners || (this._eventListeners = {})\n  }\n\n  show() {\n    if (!this.enabled) return\n\n    if (this.active) return\n    this.active = true\n\n    this.hide({ active: true })\n\n    addHighlight(this.delegate.targetElement, {\n      outline: '3px dashed darkcyan',\n      outlineOffset: '-2px'\n    })\n\n    addHighlight(this.delegate.morphElement, {\n      outline: '3px dashed chocolate',\n      outlineOffset: '3px'\n    })\n\n    this.renderingTooltip = this.createRenderingTooltip()\n    this.targetTooltip = this.createTargetTooltip()\n    this.triggerTooltip = this.createTriggerTooltip(this.targetTooltip, this.renderingTooltip)\n\n    document.querySelectorAll('.leader-line').forEach(el => (el.style.zIndex = 100000))\n\n    const data = {\n      morph: {\n        partial: this.delegate.triggerElement.renders,\n        id: this.delegate.triggerElement.morphs,\n        status: this.delegate.morphElement ? 'OK' : 'Not Found'\n      },\n      trigger: { partial: null, id: null, status: 'Not Found' },\n      target: { partial: null, id: null, status: 'Not Found' }\n    }\n\n    if (this.delegate.triggerElement) {\n      data.trigger = {\n        partial: this.delegate.triggerElement.partial,\n        id: this.delegate.triggerElement.id,\n        status: 'OK'\n      }\n      data.target.id = this.delegate.triggerElement.controls\n    }\n\n    if (this.delegate.targetElement)\n      data.target = {\n        partial: this.delegate.targetElement.partial,\n        dom_id: this.delegate.targetElement.id,\n        status: 'OK'\n      }\n\n    console.table(data)\n  }\n\n  hide({ active: active = false }) {\n    document.querySelectorAll('turbo-boost-devtool-tooltip').forEach(tooltip => {\n      attempt(() => tooltip.line.remove())\n      attempt(() => tooltip.drag.remove())\n      attempt(() => tooltip.lineToRendering.remove())\n      attempt(() => tooltip.lineToTarget.remove())\n      attempt(() => tooltip.remove())\n    })\n\n    document.querySelectorAll('[data-turbo-boost-highlight]').forEach(el => {\n      if (!el.tagName.match(/turbo-boost-toggle-trigger/i)) removeHighlight(el)\n    })\n\n    this.active = active\n  }\n\n  get active() {\n    return activeTarget === this.delegate\n  }\n\n  set active(value) {\n    if (value) activeTarget = this.delegate\n    else activeTarget = null\n  }\n\n  get enabled() {\n    return supervisor.enabled(this.delegate.name)\n  }\n\n  static register(name, label) {\n    supervisor.register(name, label)\n  }\n\n  createRenderingTooltip() {\n    if (!this.delegate.triggerElement.renders)\n      return console.debug(\n        `Unable to create the rendering tooltip! The trigger element must set the 'renders' attribute.`\n      )\n\n    if (!this.delegate.triggerElement.morphs)\n      return console.debug(\n        `Unable to create the rendering tooltip! The trigger element specified the 'morphs' attrbiute but no element matches the DOM id: '${this.triggerElement.morphs}'`\n      )\n\n    const title = `\n      <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display:inline-block;\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 19l7-7 3 3-7 7-3-3z\"></path><path d=\"M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z\"></path><path d=\"M2 2l7.586 7.586\"></path><circle cx=\"11\" cy=\"11\" r=\"2\"></circle></svg>\n      RENDERING - &lt;${this.delegate.triggerElement.tagName.toLowerCase()}&gt;\n    `\n    const subtitle = `\n      <b>partial</b>: ${this.delegate.triggerElement.renders || 'unknown'}<br>\n      <b>morphs</b>: ${this.delegate.triggerElement.morphs || 'unknown'}<br>\n    `\n    const content = `\n      <div slot=\"content-top\" style=\"font-size:85%; font-style:italic; font-weight:100;\">\n        The <b>TRIGGER</b> toggles the <b>TARGET</b> then renders the partial &amp; morphs the element.<br>\n      </div>\n    `\n    const tooltip = appendTooltip(title, subtitle, content, {\n      id: `${this.delegate.id}-rendering`,\n      backgroundColor: 'lightyellow',\n      color: 'chocolate'\n    })\n\n    const coords = coordinates(this.delegate.morphElement)\n    const top = Math.ceil(coords.top + coords.height / 2 - tooltip.offsetHeight / 2)\n    const left = Math.ceil(coords.left + coords.width + 100)\n    tooltip.style.top = `${top}px`\n    tooltip.style.left = `${left}px`\n\n    tooltip.line = new LeaderLine(tooltip, this.delegate.morphElement, {\n      ...this.leaderLineOptions,\n      color: 'chocolate'\n    })\n\n    tooltip.drag = new PlainDraggable(tooltip)\n    return tooltip\n  }\n\n  createTargetTooltip() {\n    if (!this.delegate.targetElement)\n      return console.debug(\n        `Unable to create the target tooltip! No element matches the DOM id: '${this.delegate.triggerElement.controls}'`\n      )\n\n    const title = `\n      <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display:inline-block;\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><circle cx=\"12\" cy=\"12\" r=\"6\"></circle><circle cx=\"12\" cy=\"12\" r=\"2\"></circle></svg>\n      TARGET - &lt;${this.delegate.targetElement.tagName.toLowerCase()}&gt;\n    `\n\n    const tooltip = appendTooltip(\n      title,\n      this.delegate.targetTooltipData?.subtitle || '',\n      this.delegate.targetTooltipData?.content || '',\n      {\n        id: `${this.delegate.id}-target`,\n        backgroundColor: 'lightcyan',\n        color: 'darkcyan',\n        position: 'bottom'\n      }\n    )\n\n    const coords = coordinates(this.delegate.targetElement)\n    const top = Math.ceil(coords.top + tooltip.offsetHeight)\n    const left = Math.ceil(coords.left + coords.width + tooltip.offsetWidth / 3)\n    tooltip.style.top = `${top}px`\n    tooltip.style.left = `${left}px`\n\n    tooltip.line = new LeaderLine(tooltip, this.delegate.targetElement, {\n      ...this.leaderLineOptions,\n      color: 'darkcyan'\n    })\n\n    tooltip.drag = new PlainDraggable(tooltip)\n    return tooltip\n  }\n\n  createTriggerTooltip(targetTooltip, renderingTooltip) {\n    if (!this.delegate.triggerElement) return\n    const title = `\n      <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display:inline;\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"></polygon></svg>\n      TRIGGER - &lt;${this.delegate.triggerElement.tagName.toLowerCase()}&gt;\n    `\n\n    const tooltip = appendTooltip(\n      title,\n      this.delegate.triggerTooltipData?.subtitle || '',\n      this.delegate.triggerTooltipData?.content || '',\n      {\n        id: `${this.delegate.id}-trigger`,\n        backgroundColor: 'lavender',\n        color: 'blueviolet'\n      }\n    )\n\n    const coords = coordinates(this.delegate.triggerElement)\n    const top = Math.ceil(coords.top - tooltip.offsetHeight * 2)\n    const left = Math.ceil(coords.left + coords.width + tooltip.offsetWidth / 3)\n    tooltip.style.top = `${top}px`\n    tooltip.style.left = `${left}px`\n\n    tooltip.line = new LeaderLine(this.delegate.triggerElement, tooltip, {\n      ...this.leaderLineOptions,\n      color: 'blueviolet'\n    })\n\n    if (targetTooltip) {\n      tooltip.lineToTarget = new LeaderLine(tooltip, targetTooltip, {\n        ...this.leaderLineOptions,\n        color: 'blueviolet',\n        middleLabel: this.delegate.targetLineLabel,\n        size: 2.1\n      })\n\n      targetTooltip.drag.onMove = () => {\n        targetTooltip.line.position()\n        tooltip.lineToTarget?.position()\n        tooltip.lineToRendering?.position()\n      }\n    }\n\n    if (renderingTooltip) {\n      tooltip.lineToRendering = new LeaderLine(tooltip, renderingTooltip, {\n        ...this.leaderLineOptions,\n        color: 'blueviolet',\n        middleLabel: this.delegate.renderingLineLabel,\n        size: 2.1\n      })\n\n      renderingTooltip.drag.onMove = () => {\n        renderingTooltip.line.position()\n        if (tooltip.lineToTarget) tooltip.lineToTarget.position()\n        tooltip.lineToRendering?.position()\n      }\n    }\n\n    tooltip.drag = new PlainDraggable(tooltip)\n    tooltip.drag.onMove = () => {\n      tooltip.line.position()\n      if (tooltip.lineToTarget) tooltip.lineToTarget.position()\n      if (tooltip.lineToRendering) tooltip.lineToRendering.position()\n    }\n\n    return tooltip\n  }\n\n  get leaderLineOptions() {\n    return {\n      dash: { animation: true },\n      dropShadow: { opacity: 0.3 },\n      endPlug: 'arrow3',\n      endPlugSize: 1.7,\n      size: 3,\n      startPlug: 'disc',\n      startPlugSize: 1\n    }\n  }\n}\n", "import VERSION from './version'\nimport supervisor from './supervisor'\nimport Devtool from './devtool'\n\nconst { restart, start, stop } = supervisor\n\nfunction decorateElementWithDevtool(element, name, label) {\n  Object.assign(element, {\n    initializeDevtool() {\n      const mouseenter = () => this.devtool.show()\n\n      addEventListener('turbo-boost:devtools-start', () => {\n        this.devtool = new Devtool(this)\n        this.addEventListener('mouseenter', mouseenter)\n      })\n\n      addEventListener('turbo-boost:devtools-stop', () => {\n        this.removeEventListener('mouseenter', mouseenter)\n        this.removeDevtool()\n      })\n\n      this.dispatchEvent(new CustomEvent('turbo-boost:devtools-connect', { bubbles: true }))\n    },\n    hideDevtool() {\n      this.devtool?.hide({ active: false })\n    },\n    removeDevtool() {\n      if (this.devtool?.hide) this.devtool.hide({ active: false })\n      if (this.devtool?.unregisterEventListeners) this.devtool.unregisterEventListeners()\n      delete this.devtool\n    },\n    name,\n    targetLineLabel: label\n  })\n\n  // the element references below are defaults that are placed on the receiver if not present\n  const properties = ['triggerElement', 'morphElement', 'targetElement']\n\n  properties\n    .filter(property => {\n      return element[property] === undefined\n    })\n    .forEach(property => {\n      Object.defineProperty(element, property, {\n        get() {\n          return element\n        }\n      })\n    })\n}\n\n//;(async () => {\n//  // we cannot detect customElements.get(\"cable-ready-updates-for\") because they are lazily initialized\n//  if (window.CableReady) await import('./delegates/cable_ready.js')\n//})()\n\nexport { Devtool, decorateElementWithDevtool }\n\nexport default { restart, start, stop, VERSION }\n", "export default '0.1.0'\n", "export default class TurboBoostElement extends HTMLElement {\n  constructor(html) {\n    super()\n    this.devtool = 'unknown'\n    this.attachShadow({ mode: 'open' })\n    this.shadowRoot.innerHTML = html || '<slot></slot>'\n  }\n\n  connectedCallback() {\n    this.ensureId()\n  }\n\n  ensureId() {\n    if (this.id.trim().length) return\n    this.id = `${this.tagName}-${this.uuidv4()}`.toLowerCase()\n  }\n\n  // SEE: https://stackoverflow.com/questions/105034/how-do-i-create-a-guid-uuid\n  uuidv4() {\n    return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c =>\n      (c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16)\n    )\n  }\n\n  get viewStack() {\n    const value = this.getAttribute('view-stack')\n    if (!value) return []\n    return JSON.parse(value)\n  }\n\n  get partial() {\n    return this.viewStack[0]\n  }\n}\n", "import TurboBoostElement from '../../turbo_boost_element'\n\nconst html = `\n  <turbo-boost>\n    <slot name=\"busy\" hidden></slot>\n    <slot></slot>\n  </turbo-boost>\n`\n\nexport const busyDelay = 100 // milliseconds - time to wait before showing busy element\nexport const busyDuration = 400 // milliseconds - minimum time that busy element is shown\n\nexport default class ToggleElement extends TurboBoostElement {\n  constructor() {\n    super(html)\n  }\n\n  // TODO: Should we timeout after a theoretical max wait time?\n  //       The idea being that a server error occurred and the toggle failed.\n  showBusyElement() {\n    clearTimeout(this.showBusyElementTimeout)\n    clearTimeout(this.hideBusyElementTimeout)\n\n    if (!this.busyElement) return\n\n    this.busyStartedAt = Date.now() + busyDelay\n    this.showBusyElementTimeout = setTimeout(() => {\n      this.busySlotElement.hidden = false\n      this.defaultSlotElement.hidden = true\n    }, busyDelay)\n  }\n\n  hideBusyElement() {\n    clearTimeout(this.showBusyElementTimeout)\n    clearTimeout(this.hideBusyElementTimeout)\n\n    if (!this.busyElement) return\n\n    let delay = busyDuration - (Date.now() - this.busyStartedAt)\n    if (delay < 0) delay = 0\n\n    delete this.busyStartedAt\n    this.hideBusyElementTimeout = setTimeout(() => {\n      this.busySlotElement.hidden = true\n      this.defaultSlotElement.hidden = false\n    }, delay)\n  }\n\n  get busyElement() {\n    return this.querySelector(':scope > [slot=\"busy\"]')\n  }\n\n  get busySlotElement() {\n    return this.shadowRoot.querySelector('slot[name=\"busy\"]')\n  }\n\n  get defaultSlotElement() {\n    return this.shadowRoot.querySelector('slot:not([name])')\n  }\n\n  // indicates if an rpc call is active/busy\n  get busy() {\n    return this.getAttribute('busy') === 'true'\n  }\n\n  // indicates if an rpc call is active/busy\n  set busy(value) {\n    value = !!value\n    if (this.busy === value) return\n    this.setAttribute('busy', value)\n    if (value) this.showBusyElement()\n    else this.hideBusyElement()\n  }\n\n  get busyStartedAt() {\n    if (!this.dataset.busyStartedAt) return 0\n    return Number(this.dataset.busyStartedAt)\n  }\n\n  set busyStartedAt(value) {\n    this.dataset.busyStartedAt = value\n  }\n}\n", "import ToggleElement from '../toggle_element'\n\nexport default class ToggleTargetElement extends ToggleElement {\n  connectedCallback() {\n    super.connectedCallback()\n\n    this.mouseenterHandler = this.onMouseenter.bind(this)\n    this.addEventListener('mouseenter', this.mouseenterHandler)\n\n    this.collapseHandler = this.collapse.bind(this)\n    this.collapseNowHandler = this.collapseNow.bind(this)\n\n    this.collapseOn.forEach(entry => {\n      const parts = entry.split('@')\n      const name = parts[0]\n\n      if (parts.length > 1) {\n        const target = parts[1].match(/^self|window$/) ? self : self[parts[1]]\n        target.addEventListener(name, this.collapseNowHandler)\n      } else {\n        this.addEventListener(name, this.collapseHandler)\n      }\n    })\n  }\n\n  disconnectedCallback() {\n    this.removeEventListener('mouseenter', this.mouseenterHandler)\n\n    this.collapseOn.forEach(entry => {\n      const parts = entry.split('@')\n      const name = parts[0]\n\n      if (parts.length > 1) {\n        const target = parts[1].match(/^self|window$/) ? self : self[parts[1]]\n        target.removeEventListener(name, this.collapseNowHandler)\n      } else {\n        this.removeEventListener(name, this.collapseHandler)\n      }\n    })\n  }\n\n  // TODO: get cached content working properly\n  //       perhaps use a mechanic other than morph\n\n  // TODO: implement cache (similar to Turbo Drive restoration visit)\n  cacheHTML() {\n    // this.cachedHTML = this.innerHTML\n  }\n\n  // TODO: implement cache (similar to Turbo Drive restoration visit)\n  renderCachedHTML() {\n    // if (!this.cachedHTML) return\n    // this.innerHTML = this.cachedHTML\n  }\n\n  onMouseenter() {\n    clearTimeout(this.collapseTimeout)\n  }\n\n  collapse(delay = 250) {\n    clearTimeout(this.collapseTimeout)\n    if (this.busy) return\n    if (typeof delay !== 'number') delay = 250\n\n    if (delay > 0) return (this.collapseTimeout = setTimeout(() => this.collapse(0), delay))\n\n    this.innerHTML = ''\n    try {\n      this.expanded = false\n      this.triggerElement.hideDevtool()\n    } catch {}\n  }\n\n  collapseNow(event) {\n    if (event.target.closest('turbo-boost-devtool-tooltip')) return\n    this.collapse(0)\n  }\n\n  collapseMatches() {\n    document.querySelectorAll(this.collapseSelector).forEach(el => {\n      if (el.id === this.id) return\n      if (el.collapse) el.collapse(0)\n    })\n  }\n\n  get collapseSelector() {\n    return this.triggerElement.collapseSelector || this.getAttribute('collapse-selector')\n  }\n\n  get focusSelector() {\n    return this.getAttribute('focus-selector')\n  }\n\n  // the active trigger\n  get triggerElement() {\n    return document.getElementById(this.labeledBy)\n  }\n\n  // all triggers\n  get triggerElements() {\n    return document.querySelectorAll(`[aria-controls=\"${this.id}\"]`)\n  }\n\n  // the dom id of the active trigger\n  get labeledBy() {\n    return this.getAttribute('aria-labeledby')\n  }\n\n  set labeledBy(value) {\n    return this.setAttribute('aria-labeledby', value)\n  }\n\n  get collapseOn() {\n    const value = this.getAttribute('collapse-on')\n    if (!value) return []\n    return JSON.parse(value)\n  }\n\n  get expanded() {\n    return this.triggerElement ? this.triggerElement.expanded : false\n  }\n\n  set expanded(value) {\n    this.triggerElements.forEach(el => (el.expanded = value))\n  }\n\n  get busy() {\n    return this.triggerElement && this.triggerElement.busy\n  }\n}\n", "let focusTimeout\n\nfunction deactivateTrixAttributes(editor) {\n  const attributes = ['bold', 'bullet', 'code', 'heading1', 'href', 'italic', 'number', 'quote', 'strike']\n  attributes.forEach(name => editor.deactivateAttribute(name))\n}\n\nfunction focusTrixEditorElement(element) {\n  if (element.value.length === 0) return\n\n  const editor = element.editor\n\n  // move cursor to the end\n  let lastRange = []\n  while (lastRange[0] !== editor.getSelectedRange()[0] && lastRange[1] !== editor.getSelectedRange()[1]) {\n    lastRange = editor.getSelectedRange()\n    editor.moveCursorInDirection('forward')\n  }\n\n  // insert an empty char and select it\n  editor.insertString(' ')\n  editor.moveCursorInDirection('forward')\n  editor.setSelectedRange([lastRange[1], editor.getSelectedRange()[1]])\n\n  // deactivate all trix features for the selection\n  deactivateTrixAttributes(editor)\n\n  // move cursor to end and collapse the selection\n  editor.setSelectedRange([editor.getSelectedRange()[1], editor.getSelectedRange()[1]])\n}\n\nfunction debouncedFocus(element) {\n  clearTimeout(focusTimeout)\n\n  focusTimeout = setTimeout(() => {\n    if (!element) return\n\n    element.focus()\n    const trixEditorElement = element.closest('trix-editor')\n\n    try {\n      if (trixEditorElement) {\n        focusTrixEditorElement(trixEditorElement)\n      } else {\n        element.selectionStart = element.selectionEnd = element.value.length\n      }\n    } catch (_) {\n    } finally {\n      element.scrollIntoView({ block: 'center', behavior: 'smooth' })\n    }\n  }, 100)\n}\n\nexport default element => debouncedFocus(element)\n", "import { Devtool, decorateElementWithDevtool } from '@turbo-boost/devtools'\n\nimport ToggleElement, { busyDuration } from '../toggle_element'\nimport focus from './focus'\n\ndocument.addEventListener('turbo-boost:devtools-start', () => Devtool.register('toggle', 'toggles'))\n\nlet currentFocusSelector\n\nexport default class ToggleTriggerElement extends ToggleElement {\n  constructor() {\n    super()\n\n    decorateElementWithDevtool(this, 'toggle', 'toggles')\n  }\n\n  connectedCallback() {\n    super.connectedCallback()\n\n    const { start: commandStartEvent } = TurboBoost.Commands.events\n    this.commandStartHandler = this.onCommandStart.bind(this)\n    this.addEventListener(commandStartEvent, this.commandStartHandler)\n\n    const { before: beforeInvokeEvent } = TurboBoost.Streams.invokeEvents\n    this.beforeInvokeHandler = this.onBeforeInvoke.bind(this)\n    addEventListener(beforeInvokeEvent, this.beforeInvokeHandler)\n\n    // fires after receiving the toggle morph Turbo Stream but before it is executed\n    // this.addEventListener(TurboBoost.Commands.events.success, event => {\n    //   // TODO: imlement cache, this.targetElement.cacheHTML()\n    // })\n\n    this.initializeDevtool()\n  }\n\n  disconnectedCallback() {\n    // delay cleanup because the trigger may have been morphed out of the DOM,\n    // but it's needed to apply behavior like focus etc...\n    setTimeout(() => {\n      const { start: commandStartEvent } = TurboBoost.Commands.events\n      this.removeEventListener(commandStartEvent, this.commandStartHandler)\n\n      const { before: beforeInvokeEvent } = TurboBoost.Streams.invokeEvents\n      removeEventListener(beforeInvokeEvent, this.beforeInvokeHandler)\n\n      this.removeDevtool()\n    }, 1000)\n  }\n\n  onCommandStart(event) {\n    currentFocusSelector = this.focusSelector\n    this.targetElement.labeledBy = this.id\n    this.targetElement.collapseMatches()\n    this.busy = true\n    // TODO: implement cache - this.targetElement.renderCachedHTML()\n  }\n\n  // runs before an invoke turbo stream is executed\n  onBeforeInvoke(event) {\n    // return early if we're not the element responsible for this invoke\n    if (event.detail.method !== 'morph') return\n    if (event.target.id !== this.morphs) return\n    const selector = `turbo-boost-toggle-target[aria-labeledby=\"${this.id}\"]`\n    if (!event.target.querySelector(selector)) return\n\n    // ensure the busy element is shown long enough for a good user experience\n    // we accomplish this by modifying the event.detail with invoke instructions i.e. { delay }\n    // SEE: the TurboBoost Streams library for details on how this works\n    const duration = Date.now() - this.busyStartedAt\n    let delay = busyDuration - duration\n    if (delay < 10) delay = 10\n    event.detail.invoke = { delay }\n\n    // runs before the morph is executed\n    setTimeout(() => {\n      this.busy = false\n      this.morphToggleTriggerElements.forEach(el => (el.busy = false))\n    }, delay - 10)\n\n    // runs after the morph is executed\n    setTimeout(() => focus(this.targetElement.querySelector(currentFocusSelector)), delay + 100)\n  }\n\n  // a list of views shared between the trigger and target\n  get sharedViews() {\n    if (!this.targetElement) return []\n    if (!this.targetElement.viewStack) return []\n    const reducer = (memo, view) => {\n      if (this.targetElement.viewStack.includes(view)) memo.push(view)\n      return memo\n    }\n    return this.viewStack.reduce(reducer.bind(this), [])\n  }\n\n  // the partial to render\n  get renders() {\n    return this.getAttribute('renders')\n  }\n\n  // the renderered partial's top wrapping dom_id\n  get morphs() {\n    return this.getAttribute('morphs')\n  }\n\n  // all toggle elements contained by the `morphElement`\n  get morphToggleTriggerElements() {\n    return Array.from(this.morphElement.querySelectorAll('turbo-boost-toggle-trigger'))\n  }\n\n  // the target's dom_id\n  get controls() {\n    return this.getAttribute('aria-controls')\n  }\n\n  get collapseSelector() {\n    return this.getAttribute('collapse-selector')\n  }\n\n  get focusSelector() {\n    return this.getAttribute('focus-selector') || this.targetElement.focusSelector\n  }\n\n  // indicates if the toggle state should be remembered across requests\n  get remember() {\n    return this.getAttribute('remember') === 'true'\n  }\n\n  set remember(value) {\n    return this.setAttribute('remember', !!value)\n  }\n\n  // indicates if the target is expanded\n  get expanded() {\n    return this.getAttribute('aria-expanded') === 'true'\n  }\n\n  set expanded(value) {\n    this.setAttribute('aria-expanded', !!value)\n  }\n\n  // indicates if the target is expanded\n  get collapsed() {\n    return !this.expanded\n  }\n\n  // ------ DevToolDelegate ------\n  get command() {\n    return this.dataset.turboCommand\n  }\n\n  get renderingLineLabel() {\n    return 'renders & morphs'\n  }\n\n  // the morph element\n  get morphElement() {\n    if (!this.morphs) return null\n    return document.getElementById(this.morphs)\n  }\n\n  // the target element\n  get targetElement() {\n    if (!this.controls) return null\n    return document.getElementById(this.controls)\n  }\n\n  get triggerTooltipData() {\n    let content = this.triggerElement.viewStack\n      .reverse()\n      .map((view, index) => {\n        return this.triggerElement.sharedViews.includes(view)\n          ? `<div slot=\"content\">${index + 1}. ${view}</div>`\n          : `<div slot=\"content-bottom\">${index + 1}. ${view}</div>`\n      }, this)\n      .join('')\n\n    return {\n      subtitle: `\n      <b>id</b>: ${this.triggerElement.id}<br>\n      <b>aria-controls</b>: ${this.triggerElement.controls}<br>\n      <b>aria-expanded</b>: ${this.triggerElement.expanded}<br>\n      <b>remember</b>: ${this.triggerElement.remember}<br>\n    `,\n      content: `\n      <div slot=\"content-top\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display:inline-block;\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"12 2 2 7 12 12 22 7 12 2\"></polygon><polyline points=\"2 17 12 22 22 17\"></polyline><polyline points=\"2 12 12 17 22 12\"></polyline></svg>\n        <b>View Stack</b>\n      </div>\n      ${content}\n    `\n    }\n  }\n\n  get targetTooltipData() {\n    let content = this.targetElement.viewStack\n      .reverse()\n      .map((view, index) => {\n        return this.triggerElement.sharedViews.includes(view)\n          ? `<div slot=\"content\">${index + 1}. ${view}</div>`\n          : `<div slot=\"content-bottom\">${index + 1}. ${view}</div>`\n      }, this)\n      .join('')\n\n    return {\n      subtitle: `<b>id</b>: ${this.targetElement.id}<br>\n      <b>aria-labeled-by</b>: ${this.targetElement.labeledBy}<br>\n`,\n      content: `\n      <div slot=\"content-top\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display:inline-block;\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"12 2 2 7 12 12 22 7 12 2\"></polygon><polyline points=\"2 17 12 22 22 17\"></polyline><polyline points=\"2 12 12 17 22 12\"></polyline></svg>\n        <b>View Stack</b>\n      </div>\n      ${content}\n    `\n    }\n  }\n}\n", "import TurboBoostElement from './turbo_boost_element'\nimport ToggleTargetElement from './toggle_elements/target_element'\nimport ToggleTriggerElement from './toggle_elements/trigger_element'\n\n// Valid custom element names: https://html.spec.whatwg.org/#valid-custom-element-name\n\ncustomElements.define('turbo-boost', TurboBoostElement)\ncustomElements.define('turbo-boost-toggle-target', ToggleTargetElement)\ncustomElements.define('turbo-boost-toggle-trigger', ToggleTriggerElement)\n", "// TurboBoost.Commands.logger.level = 'debug'\n\nTurboBoost.Commands.registerEventDelegate('debounced:keyup', [\n  'input[data-turbo-command][data-turbo-command-event=keyup]',\n])\n\nTurboBoost.Commands.registerEventDelegate('debounced:input', [\n  'input[data-turbo-command][data-turbo-command-event=input]',\n  'textarea[data-turbo-command][data-turbo-command-event=input]',\n])\n\nconst changeSelectors = [\n  'input[data-turbo-command]:not([data-turbo-command-event=keyup]):not([data-turbo-command-event=input])',\n  'select[data-turbo-command]:not([data-turbo-command-event=keyup]):not([data-turbo-command-event=input])',\n  'textarea[data-turbo-command]:not([data-turbo-command-event=keyup]):not([data-turbo-command-event=input])',\n  'wa-select[data-turbo-command]',\n]\n\n// One delegate per event: registering 'change' twice replaces the first selector list.\nTurboBoost.Commands.registerEventDelegate('change', changeSelectors)\n\ndocument.addEventListener('mouseover', (event) => {\n  const el = event.target.closest('[data-turbo-command]')\n  if (!el) return\n  if (!el.dataset.bubblingMouseEnterInitialized) {\n    el.dataset.bubblingMouseEnterInitialized = true\n    el.addEventListener('mouseleave', () => {\n      el.mouseAbove = false\n    })\n  }\n  if (el.mouseAbove) return\n  el.mouseAbove = true\n  el.dispatchEvent(new CustomEvent('mouseabove', { bubbles: true }))\n})\n\nTurboBoost.Commands.registerEventDelegate('mouseabove', [\n  'turbo-boost-toggle-trigger[data-event=\"mouseover\"][data-turbo-command]',\n])\n\nTurboBoost.Commands.registerEventDelegate('action-cable-context:refresh', ['meta[name=\"action-cable-context\"]'])\n", "import Rails from '@rails/ujs'\n\nRails.confirm = function (message, element) {\n  function dispatchEvent(opts) {\n    const event = document.createEvent('CustomEvent')\n    event.initCustomEvent('confirm-display', true, true, opts)\n    window.document.dispatchEvent(event)\n  }\n\n  let $element = $(element)\n\n  let title = $element.data('title') ? $element.data('title') : ''\n  let submit = $element.data('submit') ? $element.data('submit') : 'Proceed'\n  let back = $element.data('cancel') ? $element.data('cancel') : 'Cancel'\n  let type = $element.data('type') ? $element.data('type') : 'neutral'\n\n  const opts = {\n    title: title,\n    message: message,\n    type: type,\n    confirmButtonText: submit,\n    cancelButtonText: back,\n    originalElement: element,\n  }\n\n  dispatchEvent(opts)\n}\n", "window.Turbo.config.forms.confirm = (message, element, submitter) => {\n  /*\n    When using data-turbo-confirm on an anchor link,\n    submitter is undefined, leaving no way to access\n    the dataset on the element on which data-turbo-confirm is attached.\n    This is a work-around to infer the original anchor link that was clicked.\n  */\n  let originalElement = submitter || element\n\n  /* If submitter has been polyfilled as an INPUT tag by form-request-submit-polyfill */\n  /* https://github.com/hotwired/turbo/blob/main/src/polyfills/submit-event.ts */\n  if (!submitter || submitter.tagName == 'INPUT') {\n    let matchingElements = document.querySelectorAll(\n      `a[data-turbo-confirm=\"${CSS.escape(message)}\"][data-turbo-method=\"${element.getAttribute('method')}\"]`\n    )\n\n    const matchedElement = [...matchingElements].find((el) => {\n      let originalElementHrefWithoutParams = new URL(el.href).pathname\n      return element.action.includes(originalElementHrefWithoutParams)\n    })\n\n    if (matchedElement) {\n      originalElement = matchedElement\n    }\n  }\n\n  /* if the turbo-confirm is on a form element, we want to get the rest of the data attributes from the form element */\n  let elementWithDataAttributes = originalElement.dataset.turboConfirm ? originalElement : element\n\n  const {\n    type,\n    title,\n    turboConfirm: description,\n    cancel,\n    submit,\n    turboConfirmDetail: eventDetail,\n    guardPhrase,\n    htmlSafeDescription,\n    htmlSafeTitle,\n    initiator,\n    useIconButtons,\n  } = elementWithDataAttributes.dataset\n\n  let dialog = document.getElementById('turbo-confirm')\n\n  if (type) {\n    dialog.setAttribute('data-web-awesome--confirm-type-value', type)\n  }\n  if (title) {\n    dialog.setAttribute('data-web-awesome--confirm-title-value', title)\n  }\n  if (description) {\n    dialog.setAttribute('data-web-awesome--confirm-description-value', description)\n  }\n  if (cancel) {\n    dialog.setAttribute('data-web-awesome--confirm-cancel-value', cancel)\n  }\n  if (submit) {\n    dialog.setAttribute('data-web-awesome--confirm-submit-value', submit)\n  }\n  if (eventDetail) {\n    dialog.setAttribute('data-web-awesome--confirm-event-detail-value', eventDetail)\n  }\n  if (guardPhrase) {\n    dialog.setAttribute('data-web-awesome--confirm-guard-phrase-value', guardPhrase)\n  }\n  if (htmlSafeDescription) {\n    dialog.setAttribute('data-web-awesome--confirm-html-safe-description-value', htmlSafeDescription)\n  }\n  if (htmlSafeTitle) {\n    dialog.setAttribute('data-web-awesome--confirm-html-safe-title-value', htmlSafeTitle)\n  }\n  if (initiator) {\n    dialog.setAttribute('data-web-awesome--confirm-initiator-value', initiator)\n  }\n  if (useIconButtons) {\n    dialog.setAttribute('data-web-awesome--confirm-use-icon-buttons-value', useIconButtons)\n  }\n\n  dialog.open = true\n\n  return new Promise((resolve) => {\n    dialog.addEventListener(\n      'web-awesome--confirm:confirm',\n      (event) => {\n        const confirmed = event.detail.confirm\n        if (!confirmed) {\n          originalElement.disabled = false\n        }\n        resolve(confirmed)\n      },\n      { once: true }\n    )\n  })\n}\n", "import events from './events'\n\nlet prefix = 'debounced'\nconst initializedEvents = {}\n\nexport const debounce = (fn, options = {}) => {\n  const { wait } = options\n  let timeoutId\n  return (...args) => {\n    clearTimeout(timeoutId)\n    timeoutId = setTimeout(() => {\n      timeoutId = null\n      fn(...args)\n    }, wait)\n  }\n}\n\nconst dispatch = event => {\n  const { bubbles, cancelable, composed } = event\n  const debouncedEvent = new CustomEvent(`${prefix}:${event.type}`, {\n    bubbles,\n    cancelable,\n    composed,\n    detail: { originalEvent: event }\n  })\n  setTimeout(event.target.dispatchEvent(debouncedEvent))\n}\n\nexport const initializeEvent = (name, options = {}) => {\n  if (initializedEvents[name]) return\n  initializedEvents[name] = options || {}\n  const debouncedDispatch = debounce(dispatch, options)\n  document.addEventListener(name, event => debouncedDispatch(event))\n}\n\nconst initialize = (evts = events) => {\n  prefix = evts.prefix || prefix\n  delete evts.prefix\n  for (const [name, options] of Object.entries(evts)) {\n    initializeEvent(name, options)\n  }\n}\n\nexport default {\n  debounce,\n  events,\n  initialize,\n  initializeEvent,\n  initializedEvents\n}\n", "// All bubbling events\n// SEE: https://developer.mozilla.org/en-US/docs/Web/Events\n\nconst wait = 200 // the number of milliseconds to wait\n\nexport default {\n  DOMContentLoaded: { wait },\n  abort: { wait },\n  animationcancel: { wait },\n  animationend: { wait },\n  animationiteration: { wait },\n  animationstart: { wait },\n  auxclick: { wait },\n  change: { wait },\n  click: { wait },\n  compositionend: { wait },\n  compositionstart: { wait },\n  compositionupdate: { wait },\n  contextmenu: { wait },\n  copy: { wait },\n  cut: { wait },\n  dblclick: { wait },\n  drag: { wait },\n  dragend: { wait },\n  dragenter: { wait },\n  dragleave: { wait },\n  dragover: { wait },\n  dragstart: { wait },\n  drop: { wait },\n  error: { wait },\n  focusin: { wait },\n  focusout: { wait },\n  fullscreenchange: { wait },\n  fullscreenerror: { wait },\n  hashchange: { wait },\n  input: { wait },\n  keydown: { wait },\n  keyup: { wait },\n  mousedown: { wait },\n  mousemove: { wait },\n  mouseout: { wait },\n  mouseover: { wait },\n  mouseup: { wait },\n  paste: { wait },\n  pointercancel: { wait },\n  pointerdown: { wait },\n  pointerlockchange: { wait },\n  pointerlockerror: { wait },\n  pointermove: { wait },\n  pointerout: { wait },\n  pointerover: { wait },\n  pointerup: { wait },\n  popstate: { wait },\n  reset: { wait },\n  scroll: { wait },\n  select: { wait },\n  submit: { wait },\n  touchcancel: { wait },\n  touchend: { wait },\n  touchmove: { wait },\n  touchstart: { wait },\n  transitioncancel: { wait },\n  transitionend: { wait },\n  transitionrun: { wait },\n  transitionstart: { wait },\n  visibilitychange: { wait },\n  wheel: { wait }\n}\n"],
  "mappings": "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ACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,QAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,QAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,QAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,QAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,QAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,QAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,QAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,QAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,QAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,QAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU;AAAA,c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",
  "names": ["module", "global", "w", "window", "isFunction", "isWindow", "document", "doc", "i", "version", "jQuery", "context", "callback", "j", "name", "copy", "clone", "arr", "_i", "support", "tokenize", "contains", "a", "b", "hasOwn", "push", "slice", "indexOf", "rtrim", "rhtml", "rquickExpr", "escape", "e", "Sizzle", "m", "cache", "fn", "matches", "docElem", "node", "elements", "nodeName", "start", "dir", "hash", "skip", "map", "isXML", "n", "elem", "self", "init", "l", "_", "add", "index", "v", "resolve", "value", "deferred", "process", "error", "wait", "data", "defer", "div", "scripts", "on", "event", "t", "expectSync", "handle", "remove", "swap", "tr", "prefix", "end", "p", "Animation", "length", "to", "max", "location", "s", "val", "ct", "response", "completed", "offset", "top", "method", "type", "jquery", "module", "context", "Rails", "m", "$", "param", "CustomEvent", "event", "name", "e", "response", "error", "callback", "module", "global", "exports", "fn", "undefined", "x", "k", "a", "b", "c", "d", "s", "i", "n", "hi", "j", "hex", "clamp", "from", "to", "end", "hash", "FileChecksum", "callback", "event", "start", "name", "elements", "BlobRecord", "response", "BlobUpload", "DirectUpload", "error", "DirectUploadController", "dispatch", "DirectUploadsController", "controllers", "startNextController", "module", "undefined", "i", "c", "_classCallCheck", "_defineProperties", "_createClass", "id", "defaults", "forEachProp", "callback", "forEachInstance", "Iti", "resolve", "index", "a", "b", "_i", "j", "k", "name", "e", "max", "s", "format", "prefix", "start", "destroy", "getExtension", "injectScript", "module", "module", "jQuery", "S2", "require", "define", "main", "defined", "config", "name", "i", "j", "map", "prefix", "index", "e", "callback", "$", "m", "decoratedMethod", "d", "event", "context", "k", "id", "sorter", "self", "s", "c", "top", "bottom", "template", "_", "val", "defaults", "item", "request", "t", "params", "$e", "offset", "viewport", "Defaults", "l", "a", "n", "evt", "e", "n", "r", "e", "n", "r", "e", "r", "n", "n", "forEvents", "events", "callback", "split", "forEach", "event", "MicroEvent", "constructor", "_events", "on", "fct", "event_array", "push", "off", "n", "arguments", "length", "undefined", "splice", "indexOf", "trigger", "args", "self", "apply", "MicroPlugin", "Interface", "plugins", "names", "settings", "requested", "loaded", "define", "name", "fn", "initializePlugins", "key", "queue", "Array", "isArray", "plugin", "options", "hasOwnProperty", "shift", "require", "loadPlugin", "Error", "i", "p", "start", "initialize", "code_points", "unicode_map", "set", "a", "b", "j", "clone", "iterate", "words", "get_field", "s", "_", "object", "getDom", "query", "jquery", "HTMLElement", "isHtmlString", "tpl", "document", "createElement", "innerHTML", "trim", "content", "firstChild", "querySelector", "arg", "escapeQuery", "replace", "triggerEvent", "dom_el", "event_name", "createEvent", "initEvent", "dispatchEvent", "applyCSS", "css", "Object", "assign", "style", "addClasses", "elmts", "classes", "norm_classes", "classesArray", "castAsArray", "map", "el", "cls", "classList", "add", "removeClasses", "remove", "_classes", "concat", "filter", "Boolean", "parentMatch", "target", "selector", "wrapper", "contains", "matches", "parentNode", "getTail", "list", "direction", "isEmptyObject", "obj", "keys", "nodeIndex", "amongst", "nodeName", "previousElementSibling", "setAttr", "attrs", "val", "attr", "removeAttribute", "setAttribute", "replaceNode", "existing", "replacement", "replaceChild", "highlight", "element", "regex", "RegExp", "highlightText", "node", "match", "data", "spannode", "className", "middlebit", "splitText", "index", "middleclone", "cloneNode", "appendChild", "highlightChildren", "nodeType", "childNodes", "test", "tagName", "from", "highlightRecursive", "removeHighlight", "elements", "querySelectorAll", "prototype", "call", "parent", "normalize", "KEY_A", "KEY_RETURN", "KEY_ESC", "KEY_LEFT", "KEY_UP", "KEY_RIGHT", "KEY_DOWN", "KEY_BACKSPACE", "KEY_DELETE", "KEY_TAB", "IS_MAC", "navigator", "userAgent", "KEY_SHORTCUT", "defaults", "optgroups", "delimiter", "splitOn", "persist", "diacritics", "create", "createOnBlur", "createFilter", "openOnFocus", "shouldOpen", "maxOptions", "maxItems", "hideSelected", "duplicates", "addPrecedence", "selectOnTab", "preload", "allowEmptyOption", "refreshThrottle", "loadThrottle", "loadingClass", "dataAttr", "optgroupField", "valueField", "labelField", "disabledField", "optgroupLabelField", "optgroupValueField", "lockOptgroupOrder", "sortField", "searchField", "searchConjunction", "mode", "wrapperClass", "controlClass", "dropdownClass", "dropdownContentClass", "itemClass", "optionClass", "dropdownParent", "controlInput", "copyClassesToDropdown", "placeholder", "hidePlaceholder", "shouldLoad", "render", "hash_key", "value", "get_hash", "escape_html", "str", "timeout", "setTimeout", "loadDebounce", "delay", "loading", "Math", "max", "clearTimeout", "loadedSearches", "debounce_events", "types", "type", "event_args", "getSelection", "input", "selectionStart", "selectionEnd", "preventDefault", "evt", "stop", "stopPropagation", "addEvent", "addEventListener", "isKeyDown", "key_name", "count", "altKey", "ctrlKey", "shiftKey", "metaKey", "getId", "id", "existing_id", "getAttribute", "addSlashes", "append", "getSettings", "settings_user", "attr_data", "field_label", "field_value", "field_disabled", "field_optgroup", "field_optgroup_label", "field_optgroup_value", "tag_name", "toLowerCase", "option", "textContent", "settings_element", "items", "init_select", "optionsMap", "group_count", "$order", "readData", "dataset", "json", "JSON", "parse", "addOption", "group", "arr", "option_data", "disabled", "$option", "selected", "addGroup", "optgroup", "optgroup_data", "children", "hasAttribute", "child", "init_textbox", "data_raw", "values", "opt", "instance_i", "TomSelect", "input_arg", "user_settings", "control_input", "dropdown", "control", "dropdown_content", "focus_node", "order", "tabIndex", "is_select_tag", "rtl", "inputId", "_destroy", "sifter", "isOpen", "isDisabled", "isReadOnly", "isRequired", "isInvalid", "isValid", "isLocked", "isFocused", "isInputHidden", "isSetup", "ignoreFocus", "ignoreHover", "hasOptions", "currentResults", "lastValue", "caretPos", "activeOption", "activeItems", "userOptions", "refreshTimeout", "dir", "tomselect", "computedStyle", "window", "getComputedStyle", "getPropertyValue", "required", "Sifter", "setupCallbacks", "setupTemplates", "_render", "inputMode", "setup", "passive_event", "passive", "listboxId", "role", "control_id", "label", "label_click", "focus", "bind", "for", "label_id", "width", "classes_plugins", "join", "multiple", "escape_regex", "load", "e", "target_match", "onOptionHover", "capture", "onOptionSelect", "onItemSelect", "onClick", "onKeyDown", "onKeyPress", "onInput", "onBlur", "onFocus", "onPaste", "doc_mousedown", "composedPath", "blur", "inputState", "win_scroll", "positionDropdown", "removeEventListener", "revertSettings", "insertAdjacentElement", "sync", "refreshState", "updateOriginalInput", "refreshItems", "close", "disable", "readOnly", "setReadOnly", "enable", "onChange", "setupOptions", "addOptions", "registerOptionGroup", "templates", "optgroup_header", "escape", "item", "option_create", "no_results", "not_loading", "callbacks", "get_settings", "setValue", "lastQuery", "clearActiveItems", "onMouseDown", "pastedText", "inputValue", "splitInput", "piece", "hash", "addItem", "createItem", "character", "String", "fromCharCode", "keyCode", "which", "constants", "selectAll", "open", "next", "getAdjacent", "setActiveOption", "prev", "canSelect", "activeElement", "advanceSelection", "deleteSelection", "_onInput", "refreshOptions", "wasFocused", "hasFocus", "deactivate", "setActiveItem", "setCaret", "parentElement", "closeAfterSelect", "canLoad", "loadCallback", "clearActiveOption", "setTextboxValue", "changed", "getValue", "silent", "clear", "addItems", "setMaxItems", "eventName", "begin", "end", "swap", "last", "getLastActive", "setActiveItemClass", "removeActiveItem", "last_active", "idx", "scroll", "scrollToOption", "behavior", "height_menu", "clientHeight", "scrollTop", "height_item", "offsetHeight", "y", "getBoundingClientRect", "top", "scrollBehavior", "controlChildren", "toggle", "offsetWidth", "getScoreFunction", "getSearchOptions", "sort", "field", "fields", "conjunction", "nesting", "search", "result", "calculateScore", "score", "hashed", "triggerDropdown", "k", "html", "has_create_option", "active_group", "groups", "groups_order", "same_query", "results", "active_option", "show_dropdown", "closest", "min", "getGroupFragment", "group_order_i", "order_group", "fragment", "group_fragment", "createDocumentFragment", "opt_value", "opt_hash", "option_el", "getOption", "includes", "self_optgroup", "$id", "toString", "group_order", "group_heading", "group_options", "header", "group_html", "tokens", "tok", "add_template", "template", "insertBefore", "canCreate", "active_index", "selectable", "user_created", "dat", "registerOption", "addOptionGroup", "hashed_id", "removeOptionGroup", "clearCache", "clearOptionGroups", "updateOption", "item_new", "index_item", "value_old", "value_new", "data_old", "getItem", "uncacheValue", "option_new", "removeOption", "removeItem", "clearOptions", "boundFilter", "clearFilter", "$div", "all", "x", "last_item", "isPending", "wasFull", "isFull", "insertAtCaret", "caret", "output", "lock", "created", "unlock", "refreshValidityState", "wrap_classList", "validity", "valid", "opts", "empty_option", "AddSelected", "has_selected", "reuse_opt", "visibility", "display", "context", "rect", "scrollY", "left", "scrollX", "selection", "tail", "rm_items", "rm_item", "shouldDelete", "pop", "onDelete", "adjacent", "nextElementSibling", "moveCaret", "new_pos", "setLocked", "setDisabled", "destroy", "templateName", "hook", "when", "method", "new_fn", "orig_method", "result_new", "orig_onOptionSelect", "cbOptions", "checkedClassNames", "uncheckedClassNames", "UpdateChecked", "checkbox", "toCheck", "checked", "UpdateCheckbox", "HTMLInputElement", "orig_render_option", "rendered", "prepend", "title", "button", "insertAfter", "referenceNode", "newNode", "_referenceNode$parent", "nextSibling", "_referenceNode$parent2", "isBefore", "_newNode", "orig_lock", "orig_unlock", "sortable", "drag_item", "orig_render_item", "mousedown", "dragStart", "dragOver", "moveitem", "dragLeave", "targetitem", "dragitem", "dragend", "_drag_item", "headerClass", "titleRowClass", "labelClass", "closeClass", "close_link", "div", "orig_onBlur", "relatedTarget", "preventScroll", "test_input", "cssText", "transfer_styles", "style_name", "resize", "clientWidth", "orig_deleteSelection", "orig_keydown", "previousSibling", "close_button", "text", "orig_canLoad", "orig_clearActiveOption", "orig_loadCallback", "pagination", "loading_more", "load_more_opt", "default_values", "shouldLoadMore", "scroll_percent", "scrollHeight", "firstUrl", "canLoadMore", "setNextUrl", "next_url", "getUrl", "clearPagination", "first_option", "no_more_results", "change_listener", "checkbox_options", "clear_button", "drag_drop", "dropdown_header", "caret_position", "dropdown_input", "input_autogrow", "no_backspace_delete", "no_active_items", "optgroup_columns", "remove_button", "restore_on_backspace", "virtual_scroll", "Array", "prototype", "find", "predicate", "this", "TypeError", "value", "list", "Object", "length", "thisArg", "arguments", "i", "call", "window", "CustomEvent", "event", "params", "bubbles", "cancelable", "detail", "undefined", "evt", "document", "createEvent", "initCustomEvent", "Event", "TributeEvents", "tribute", "events", "element", "boundKeydown", "keydown", "bind", "boundKeyup", "keyup", "boundInput", "input", "addEventListener", "removeEventListener", "instance", "shouldDeactivate", "isActive", "hideMenu", "commandEvent", "keys", "forEach", "o", "key", "keyCode", "callbacks", "toLowerCase", "inputEvent", "menu", "contains", "target", "li", "preventDefault", "stopPropagation", "nodeName", "parentNode", "Error", "selectItemAtIndex", "getAttribute", "current", "externalTrigger", "setTimeout", "updateSelection", "allowSpaces", "hasTrailingSpace", "autocompleteMode", "triggerChar", "getKeyCode", "isNaN", "trigger", "triggers", "charCodeAt", "mentionText", "collection", "menuShowMinLength", "showMenuFor", "eventKeyPressed", "el", "info", "range", "getTriggerInfo", "mentionTriggerChar", "selectedPath", "mentionSelectedPath", "selectedOffset", "mentionSelectedOffset", "e", "_this", "collectionItem", "item", "enter", "filteredItems", "menuSelected", "escape", "tab", "space", "spaceSelectsMatch", "up", "count", "selected", "setActiveLi", "scrollTop", "scrollHeight", "down", "index", "lis", "querySelectorAll", "parseInt", "classList", "add", "selectClass", "liClientRect", "getBoundingClientRect", "menuClientRect", "bottom", "scrollDistance", "top", "remove", "elem", "includeMargin", "height", "style", "currentStyle", "getComputedStyle", "parseFloat", "marginTop", "marginBottom", "t", "TributeMenuEvents", "menuEvents", "menuClickEvent", "click", "menuContainerScrollEvent", "debounce", "windowResizeEvent", "positionMenuAtCaret", "getDocument", "menuContainer", "func", "wait", "immediate", "timeout", "context", "_this2", "args", "callNow", "clearTimeout", "apply", "TributeRange", "iframe", "contentWindow", "scrollTo", "coordinates", "positionMenu", "cssText", "isContentEditable", "getContentEditableCaretPosition", "mentionPosition", "getTextAreaOrInputUnderlinePosition", "left", "right", "scrollIntoView", "menuDimensions", "width", "offsetWidth", "offsetHeight", "menuIsOffScreen", "isMenuOffScreen", "menuIsOffScreenHorizontally", "innerWidth", "menuIsOffScreenVertically", "innerHeight", "targetElement", "path", "offset", "childNodes", "nextSibling", "previousSibling", "sel", "getWindowSelection", "createRange", "setStart", "setEnd", "collapse", "removeAllRanges", "error", "addRange", "focus", "text", "requireLeadingSpace", "originalEvent", "replaceEvent", "replaceTextSuffix", "endPos", "pasteHtml", "myField", "textSuffix", "startPos", "substring", "selectionStart", "selectionEnd", "dispatchEvent", "html", "anchorNode", "deleteContents", "createElement", "innerHTML", "node", "lastNode", "frag", "createDocumentFragment", "firstChild", "appendChild", "insertNode", "cloneRange", "setStartAfter", "getSelection", "ctx", "ce", "contentEditable", "getNodePositionInParent", "push", "reverse", "getRangeAt", "startOffset", "selectedElem", "workingNodeContent", "textContent", "selectStartOffset", "textComponent", "wordsArray", "replace", "split", "trim", "menuAlreadyActive", "isAutocomplete", "selectionInfo", "getContentEditableSelectedPath", "effectiveRange", "getTextPrecedingCurrentSelection", "lastWordOfEffectiveRange", "getLastWordInText", "mentionSelectedElement", "mostRecentTriggerCharPos", "config", "c", "idx", "lastIndexWithLeadingSpace", "lastIndexOf", "test", "currentTriggerSnippet", "firstSnippetChar", "leadingSpace", "regex", "str", "reversedStr", "join", "cidx", "len", "firstChar", "match", "triggerIdx", "windowWidth", "windowHeight", "doc", "documentElement", "windowLeft", "pageXOffset", "scrollLeft", "clientLeft", "windowTop", "pageYOffset", "clientTop", "menuTop", "menuRight", "menuBottom", "menuLeft", "Math", "floor", "ceil", "dimensions", "position", "flipped", "isFirefox", "mozInnerScreenX", "div", "id", "body", "computed", "whiteSpace", "wordWrap", "visibility", "prop", "overflowY", "overflow", "span", "rect", "menuContainerIsBody", "offsetTop", "borderTopWidth", "fontSize", "offsetLeft", "borderLeftWidth", "getMenuDimensions", "parentHeight", "scrollStillAvailable", "removeChild", "selectedNodePosition", "clientRect", "elemTop", "elemBottom", "maxY", "targetY", "TributeSearch", "search", "pattern", "array", "filter", "string", "opts", "pre", "post", "compareString", "caseSensitive", "skip", "rendered", "score", "patternCache", "traverse", "render", "cache", "stringIndex", "patternIndex", "calculateScore", "slice", "best", "temp", "indexOf", "pop", "indices", "arr", "reduce", "prev", "extract", "original", "sort", "a", "b", "compare", "values", "h", "n", "f", "p", "containerClass", "g", "itemClass", "y", "T", "selectTemplate", "S", "k", "menuItemTemplate", "M", "lookup", "L", "fillAttr", "N", "D", "R", "noMatchTemplate", "H", "j", "z", "searchOpts", "X", "V", "menuItemLimit", "J", "Tribute", "defaultSelectTemplate", "defaultMenuItemTemplate", "console", "warn", "map", "jQuery", "get", "constructor", "NodeList", "HTMLCollection", "_attach", "hasAttribute", "ensureEditable", "setAttribute", "inputTypes", "wrapper", "ul", "className", "currentMentionTextSnapshot", "createMenu", "tributeMenu", "processValues", "items", "querySelector", "noMatchEvent", "fragment", "_findLiTarget", "movementY", "collectionIndex", "activeElement", "placeCaretAtEnd", "insertTextAtCursor", "insertAtCaret", "selectNodeContents", "createTextRange", "textRange", "moveToElementText", "select", "textNode", "createTextNode", "textarea", "scrollPos", "caretPos", "front", "back", "content", "replaceText", "replaceTriggerText", "newValues", "concat", "_append", "_detach", "unbind", "removeAttribute", "_this3", "_isActive", "val", "matchItem", "module", "e", "n", "index", "hasOwnProperty", "uid", "Buffer", "Symbol", "Uint8Array", "Map", "isObject", "size", "isArray", "isType", "eq", "isFunction", "start", "identity", "map", "merge", "module", "global", "e", "r", "t", "o", "_defineProperty", "i", "_typeof", "_classCallCheck", "_defineProperties", "_createClass", "n", "isNaN", "isNumber", "isPositiveNumber", "isObject", "hasOwnProperty", "error", "isFunction", "callback", "assign", "setStyle", "name", "listener", "get", "set", "removeListener", "event", "addListener", "location", "rotate", "x2", "y2", "z2", "end", "context", "param", "start", "offset", "render", "initCanvas", "output", "preview", "left", "top", "change", "right", "bottom", "range", "check", "p", "destroy", "x", "y", "getData", "setData", "Cropper", "init", "clone", "read", "done", "template", "require_lodash", "module", "undefined", "INFINITY", "e", "index", "offset", "collection", "n", "cache", "map", "set", "runInContext", "context", "_", "Array", "Date", "Error", "Function", "Math", "Object", "RegExp", "String", "TypeError", "hasOwnProperty", "idCounter", "uid", "Buffer", "Symbol", "Uint8Array", "DataView", "Map", "Promise", "Set", "WeakMap", "isArray", "isObject", "result", "start", "end", "iteratee", "size", "values", "isType", "eq", "skip", "get", "key", "wait", "setTimeout", "includes", "isFunction", "object", "identity", "indexOf", "clearTimeout", "order", "fn", "createCompounder", "callback", "words", "ary", "noop", "othValue", "transform", "reference", "compact", "fill", "remove", "zip", "parent", "clone", "sample", "now", "after", "before", "debounce", "cancel", "defer", "flip", "gt", "isElement", "isFinite", "isNaN", "isNumber", "lt", "sign", "assign", "at", "defaults", "merge", "clamp", "inRange", "capitalize", "escape", "parseInt", "template", "interpolate", "unescape", "chain", "range", "prefix", "add", "floor", "max", "min", "round", "value", "module", "window", "l", "document", "Date", "addEventListener", "setTimeout", "requestAnimationFrame", "fn", "add", "name", "event", "debounce", "wait", "e", "i", "loadMode", "init", "module", "jstz", "get_date_offset", "offset", "lookup_key", "get_from_internationalization_api", "format", "dst_dates", "find_dst_fold", "sample", "best_dst_match", "score_sample", "score", "j", "i", "get_by_dst", "get_rules", "check_has_dst", "rules", "determine", "require_jstz", "module", "import_ujs", "i", "d", "template", "name", "morphAttrs", "morphdom", "childrenOnly", "morphChildren", "name", "init", "event", "i", "names", "callback", "index", "fn", "response", "e", "template", "operations", "resolve", "consumer", "b", "_", "global", "name", "template", "dispatch", "event", "resolve", "i", "_", "elements", "callback", "before", "after", "debounce", "fn", "submitter", "config", "prefix", "location", "left", "right", "response", "error", "AppearanceObserver", "size", "toCacheKey", "index", "request", "cookie", "x", "y", "isPreview", "clone", "defaults", "ctx", "morphChildren", "activeElement", "createNode", "findBestMatch", "e", "morphNode", "_resolve", "createMorphContext", "normalizeElement", "normalizeParent", "render", "session", "visit", "recentRequests", "navigator", "Turbo", "findFrameElement_fn", "document", "c", "event", "submitter", "submitter", "name", "fn", "$", "whenDefined", "MutationObserver", "attributeChanged", "i", "dispatch", "_ref", "is", "add", "notify", "callback", "loop", "elements", "drop", "flush", "parse", "matches", "notifier", "q", "m", "query", "attachShadow", "init", "Map", "WeakMap", "Element", "HTMLElement", "Node", "Error", "TypeError", "Reflect", "expando", "_i", "HTMLBuiltIn", "defined", "registry", "handle", "name", "_", "define", "get", "LI", "parseShadow", "customElements", "construct", "getCE", "_handle", "_whenDefined2", "k", "event", "i", "error", "k", "v", "e", "event", "callback", "resolve", "resolve", "top", "event", "left", "_e", "resolve", "offset", "resolve", "STATE", "name", "event", "callback", "resolve", "now", "left", "right", "i", "e", "event", "callback", "format", "resolve", "event", "callback", "callback", "Monitor", "event", "doc", "prefix", "createCable", "Monitor", "createConsumer", "metaPrefixes", "defaultUrl", "fetchMeta", "doc", "prefix", "absoluteWSUrl", "generateUrlFromDOM", "event", "createConsumer", "consumer", "m", "x", "event", "start", "C", "event", "createSubscription", "consumer", "subscriptions", "create", "connected", "window", "Futurism", "this", "document", "addEventListener", "callback", "delay", "timeoutId", "events", "args", "clearTimeout", "setTimeout", "send", "signed_params", "map", "e", "target", "dataset", "signedParams", "sgids", "sgid", "signed_controllers", "signedController", "urls", "_", "location", "href", "broadcast_each", "broadcastEach", "received", "data", "cableReady", "CableReady", "perform", "operations", "emitMissingElementWarnings", "dispatchEvent", "CustomEvent", "bubbles", "cancelable", "dispatchAppearEvent", "entry", "observer", "evt", "detail", "callWithRetry", "async", "fn", "depth", "ms", "Promise", "resolve", "observerCallback", "entries", "forEach", "isIntersecting", "extendElementWithIntersectionObserver", "element", "Object", "assign", "IntersectionObserver", "bind", "hasAttribute", "observe", "extendElementWithEagerLoading", "eager", "disconnect", "FuturismElement", "HTMLElement", "connectedCallback", "FuturismTableRow", "HTMLTableRowElement", "FuturismLI", "HTMLLIElement", "defineElements", "customElements", "get", "define", "extends", "cachePlaceholders", "message", "msgBuffer", "TextEncoder", "encode", "hashBuffer", "crypto", "subtle", "digest", "Array", "from", "Uint8Array", "b", "toString", "slice", "join", "outerHTML", "then", "hashedContent", "setAttribute", "sessionStorage", "setItem", "futurismHash", "restorePlaceholders", "filter", "key", "_payload", "startsWith", "payload", "match", "exec", "targetElement", "querySelector", "removeItem", "initializeElements", "isSafari", "test", "navigator", "userAgent", "write", "createElement", "constructor", "polyfillCustomElements", "global", "event", "extendedEvent", "left", "right", "application", "map", "error", "_", "index", "name", "shift", "e", "context", "callback", "add", "fetch", "sets", "set", "size", "callback", "match", "oldValue", "index", "left", "right", "_", "error", "context", "name", "descriptors", "_a", "constructor", "dependencies", "module", "a", "b", "application", "elements", "element", "c", "n", "k", "v", "resolve", "read", "write", "prefix", "event", "error", "context", "event", "range", "event", "start", "main", "name", "style", "getComputedStyle", "getComputedStyle", "isIE", "window", "round", "min", "max", "toPaddingObject", "name", "popperOffsets", "min", "max", "offset", "effect", "x", "y", "round", "popper", "getComputedStyle", "effect", "window", "hash", "x", "y", "x", "y", "getComputedStyle", "getComputedStyle", "clippingParents", "getComputedStyle", "reference", "start", "popperOffsets", "offset", "placements", "placement", "a", "b", "name", "placements", "placement", "i", "start", "_loop", "_i", "checks", "name", "offset", "name", "x", "y", "name", "name", "popperOffsets", "offset", "min", "max", "start", "map", "debounce", "fn", "resolve", "p", "c", "s", "fn", "merged", "DEFAULT_OPTIONS", "defaultModifiers", "defaultOptions", "createPopper", "reference", "popper", "options", "m", "name", "getComputedStyle", "index", "fn", "debounce", "resolve", "destroy", "state", "effect", "noopFn", "BOX_CLASS", "CONTENT_CLASS", "BACKDROP_CLASS", "ARROW_CLASS", "SVG_ARROW_CLASS", "TOUCH_OPTIONS", "passive", "capture", "hasOwnProperty", "obj", "key", "call", "getValueAtIndexOrReturn", "value", "index", "defaultValue", "Array", "isArray", "v", "isType", "type", "str", "toString", "indexOf", "invokeWithArgsOrReturn", "args", "debounce", "fn", "ms", "timeout", "arg", "clearTimeout", "setTimeout", "removeProperties", "keys", "clone", "forEach", "splitBySpaces", "split", "filter", "Boolean", "normalizeToArray", "concat", "pushIfUnique", "arr", "push", "unique", "item", "getBasePlacement", "placement", "arrayFrom", "slice", "removeUndefinedProps", "Object", "reduce", "acc", "undefined", "div", "document", "createElement", "isElement", "some", "isNodeList", "isMouseEvent", "isReferenceElement", "_tippy", "reference", "getArrayOfElements", "querySelectorAll", "setTransitionDuration", "els", "el", "style", "transitionDuration", "setVisibilityState", "state", "setAttribute", "getOwnerDocument", "elementOrElements", "element", "ownerDocument", "body", "isCursorOutsideInteractiveBorder", "popperTreeData", "event", "clientX", "clientY", "every", "popperRect", "popperState", "props", "interactiveBorder", "basePlacement", "offsetData", "modifiersData", "offset", "topDistance", "top", "y", "bottomDistance", "bottom", "leftDistance", "left", "x", "rightDistance", "right", "exceedsTop", "exceedsBottom", "exceedsLeft", "exceedsRight", "updateTransitionEndListener", "box", "action", "listener", "method", "currentInput", "isTouch", "lastMouseMoveTime", "onDocumentTouchStart", "window", "performance", "addEventListener", "onDocumentMouseMove", "now", "removeEventListener", "onWindowBlur", "activeElement", "instance", "blur", "isVisible", "bindGlobalEventListeners", "isBrowser", "ua", "navigator", "userAgent", "isIE", "test", "createMemoryLeakWarning", "txt", "join", "clean", "spacesAndTabs", "lineStartWithSpaces", "replace", "trim", "getDevMessage", "message", "getFormattedMessage", "visitedMessages", "resetVisitedMessages", "Set", "warnWhen", "condition", "has", "add", "console", "warn", "errorWhen", "error", "validateTargets", "targets", "didPassFalsyValue", "didPassPlainObject", "prototype", "String", "pluginProps", "animateFill", "followCursor", "inlinePositioning", "sticky", "renderProps", "allowHTML", "animation", "arrow", "content", "inertia", "maxWidth", "role", "theme", "zIndex", "defaultProps", "appendTo", "aria", "expanded", "delay", "duration", "getReferenceClientRect", "hideOnClick", "ignoreAttributes", "interactive", "interactiveDebounce", "moveTransition", "onAfterUpdate", "onBeforeUpdate", "onCreate", "onDestroy", "onHidden", "onHide", "onMount", "onShow", "onShown", "onTrigger", "onUntrigger", "onClickOutside", "plugins", "popperOptions", "render", "showOnCreate", "touch", "trigger", "triggerTarget", "defaultKeys", "setDefaultProps", "partialProps", "validateProps", "getExtendedPassedProps", "passedProps", "plugin", "name", "getDataAttributeProps", "propKeys", "valueAsString", "getAttribute", "JSON", "parse", "e", "evaluateProps", "out", "prop", "nonPluginProps", "didPassUnknownProp", "length", "innerHTML", "dangerouslySetInnerHTML", "html", "createArrowElement", "className", "appendChild", "setContent", "textContent", "getChildren", "popper", "firstElementChild", "boxChildren", "children", "find", "node", "classList", "contains", "backdrop", "onUpdate", "prevProps", "nextProps", "removeAttribute", "removeChild", "$$tippy", "idCounter", "mouseMoveListeners", "mountedInstances", "createTippy", "showTimeout", "hideTimeout", "scheduleHideAnimationFrame", "isVisibleFromClick", "didHideDueToDocumentMouseDown", "didTouchMove", "ignoreOnFirstUpdate", "lastTriggerEvent", "currentTransitionEndListener", "onFirstUpdate", "listeners", "debouncedOnMouseMove", "onMouseMove", "currentTarget", "id", "popperInstance", "isEnabled", "isDestroyed", "isMounted", "isShown", "clearDelayTimeouts", "setProps", "show", "hide", "hideWithInteractivity", "enable", "disable", "unmount", "destroy", "pluginsHooks", "map", "hasAriaExpanded", "hasAttribute", "addListeners", "handleAriaExpandedAttribute", "handleStyles", "invokeHook", "scheduleShow", "getDocument", "getNormalizedTouchSettings", "getIsCustomTouchBehavior", "getIsDefaultRenderFn", "getCurrentTarget", "parent", "parentNode", "getDefaultTemplateChildren", "getDelay", "isShow", "pointerEvents", "hook", "shouldInvokePropsHook", "pluginHooks", "handleAriaContentAttribute", "attr", "nodes", "currentValue", "nextValue", "cleanupInteractiveMouseListeners", "onDocumentPress", "target", "removeDocumentPress", "onTouchMove", "onTouchStart", "addDocumentPress", "doc", "onTransitionedOut", "callback", "onTransitionEnd", "onTransitionedIn", "on", "eventType", "handler", "options", "onMouseLeave", "onBlurOrFocusOut", "removeListeners", "shouldScheduleClickHide", "isEventListenerStopped", "wasFocused", "scheduleHide", "isCursorOverReferenceOrPopper", "getNestedPopperTree", "getBoundingClientRect", "shouldBail", "relatedTarget", "createPopperInstance", "destroyPopperInstance", "computedReference", "contextElement", "tippyModifier", "enabled", "phase", "requires", "attributes", "modifiers", "padding", "adaptive", "createPopper", "mount", "nextElementSibling", "touchValue", "touchDelay", "requestAnimationFrame", "cancelAnimationFrame", "nestedPopper", "forceUpdate", "isAlreadyVisible", "isDisabled", "isTouchAndTouchDisabled", "visibility", "transition", "offsetHeight", "isAlreadyHidden", "i", "tippy", "optionalProps", "elements", "isSingleContentElement", "isMoreThanOneReferenceElement", "instances", "applyStylesModifier", "applyStyles", "effect", "state", "initialStyles", "popper", "position", "options", "strategy", "left", "top", "margin", "arrow", "reference", "Object", "assign", "elements", "style", "styles", "tippy", "setDefaultProps", "render", "o", "t", "r", "e", "i", "t", "i", "e", "r", "t", "e", "r", "t", "o", "a", "n", "e", "r", "t", "o", "e", "t", "e", "t", "t", "e", "t", "e", "error", "Logger", "init", "log", "warn", "prefix", "EventEmitter", "on", "event", "l", "resolve", "copy", "a", "s", "t", "m", "key", "k", "escape", "ResourceStore", "index", "module", "Translator", "i", "send", "capitalize", "LanguageUtil", "p", "addCode", "c", "n", "_", "set", "PluralResolver", "returnSuffix", "Interpolator", "interpolate", "handleFormat", "f", "e", "formatters", "r", "v", "Connector", "callback", "name", "loaded", "q", "ns", "read", "wait", "handle", "format", "noop", "I18n", "load", "finish", "append", "done", "setLng", "fixedT", "loadNotPending", "clone", "i", "set", "name", "get", "converter", "c", "name", "event", "intlTelInput", "name", "event", "event", "FetchResponse", "response", "name", "prefix", "cookie", "metaContent", "FetchRequest", "error", "response", "FetchResponse", "_", "metaContent", "get", "request", "FetchRequest", "request", "FetchRequest", "resolve", "event", "response", "error", "e", "error", "request", "FetchRequest", "response", "event", "response", "config", "event", "e", "error", "event", "get", "event", "event", "userAgent", "event", "event", "e", "import_jquery", "$", "r", "template", "event", "name", "event", "defaultOptions", "event", "event", "min", "max", "param", "getOppositePlacement", "lr", "bt", "rectToClientRect", "x", "y", "reference", "config", "platform", "x", "y", "i", "name", "fn", "detectOverflow", "elements", "rectToClientRect", "flip", "platform", "elements", "getOppositePlacement", "placements", "detectOverflow", "sides", "side", "d", "a", "b", "placement", "overflow", "platform", "elements", "detectOverflow", "min", "max", "min", "max", "round", "v", "getNodeName", "getWindow", "getDocumentElement", "isElement", "isHTMLElement", "isShadowRoot", "getComputedStyle", "isTableElement", "e", "getContainingBlock", "getParentNode", "getNodeScroll", "getComputedStyle", "isHTMLElement", "round", "isElement", "$", "x", "y", "getWindow", "getBoundingClientRect", "left", "top", "rectToClientRect", "getWindowScrollBarX", "getNodeScroll", "getDocumentElement", "elements", "getNodeName", "getDocumentRect", "max", "getViewportRect", "getInnerBoundingClientRect", "getParentNode", "cache", "getClippingRect", "min", "getTrueOffsetParent", "getOffsetParent", "isTableElement", "getContainingBlock", "io", "skip", "e", "reference", "flip", "size", "computePosition", "reference", "cache", "colors", "color", "i", "escape", "name", "callback", "response", "get", "TomSelect", "defaultOptions", "size", "flip", "computePosition", "x", "y", "copy", "response", "get", "start", "event", "event", "event", "_instances", "_a", "_instances", "event", "event", "error", "event", "attachmentSelector", "attachments", "preview", "presentation", "caption", "name", "size", "file", "attributes", "default", "tagName", "parse", "quote", "nestable", "heading1", "terminal", "breakOnReturn", "group", "code", "htmlAttributes", "text", "plaintext", "bulletList", "bullet", "listAttribute", "test", "element", "parentNode", "this", "numberList", "number", "attachmentGallery", "exclusive", "_element$tagName", "toLowerCase", "androidVersionMatch", "navigator", "userAgent", "match", "androidVersion", "parseInt", "browser$1", "composesExistingText", "recentAndroid", "samsungAndroid", "forcesObjectResizing", "supportsInputEvents", "InputEvent", "every", "prop", "prototype", "dompurify", "ADD_ATTR", "SAFE_FOR_XML", "RETURN_DOM", "lang$1", "attachFiles", "bold", "bullets", "byte", "bytes", "captionPlaceholder", "indent", "italic", "link", "numbers", "outdent", "redo", "remove", "strike", "undo", "unlink", "url", "urlPlaceholder", "GB", "KB", "MB", "PB", "TB", "sizes", "lang", "file_size_formatting", "prefix", "precision", "formatter", "concat", "base", "exp", "Math", "floor", "log", "withoutInsignificantZeros", "pow", "toFixed", "replace", "ZERO_WIDTH_SPACE", "NON_BREAKING_SPACE", "extend", "properties", "key", "value", "html", "document", "documentElement", "matches", "handleEvent", "eventName", "onElement", "matchingSelector", "withCallback", "inPhase", "preventDefault", "times", "arguments", "length", "undefined", "selector", "useCapture", "handler", "event", "destroy", "target", "findClosestElementFromNode", "call", "removeEventListener", "addEventListener", "createEvent", "bubbles", "cancelable", "initEvent", "triggerEvent", "dispatchEvent", "elementMatchesSelector", "nodeType", "node", "untilNode", "Node", "ELEMENT_NODE", "closest", "innerElementIsActive", "activeElement", "elementContainsNode", "findChildIndexOfNode", "_node", "childIndex", "previousSibling", "removeNode", "_node$parentNode", "removeChild", "walkTree", "tree", "onlyNodesOfType", "usingFilter", "expandEntityReferences", "whatToShow", "NodeFilter", "SHOW_ELEMENT", "SHOW_TEXT", "SHOW_COMMENT", "SHOW_ALL", "createTreeWalker", "makeElement", "tag", "options", "createElement", "editable", "contenteditable", "setAttribute", "style", "data", "dataset", "className", "split", "forEach", "classList", "add", "textContent", "childNodes", "childNode", "appendChild", "blockTagNames", "getBlockTagNames", "blockAttributes", "push", "nodeIsBlockContainer", "nodeIsBlockStartComment", "firstChild", "nodeIsBlockStart", "strict", "includes", "nodeIsCommentNode", "COMMENT_NODE", "nodeIsCursorTarget", "nodeIsTextNode", "trixCursorTarget", "nodeIsAttachmentElement", "nodeIsEmptyTextNode", "TEXT_NODE", "input", "level2Enabled", "getLevel", "browser", "pickFiles", "callback", "type", "multiple", "hidden", "id", "fileInputId", "files", "getElementById", "body", "click", "parser", "removeBlankTableCells", "tableCellSeparator", "tableRowSeparator", "text_attributes", "inheritable", "window", "getComputedStyle", "fontWeight", "fontStyle", "href", "groupTagName", "getAttribute", "frozen", "backgroundColor", "toolbar", "getDefaultHTML", "interval", "i", "n", "a", "attachment", "attachmentCaption", "attachmentCaptionEditor", "attachmentMetadata", "attachmentMetadataContainer", "attachmentName", "attachmentProgress", "attachmentSize", "attachmentToolbar", "l", "c", "BasicObject", "expression", "toMethod", "toProperty", "optional", "parseProxyMethodExpression", "subject", "object", "_this$toMethod", "_object", "apply", "proxyMethodExpressionPattern", "Error", "args", "Function", "RegExp", "$", "UTF16String", "box", "fromUCS2String", "toString", "ucs2String", "ucs2decode", "codepoints", "ucs2encode", "constructor", "super", "ucs2Length", "offsetToUCS2Offset", "offset", "slice", "max", "offsetFromUCS2Offset", "ucs2Offset", "fromCodepoints", "charAt", "isEqualTo", "toJSON", "getCacheKey", "hasArrayFrom", "_Array$from", "Array", "from", "hasStringCodePointAt", "_$codePointAt", "codePointAt", "hasStringFromCodePoint", "_String$fromCodePoint", "String", "fromCodePoint", "string", "map", "char", "output", "counter", "charCodeAt", "extra", "array", "result", "fromCharCode", "join", "TrixObject", "jsonString", "fromJSON", "JSON", "hasSameConstructorAs", "inspect", "parts", "contents", "contentsForInspection", "toJSONString", "stringify", "toUTF16String", "arraysAreEqual", "b", "index", "spliceArray", "_len", "_key", "splice", "RTL_PATTERN", "getDirection", "dir", "dirName", "textArea", "form", "supportsDirName", "FormData", "has", "error", "supportsDirSelector", "get", "trim", "allAttributeNames", "blockAttributeNames", "textAttributeNames", "listAttributeNames", "getAllAttributeNames", "getTextAttributeNames", "getBlockAttributeNames", "getBlockConfig", "attributeName", "config", "Object", "keys", "getTextConfig", "installDefaultCSSForTagName", "defaultCSS", "insertStyleElementForTagName", "nonce", "getCSPNonce", "head", "insertBefore", "getMetaElement", "content", "querySelector", "testTransferData", "dataTransferIsPlainText", "dataTransfer", "getData", "DOMParser", "parseFromString", "keyEventIsKeyboardCommand", "platform", "metaKey", "ctrlKey", "defer", "fn", "setTimeout", "copyObject", "objectsAreEqual", "normalizeRange", "range", "isArray", "copyValue", "rangeIsCollapsed", "start", "end", "rangeValuesAreEqual", "rangesAreEqual", "leftRange", "rightRange", "leftStart", "leftEnd", "rightStart", "rightEnd", "left", "right", "SelectionChangeObserver", "update", "bind", "selectionManagers", "started", "stop", "registerSelectionManager", "selectionManager", "unregisterSelectionManager", "filter", "sm", "notifySelectionManagersOfSelectionChange", "selectionDidChange", "reset", "selectionChangeObserver", "getDOMSelection", "selection", "getSelection", "rangeCount", "getDOMRange", "_getDOMSelection", "domRange", "getRangeAt", "domRangeIsPrivate", "setDOMRange", "removeAllRanges", "addRange", "nodeIsPrivate", "startContainer", "endContainer", "getPrototypeOf", "normalizeSpaces", "breakableWhitespacePattern", "squishBreakableWhitespace", "source", "utf16StringDifferences", "diffA", "utf16StringDifference", "utf16String", "diffB", "leftIndex", "rightIndexA", "rightIndexB", "Hash", "fromCommonAttributesOfObjects", "objects", "hash", "getKeys", "getKeysCommonToHash", "values", "copy", "merge", "unbox", "toArray", "isEmpty", "toObject", "keyToRemove", "sort", "ObjectGroup", "groupObjects", "ungroupedObjects", "depth", "asTree", "_object$canBeGrouped2", "_object$canBeGrouped", "_group$canBeGroupedWi", "_group", "canBeGrouped", "canBeGroupedWith", "getObjects", "getDepth", "ObjectMap", "find", "ElementStore", "elements", "getKey", "trixStoreKey", "Operation", "isPerforming", "performing", "hasPerformed", "performed", "hasSucceeded", "succeeded", "hasFailed", "getPromise", "promise", "Promise", "resolve", "reject", "perform", "release", "_this$promise", "_this$promise$cancel", "cancel", "proxyMethod", "ObjectView", "childViews", "rootView", "getNodes", "nodes", "createNodes", "cloneNode", "invalidate", "_this$parentView", "parentView", "invalidateViewForObject", "_this$findViewForObje", "findViewForObject", "findOrCreateCachedChildView", "viewClass", "view", "getCachedViewForObject", "recordChildView", "createChildView", "cacheViewForObject", "ObjectGroupView", "getAllChildViews", "views", "childView", "findElement", "findElementForObject", "getViewCache", "isViewCachingEnabled", "viewCache", "shouldCacheViews", "enableViewCaching", "disableViewCaching", "_this$getViewCache", "cache", "garbageCollectCachedViews", "objectKeys", "objectGroup", "getChildViews", "createContainerElement", "entries", "setPrototypeOf", "isFrozen", "getOwnPropertyDescriptor", "freeze", "seal", "create", "construct", "Reflect", "x", "func", "thisArg", "Func", "_len2", "_key2", "arrayForEach", "unapply", "arrayLastIndexOf", "lastIndexOf", "arrayPop", "pop", "arrayPush", "arraySplice", "stringToLowerCase", "stringToString", "stringMatch", "stringReplace", "stringIndexOf", "indexOf", "stringTrim", "objectHasOwnProperty", "hasOwnProperty", "regExpTest", "typeErrorCreate", "TypeError", "_len4", "_key4", "lastIndex", "_len3", "_key3", "addToSet", "set", "transformCaseFunc", "lcElement", "cleanArray", "clone", "newObject", "property", "lookupGetter", "desc", "t", "e", "r", "o", "s", "u", "h", "d", "g", "m", "p", "f", "v", "A", "y", "C", "E", "S", "R", "k", "T", "w", "L", "D", "N", "I", "O", "F", "P", "M", "B", "_", "j", "W", "U", "V", "z", "q", "H", "J", "K", "G", "Y", "X", "Z", "Q", "tt", "et", "it", "nt", "rt", "ot", "st", "at", "lt", "ct", "ut", "ht", "dt", "gt", "mt", "pt", "ft", "bt", "vt", "At", "yt", "xt", "Ct", "Et", "St", "Rt", "kt", "Tt", "wt", "Lt", "Dt", "Nt", "It", "Ot", "Ft", "Pt", "Mt", "Bt", "_t", "jt", "Wt", "Vt", "Ut", "zt", "qt", "DOMPurify", "addHook", "attrName", "keepAttr", "forceKeepAttr", "DEFAULT_ALLOWED_ATTRIBUTES", "DEFAULT_FORBIDDEN_PROTOCOLS", "DEFAULT_FORBIDDEN_ELEMENTS", "HTMLSanitizer", "sanitizedElement", "sanitize", "sanitizedHtml", "getHTML", "outerHTML", "innerHTML", "sanitizer", "allowedAttributes", "forbiddenProtocols", "forbiddenElements", "purifyOptions", "createBodyElementForHTML", "sanitizeElements", "normalizeListElementNesting", "purifyConfig", "assign", "setConfig", "getBody", "walker", "nodesToRemove", "nextNode", "currentNode", "elementIsRemovable", "sanitizeElement", "hasAttribute", "protocol", "removeAttribute", "_ref", "querySelectorAll", "listElement", "previousElement", "previousElementSibling", "elementIsForbidden", "elementIsntSerializable", "doc", "implementation", "createHTMLDocument", "css", "AttachmentView", "uploadProgressDelegate", "attachmentPiece", "piece", "createContentNodes", "innerElement", "figure", "getClassName", "getHref", "tabindex", "hasContent", "setHTML", "getContent", "createCaptionElement", "isPending", "progressElement", "class", "getUploadProgress", "trixMutable", "createCursorTarget", "figcaption", "getCaption", "captionConfig", "getCaptionConfig", "getFilename", "getFormattedFilesize", "nameElement", "createTextNode", "sizeElement", "names", "getType", "extension", "getExtension", "trixAttachment", "trixContentType", "getContentType", "trixId", "trixAttributes", "trixSerialize", "htmlContainsTagName", "isValidAttribute", "_config$attachments$t", "findProgressElement", "_this$findElement", "attachmentDidChangeUploadProgress", "div", "PreviewableAttachmentView", "previewDelegate", "image", "src", "refresh", "updateAttributesForImage", "getURL", "previewURL", "getPreviewURL", "serializedAttributes", "width", "getWidth", "height", "getHeight", "alt", "storeKey", "attachmentDidChangeAttributes", "PieceView", "getAttributes", "textConfig", "context", "createAttachmentNodes", "createStringNodes", "_element", "firstElementChild", "isPreviewable", "_this$textConfig", "iterable", "substring", "preserveSpaces", "styles", "pendingElement", "styleProperty", "isLast", "isFirst", "followsWhitespace", "TextView", "pieces", "getPieces", "endsWithWhitespace", "previousPiece", "BlockView", "block", "createComment", "_getBlockConfig", "getLastAttribute", "textView", "shouldAddExtraNewlineElement", "isRTL", "getBlockBreakPosition", "DocumentView", "render", "sync", "elementStore", "setDocument", "shadowElement", "getBlocks", "isSynced", "elementsHaveEqualHTML", "documentFragment", "lastChild", "fragment", "createDocumentFragmentForSync", "didSync", "findStoredElements", "createDocumentFragment", "storedElement", "replaceChild", "otherElement", "ignoreSpaces", "Piece", "types", "pieceJSON", "copyWithAttributes", "getValue", "copyWithAdditionalAttributes", "copyWithoutAttribute", "attribute", "getAttributesHash", "hasSameStringValueAsPiece", "hasSameAttributesAsPiece", "isBlockBreak", "isSerializable", "getLength", "canBeConsolidatedWith", "_defineProperty", "ImagePreloadOperation", "Image", "onload", "naturalWidth", "naturalHeight", "onerror", "Attachment", "attributesForFile", "setFile", "filename", "filesize", "contentType", "attachmentJSON", "releaseFile", "didChangeAttributes", "setAttributes", "newAttributes", "_this$previewDelegate", "_this$previewDelegate2", "_this$delegate", "_this$delegate$attach", "delegate", "preloadURL", "previewablePattern", "getFilesize", "_this$getFilename$mat", "getFile", "preloadFile", "releasePreloadedFile", "uploadProgress", "setUploadProgress", "_this$uploadProgressD", "_this$uploadProgressD2", "preloadingURL", "setPreviewURL", "_this$previewDelegate3", "_this$previewDelegate4", "_this$delegate2", "_this$delegate2$attac", "attachmentDidChangePreviewURL", "preload", "fileObjectURL", "URL", "createObjectURL", "revokeObjectURL", "then", "catch", "AttachmentPiece", "ensureAttachmentExclusivelyHasAttribute", "removeProhibitedAttributes", "permittedAttributes", "_piece$attachment", "json", "toConsole", "registerType", "StringPiece", "consolidateWith", "splitAtOffset", "SplittableList", "eachObject", "insertObjectAtIndex", "insertSplittableListAtIndex", "splittableList", "insertSplittableListAtPosition", "position", "splitObjectAtPosition", "editObjectAtIndex", "replaceObjectAtIndex", "removeObjectAtIndex", "getObjectAtIndex", "getSplittableListInRange", "rightIndex", "splitObjectsAtRange", "selectSplittableList", "removeObjectsInRange", "transformObjectsInRange", "transform", "transformedObjects", "rightOuterIndex", "leftInnerIndex", "startOfRange", "endOfRange", "getObjectAtPosition", "findIndexAndOffsetAtPosition", "splitIndex", "splitOffset", "leftObject", "rightObject", "consolidate", "pendingObject", "_pendingObject$canBeC", "_pendingObject", "consolidateFromIndexToIndex", "startIndex", "endIndex", "objectsInRange", "consolidatedInRange", "currentPosition", "nextPosition", "findPositionAtIndexAndOffset", "currentIndex", "getEndPosition", "endPosition", "objectArraysAreEqual", "Text", "textJSON", "notEmpty", "pieceList", "copyWithPieceList", "copyUsingObjectMap", "objectMap", "appendText", "insertTextAtPosition", "removeTextAtRange", "replaceTextAtRange", "moveTextFromRangeToPosition", "getTextAtRange", "addAttributeAtRange", "addAttributesAtRange", "removeAttributeAtRange", "setAttributesAtRange", "getAttributesAtPosition", "_this$pieceList$getOb", "getCommonAttributes", "getCommonAttributesAtRange", "getExpandedRangeForAttributeAtOffset", "getStringAtRange", "getStringAtPosition", "startsWithString", "endsWithString", "getAttachmentPieces", "getAttachments", "getAttachmentAndPositionById", "attachmentId", "getAttachmentById", "getRangeOfAttachment", "attachmentAndPosition", "updateAttributesForAttachment", "_text$pieceList", "eachPiece", "getPieceAtPosition", "toSerializableText", "Block", "blockJSON", "applyBlockBreakToText", "copyWithText", "copyWithoutText", "copyWithoutAttributes", "mappedText", "addAttribute", "expandAttribute", "addHTMLAttribute", "removeLastValue", "removeLastAttribute", "getLastElement", "getAttributeLevel", "getAttributeAtLevel", "level", "hasAttributes", "getLastNestableAttribute", "getNestableAttributes", "getNestingLevel", "decreaseNestingLevel", "increaseNestingLevel", "getListItemAttributes", "isListItem", "isTerminalBlock", "_getBlockConfig2", "breaksOnReturn", "_getBlockConfig3", "findLineBreakInDirectionFromPosition", "direction", "newlineText", "textForStringWithAttributes", "getTextWithoutBlockBreak", "textEndsInBlockBreak", "otherBlock", "otherAttributes", "otherAttribute", "getListAttributeNames", "unmarkExistingInnerBlockBreaksInText", "addBlockBreakToText", "modified", "innerPieces", "lastPiece", "unmarkBlockBreakPiece", "blockBreakText", "blockBreak", "Document", "documentJSON", "textAttributes", "blocks", "blockList", "getBlockAtIndex", "consolidateBlocks", "copyUsingObjectsFromDocument", "sourceDocument", "copyWithBaseBlockAttributes", "replaceBlock", "oldBlock", "newBlock", "insertDocumentAtRange", "locationFromPosition", "getBlockAtPosition", "mergeDocumentAtRange", "formattedDocument", "startPosition", "startLocation", "baseBlockAttributes", "getBaseBlockAttributes", "trailingBlockAttributes", "leadingBlockAttributes", "blockCount", "getBlockCount", "firstBlock", "firstText", "insertTextAtRange", "leftPosition", "rightPosition", "leftLocation", "rightLocation", "locationRangeFromRange", "leftOffset", "leftBlock", "rightOffset", "rightBlock", "leftText", "rightText", "affectedBlockCount", "getDocumentAtRange", "movingRightward", "eachBlockAtRange", "textRange", "eachBlock", "getTextAtIndex", "removeAttributeForAttachment", "setHTMLAttributeAtPosition", "updatedBlock", "insertBlockBreakAtRange", "applyBlockAttributeAtRange", "expanded", "expandRangeToLineBreaksAndSplitBlocks", "blockConfig", "removeLastListAttributeAtRange", "exceptAttributeName", "converted", "convertLineBreaksToBlockBreaksInRange", "removeBlockAttributesAtRange", "removeLastTerminalAttributeAtRange", "consolidateBlocksAtRange", "lastAttributeName", "endLocation", "startBlock", "positionFromLocation", "endBlock", "_this$getBlockAtIndex", "getTextAtPosition", "getCharacterAtPosition", "getEditCount", "editCount", "getCommonAttributesAtPosition", "attributesForBlock", "commonAttributes", "attributesLeft", "inheritableAttributes", "getRangeOfCommonAttributeAtPosition", "startOffset", "endOffset", "blockIndex", "lastAttributeIndex", "min", "attachmentPieces", "getLocationRangeOfAttachment", "getAttachmentPieceForAttachment", "findRangesForBlockAttribute", "ranges", "findRangesForTextAttribute", "withValue", "location", "locationRangeFromPosition", "rangeFromLocationRange", "locationRange", "getTexts", "toSerializableDocument", "pieceForString", "parseTrixDataAttribute", "HTMLParser", "referenceElement", "blockElements", "processedElements", "getDocument", "createHiddenContainer", "containerElement", "nodeFilter", "processNode", "translateBlockElementMarginsToNewlines", "removeHiddenContainer", "display", "nextSibling", "isInsignificantTextNode", "appendBlockForTextNode", "processTextNode", "appendBlockForElement", "processElement", "currentBlockElement", "isBlockElement", "appendStringWithAttributes", "_this$currentBlock", "getBlockAttributes", "getBlockHTMLAttributes", "currentBlock", "appendBlockForAttributesWithElement", "elementIsBlockElement", "currentBlockContainsElement", "parentBlockElement", "findParentBlockElement", "appendEmptyBlock", "parentElement", "_node$previousSibling", "elementCanDisplayPreformattedText", "stringEndsWithWhitespace", "leftTrimBreakableWhitespace", "getTextAttributes", "appendAttachmentWithAttributes", "isExtraBR", "dimensions", "needsTableSeparator", "appendPiece", "appendStringToTextAtIndex", "prependStringToTextAtIndex", "unshift", "configAttr", "attributeInheritedFromBlock", "blockElement", "findBlockElementAncestors", "attrConfig", "_attrConfig$test", "reverse", "settings", "ancestors", "stringIsAllBreakableWhitespace", "nodeEndsWithNonWhitespace", "_element$previousSibl", "defaultMargin", "getMarginOfDefaultBlockElement", "margin", "getMarginOfBlockElementAtIndex", "top", "bottom", "getBlockElementMargin", "whiteSpace", "marginTop", "marginBottom", "FILTER_REJECT", "FILTER_ACCEPT", "unserializableAttributeNames", "serializedAttributesAttribute", "serializedAttributesSelector", "blockCommentPattern", "serializers", "serializable", "HTMLElement", "el", "ManagedAttachment", "attachmentManager", "requestRemovalOfAttachment", "AttachmentManager", "managedAttachments", "manageAttachment", "attachmentIsManaged", "attachmentManagerDidRequestRemovalOfAttachment", "unmanageAttachment", "managedAttachment", "LineBreakInsertion", "composition", "selectedRange", "getSelectedRange", "previousCharacter", "nextCharacter", "shouldInsertBlockBreak", "shouldBreakFormattedBlock", "shouldDecreaseListLevel", "shouldPrependListItem", "shouldRemoveLastBlockAttribute", "Composition", "currentAttributes", "revision", "_this$delegate$compos", "refreshAttachments", "compositionDidChangeDocument", "getSnapshot", "loadSnapshot", "_this$delegate2$compo", "_this$delegate3", "_this$delegate3$compo", "compositionWillLoadSnapshot", "setSelection", "compositionDidLoadSnapshot", "insertText", "updatePosition", "notifyDelegateOfInsertionAtRange", "insertBlock", "insertDocument", "insertString", "getCurrentTextAttributes", "insertBlockBreak", "insertLineBreak", "insertion", "decreaseListLevel", "removeLastBlockAttribute", "breakFormattedBlock", "insertHTML", "replaceHTML", "getLocationRange", "insertFile", "insertFiles", "_this$delegate4", "compositionShouldAcceptFile", "attachmentForFile", "insertAttachments", "insertAttachment", "attachmentText", "textForAttachmentWithAttributes", "shouldManageDeletingInDirection", "shouldManageMovingCursorInDirection", "deleteInDirection", "deletingIntoPreviousBlock", "selectionSpansBlocks", "selectionIsCollapsed", "canDecreaseBlockAttributeLevel", "getBlock", "decreaseBlockAttributeLevel", "getExpandedRangeInDirection", "getAttachmentAtRange", "editAttachment", "moveTextFromRange", "removeAttachment", "stopEditingAttachment", "removeCurrentAttribute", "insertPlaceholder", "placeholderPosition", "getPosition", "selectPlaceholder", "setSelectedRange", "PLACEHOLDER", "forgetPlaceholder", "hasCurrentAttribute", "toggleCurrentAttribute", "setCurrentAttribute", "canSetCurrentAttribute", "canSetCurrentBlockAttribute", "canSetCurrentTextAttribute", "getSelectedDocument", "setBlockAttribute", "setTextAttribute", "notifyDelegateOfCurrentAttributesChange", "setHTMLAtributeAtPosition", "allowedHTMLAttributes", "newDocument", "removeBlockAttribute", "updateCurrentAttributes", "removeTextAttribute", "canDecreaseNestingLevel", "_this$getBlock", "canIncreaseNestingLevel", "previousBlock", "getPreviousBlock", "_this$getBlock2", "_this$getBlock3", "attributeLevel", "ignoreLock", "getCurrentAttributes", "freezeSelection", "thawSelection", "hasFrozenSelection", "_this$delegate5", "compositionDidRequestChangingSelectionToLocationRange", "getSelectionManager", "setLocationRange", "targetLocationRange", "withTargetLocationRange", "withTargetRange", "withTargetDOMRange", "createLocationRangeFromDOMRange", "translateUTF16PositionFromOffset", "editingAttachment", "moveCursorInDirection", "canEditAttachment", "expandSelectionInDirection", "expandSelectionForEditing", "expandSelectionAroundCommonAttribute", "selectionContainsAttachments", "_this$getSelectedAtta", "getSelectedAttachments", "selectionIsInCursorTarget", "positionIsCursorTarget", "locationIsCursorTarget", "positionIsBlockBreak", "_this$document$getPie", "_this$getSelectedDocu", "added", "removed", "oldArray", "newArray", "existingValues", "Set", "currentValues", "_this$delegate6", "_this$delegate6$compo", "compositionDidRemoveAttachment", "_this$delegate7", "_this$delegate7$compo", "compositionDidAddAttachment", "_this$delegate8", "_this$delegate8$compo", "compositionDidEditAttachment", "_this$delegate9", "_this$delegate9$compo", "compositionDidChangeAttachmentPreviewURL", "_this$delegate10", "_this$delegate10$comp", "compositionDidStartEditingAttachment", "_this$delegate11", "_this$delegate11$comp", "compositionDidStopEditingAttachment", "_this$delegate12", "_this$delegate12$comp", "compositionDidChangeCurrentAttributes", "_this$delegate13", "_this$delegate13$comp", "compositionDidPerformInsertionAtRange", "utf16string", "utf16position", "UndoManager", "undoEntries", "redoEntries", "recordUndoEntry", "description", "consolidatable", "previousEntry", "entryHasDescriptionAndContext", "undoEntry", "createEntry", "redoEntry", "snapshot", "canUndo", "canRedo", "entry", "BLOCK_ATTRIBUTE_NAME", "Filter", "applyBlockAttribute", "findRangesOfBlocks", "findRangesOfPieces", "moveSelectedRangeForward", "attachmentGalleryFilter", "DEFAULT_FILTERS", "Editor", "undoManager", "filters", "loadDocument", "loadHTML", "loadJSON", "getClientRectAtPosition", "getClientRectAtLocationRange", "activateAttribute", "attributeIsActive", "canActivateAttribute", "deactivateAttribute", "LocationMapper", "findLocationFromContainerAndOffset", "container", "foundBlock", "attachmentElement", "findAttachmentElementParentForNode", "rejectAttachmentContents", "nodeLength", "findContainerAndOffsetFromLocation", "nodeOffset", "findNodeAndOffsetFromLocation", "getSignificantNodesForIndex", "acceptSignificantNodes", "recordingNodes", "rejectEmptyTextNodes", "PointMapper", "createDOMRangeFromPoint", "caretPositionFromPoint", "offsetNode", "createRange", "setStart", "caretRangeFromPoint", "createTextRange", "originalDOMRange", "moveToPoint", "select", "getClientRectsForDOMRange", "getClientRects", "SelectionManager", "didMouseDown", "locationMapper", "pointMapper", "lockCount", "currentLocationRange", "lockedLocationRange", "createDOMRangeFromLocationRange", "updateCurrentLocationRange", "setLocationRangeFromPointRange", "pointRange", "getLocationAtPoint", "lock", "unlock", "clearSelection", "_getDOMRange", "collapsed", "selectionIsExpanded", "domRangeWithinElement", "pauseTemporarily", "resumeHandlers", "paused", "resume", "clearTimeout", "resumeTimeout", "_this$delegate$locati", "locationRangeDidChange", "rangeStart", "rangeEnd", "setEnd", "point", "_this$createLocationR", "keyNames", "undoable", "commands", "do", "undos", "AttachmentEditorController", "title", "trixAction", "didClickToolbar", "didClickActionButton", "textarea", "placeholder", "textareaClone", "tabIndex", "autoresize", "scrollHeight", "didInputCaption", "didKeyDownCaption", "didChangeCaption", "didBlurCaption", "editingFigcaption", "editCaption", "focus", "install", "makeElementMutable", "addToolbar", "installCaptionEditor", "uninstall", "savePendingCaption", "didUninstallAttachmentEditor", "pendingCaption", "_this$delegate3$attac", "attachmentEditorDidRequestUpdatingAttributesForAttachment", "attachmentEditorDidRequestRemovingAttributeForAttachment", "stopPropagation", "attachmentEditorDidRequestRemovalOfAttachment", "_this$delegate5$attac", "keyCode", "attachmentEditorDidRequestDeselectingAttachment", "CompositionController", "didFocus", "didBlur", "didClickAttachment", "documentView", "_this$blurPromise", "focused", "compositionControllerDidFocus", "blurPromise", "compositionControllerDidBlur", "findAttachmentForElement", "compositionControllerDidSelectAttachment", "getSerializableElement", "isEditingAttachment", "_this$delegate4$compo", "_this$delegate5$compo", "canSyncDocumentView", "compositionControllerWillSyncDocumentView", "compositionControllerDidSyncDocumentView", "compositionControllerDidRender", "rerenderViewForObject", "refreshViewCache", "attachmentEditor", "installAttachmentEditorForAttachment", "_this$attachmentEdito", "uninstallAttachmentEditor", "_this$attachmentEdito2", "compositionControllerWillUpdateAttachment", "compositionControllerDidRequestRemovalOfAttachment", "compositionControllerDidRequestDeselectingAttachment", "Controller", "mutableAttributeName", "mutableSelector", "childList", "characterData", "characterDataOldValue", "subtree", "MutationObserver", "didMutate", "observer", "observe", "disconnect", "mutations", "_this$delegate$elemen", "findSignificantMutations", "elementDidMutate", "getMutationSummary", "mutation", "mutationIsSignificant", "nodeIsMutable", "nodesModifiedByMutation", "nodeIsSignificant", "addedNodes", "removedNodes", "getTextMutationSummary", "additions", "deletions", "getTextChangesFromCharacterData", "textChanges", "getTextChangesFromChildList", "addition", "summary", "textAdded", "deleted", "textDeleted", "getMutationsByType", "textRemoved", "getTextForNodes", "characterMutations", "startMutation", "endMutation", "summarized", "oldString", "newString", "oldValue", "FileVerificationOperation", "reader", "FileReader", "abort", "readAsArrayBuffer", "FlakyAndroidKeyboardDetector", "shouldIgnore", "previousEvent", "checkSamsungKeyboardBuggyModeStart", "checkSamsungKeyboardBuggyModeEnd", "buggyMode", "insertingLongTextAfterUnidentifiedChar", "differsInWhitespace", "innerText", "inputType", "_this$event$data", "isBeforeInputInsertText", "previousEventWasUnidentifiedKeydown", "_this$previousEvent", "_this$previousEvent2", "text1", "text2", "normalize", "whiteSpaceNormalizerRegexp", "InputController", "mutationObserver", "flakyKeyboardDetector", "events", "handlerFor", "mutationSummary", "editorWillSyncDocumentView", "editorDidSyncDocumentView", "requestRender", "_this$delegate$inputC", "inputControllerDidRequestRender", "requestReparse", "_this$delegate2$input", "inputControllerDidRequestReparse", "operations", "all", "handleInput", "_this$responder", "inputControllerWillAttachFiles", "responder", "defaultPrevented", "inputControllerWillHandleInput", "inputControllerDidHandleInput", "createLinkHTML", "pastedFileCount", "Level0InputController", "resetInputSummary", "setInputSummary", "inputSummary", "isComposing", "inputControllerDidAllowUnhandledInput", "mutationIsExpected", "preferDocument", "mutationAdditionMatchesSummary", "mutationDeletionMatchesSummary", "didDelete", "unexpectedNewlineAddition", "unexpectedNewlineDeletion", "_this$compositionInpu", "textChanged", "composedEmptyString", "compositionInput", "getEndData", "getCompositionInput", "CompositionInput", "isEnded", "_this$responder2", "serializeSelectionToDataTransfer", "_this$responder3", "setData", "canAcceptDataTransfer", "Files", "getPastedHTMLUsingHiddenElement", "pageXOffset", "pageYOffset", "opacity", "requestAnimationFrame", "keydown", "didInput", "keyName", "_context2", "modifier", "_context", "character", "inputControllerDidReceiveKeyboardCommand", "keypress", "altKey", "stringFromKeyEvent", "_this$responder9", "inputControllerWillPerformTyping", "textInput", "toUpperCase", "_this$responder10", "dragenter", "dragstart", "_this$delegate5$input", "draggedRange", "inputControllerDidStartDrag", "dragover", "draggingPoint", "clientX", "clientY", "_this$delegate6$input", "inputControllerDidReceiveDragOverPoint", "dragend", "_this$delegate7$input", "inputControllerDidCancelDrag", "drop", "_event$dataTransfer", "_this$responder11", "_this$responder12", "inputControllerWillMoveText", "_this$responder13", "fromJSONString", "cut", "_this$responder14", "clipboardData", "inputControllerWillCutText", "_this$responder15", "paste", "clipboard", "testClipboardData", "pasteEventIsCrippledSafariHTMLPaste", "_this$responder16", "inputControllerWillPaste", "inputControllerDidPaste", "_this$responder17", "_this$delegate14", "_this$responder18", "_this$delegate15", "_this$delegate16", "_this$responder19", "_this$delegate17", "_clipboard$items", "_clipboard$items$getA", "items", "getAsFile", "_this$delegate18", "_this$responder20", "_this$delegate19", "extensionForFile", "compositionstart", "compositionupdate", "compositionend", "beforeinput", "backspace", "_this$delegate20", "delete", "_this$delegate21", "return", "_this$delegate22", "_this$responder21", "tab", "_this$responder22", "_this$responder23", "_this$responder24", "_this$responder25", "control", "_this$delegate23", "_this$delegate24", "_this$delegate25", "_this$responder26", "shift", "_this$delegate26", "_this$responder27", "_this$responder28", "_this$responder29", "_this$delegate27", "meta", "_this$delegate28", "_file$type", "which", "charCode", "hasPasteboardFlavor", "hasReadableDynamicData", "isExternalHTMLPaste", "isExternalRichTextPaste", "inputController", "isSignificant", "_this$responder5", "_this$responder4", "canApplyToDocument", "_this$responder6", "_this$responder7", "_this$responder8", "_this$data$start", "_this$data$end", "Level2InputController", "scheduledRender", "composing", "reparse", "scheduleRender", "_this$afterRender", "cancelAnimationFrame", "afterRender", "toggleAttributeIfSupported", "inputControllerWillPerformFormatting", "activateAttributeIfSupported", "getTargetDOMRange", "minLength", "_this$event$getTarget", "_this$event", "targetRanges", "getTargetRanges", "staticRangeToRange", "withEvent", "command", "keyboardCommandFromKeyEvent", "shiftKey", "_event$clipboardData", "pasteEventHasFilesOnly", "pasteEventHasPlainTextOnly", "inputTypes", "immmediateRender", "inputEvent", "dragging", "pointFromEvent", "dragEventHasFiles", "ArrowLeft", "ArrowRight", "Backspace", "Tab", "deleteByComposition", "deleteByCut", "deleteByDrag", "deleteByDragRange", "deleteCompositionText", "deleteContent", "deleteContentBackward", "deleteContentForward", "deleteEntireSoftLine", "deleteHardLineBackward", "deleteHardLineForward", "deleteSoftLineBackward", "deleteSoftLineForward", "deleteWordBackward", "deleteWordForward", "formatBackColor", "formatBold", "formatFontColor", "formatFontName", "formatIndent", "formatItalic", "formatJustifyCenter", "formatJustifyFull", "formatJustifyLeft", "formatJustifyRight", "formatOutdent", "formatRemove", "_this$responder30", "formatSetBlockTextDirection", "formatSetInlineTextDirection", "formatStrikeThrough", "formatSubscript", "formatSuperscript", "formatUnderline", "historyRedo", "inputControllerWillPerformRedo", "historyUndo", "inputControllerWillPerformUndo", "insertCompositionText", "insertFromComposition", "insertFromDrop", "_this$responder31", "insertFromPaste", "_this$responder32", "_this$responder33", "processableFilePaste", "_this$responder34", "_this$responder35", "insertFromYank", "insertLink", "insertOrderedList", "insertParagraph", "_this$responder36", "insertReplacementText", "replacement", "_this$event$dataTrans", "insertTranspose", "insertUnorderedList", "staticRange", "_event$dataTransfer$f", "attributeButtonSelector", "actionButtonSelector", "toolbarButtonSelector", "dialogSelector", "activeDialogSelector", "dialogButtonSelector", "dialogInputSelector", "getInputForDialog", "getAttributeName", "getActionName", "ToolbarController", "didClickAttributeButton", "didClickDialogButton", "didKeyDownDialogInput", "actions", "resetDialogInputs", "toolbarDidClickButton", "actionName", "getDialog", "toggleDialog", "toolbarDidInvokeAction", "toolbarDidToggleAttribute", "refreshAttributeButtons", "dialogElement", "dialog", "hideDialog", "updateActions", "refreshActionButtons", "eachActionButton", "disabled", "updateAttributes", "eachAttributeButton", "dialogIsVisible", "applyKeyboardCommand", "keyString", "button", "buttonKeys", "dialogName", "showDialog", "toolbarWillShowDialog", "disabledInput", "toolbarDidShowDialog", "willValidate", "setCustomValidity", "checkValidity", "isSafeAttribute", "toolbarDidUpdateAttribute", "toolbarDidRemoveAttribute", "toolbarDidHideDialog", "EditorController", "editorElement", "compositionController", "toolbarController", "toolbarElement", "editor", "notifyEditorElement", "handlingInput", "updateCurrentActions", "pasting", "pastedRange", "attachmentLocationRange", "loadingSnapshot", "isFocused", "requestedLocationRange", "compositionRevisionWhenLocationRangeRequested", "renderedCompositionRevision", "runEditorFilters", "isFocusedInvisibly", "requestedRender", "recordTypingUndoEntry", "recordFormattingUndoEntry", "locationRangeBeforeDrag", "invokingElement", "invokeAction", "selectionFrozen", "canInvokeAction", "actionIsExternal", "_this$actions$actionN", "_this$actions$actionN2", "getCurrentActions", "currentActions", "snapshotsAreEqual", "updateInputElement", "serializer", "setFormValue", "message", "documentChangedSinceLastRender", "notify", "getUndoContext", "getLocationContext", "getTimeContext", "Date", "getTime", "_this$editorElement$o", "ownerDocument", "TrixToolbarElement", "connectedCallback", "editorElements", "_this$ownerDocument", "nodeList", "makeEditable", "toggleAttribute", "configureContentEditable", "disableObjectResizing", "setDefaultParagraphSeparator", "_document$queryComman", "_document", "queryCommandSupported", "execCommand", "_document$queryComman2", "_document2", "cursorTargetStyles", "_internals", "WeakMap", "_formDisabled", "_validate", "WeakSet", "ElementInternalsDelegate", "_classPrivateFieldInitSpec", "writable", "_classPrivateFieldSet", "attachInternals", "_classPrivateMethodGet", "_validate2", "disconnectedCallback", "_classPrivateFieldGet", "labels", "required", "validity", "validationMessage", "formDisabledCallback", "reportValidity", "customValidationMessage", "valueMissing", "customError", "setValidity", "_focusHandler", "_resetBubbled", "_clickBubbled", "LegacyDelegate", "contains", "label", "texts", "_classPrivateFieldGet2", "console", "warn", "_delegate", "TrixEditorElement", "willCreateInput", "formAssociated", "inputElement", "localName", "toolbarId", "internalToolbar", "_this$ownerDocument2", "_this$editorControlle", "editorController", "defaultValue", "_this$editor", "attributeChangedCallback", "newValue", "isConnected", "reconnect", "inputId", "nextElementSibling", "_this$editorControlle2", "removeInternalToolbar", "_this$internalToolbar", "formResetCallback", "Trix", "VERSION", "version", "core", "models", "controllers", "observers", "customElements", "define", "be", "ye", "xe", "G", "we", "ve", "N", "v", "E", "X", "Q", "R", "Ee", "Le", "Te", "Se", "Y", "ke", "Ae", "L", "y", "Z", "ee", "te", "w", "g", "re", "C", "Re", "U", "Ue", "H", "ie", "ne", "se", "ae", "Me", "Ne", "Ce", "oe", "le", "ce", "de", "O", "P", "j", "he", "He", "ue", "pe", "Oe", "me", "V", "Pe", "F", "T", "S", "D", "je", "Ve", "k", "fe", "ge", "Fe", "De", "St", "clone", "event", "alert_controller_default", "event", "event", "event", "FetchRequest", "response", "event", "request", "FetchRequest", "response", "event", "hash", "name", "event", "response", "event", "document", "i", "blockLength", "range", "event", "event", "_instances", "e", "event", "_instances", "Tribute", "callback", "response", "get", "e", "mention", "noop", "fn", "i", "k", "v", "o", "k", "a", "b", "e", "range", "i", "n", "x", "y", "p", "pt2", "start", "end", "s", "min", "max", "index", "hi", "set", "callback", "fn", "args", "debounce", "start", "end", "left", "right", "min", "max", "t", "s", "p", "m", "d", "round", "v", "l", "h", "b", "a", "f", "n", "k", "w", "i", "r", "g", "range", "c", "p2", "j", "to", "interpolate", "color", "c2", "w2", "_descriptors", "context", "name", "defaults", "cache", "x", "y", "size", "flip", "top", "bottom", "read", "index", "add", "prefix", "resolve", "descriptors", "set", "pt", "getComputedStyle", "e", "st", "fn", "i", "draw", "event", "from", "to", "Animation", "defaults", "name", "v", "config", "min", "max", "x", "y", "t", "r", "b", "l", "index", "scales", "start", "range", "elements", "context", "elementType", "cache", "names", "end", "a", "size", "top", "bottom", "v2", "e", "Element", "offset", "validIndex", "left", "right", "j", "w", "h", "x2", "y2", "color", "p2", "registry", "format", "hi", "pt2", "inRange", "layouts", "positions", "descriptors", "plugins", "set", "Config", "p", "version", "l2", "animationOptions", "c", "debounce", "platform", "listener", "prefix", "o", "alpha", "skip", "d", "fill", "ci", "map", "callback", "x3", "y3", "pt", "noop", "m", "round", "interpolate", "__defProp", "__hasOwnProp", "__defNormalProp", "a", "b", "event", "index", "context", "merge", "Cropper", "import_activestorage", "event", "files", "e", "error", "resolve", "hash", "i", "CustomEvent", "event", "lgQuery", "c", "r", "v", "context", "s", "eventNamespace", "e", "index", "g", "utils", "i", "size", "top", "bottom", "x", "y", "j", "elements", "LightGallery", "uuid", "template", "_a", "$img", "error", "now", "module", "destroy", "lGEvents", "Zoom", "$LG", "__assign", "event", "e", "x", "y", "index", "bottom", "lGEvents", "k", "p", "_a", "__assign", "hash", "Video", "event", "index", "i", "e", "event", "e", "event", "response", "error", "slice", "options", "vnodeId", "isValidElement", "rerenderQueue", "defer", "prevDebounce", "i", "EMPTY_OBJ", "EMPTY_ARR", "IS_NON_DIMENSIONAL", "assign", "obj", "props", "removeNode", "node", "parentNode", "removeChild", "createElement", "type", "children", "key", "ref", "normalizedProps", "arguments", "length", "call", "defaultProps", "createVNode", "original", "vnode", "undefined", "constructor", "createRef", "current", "Fragment", "Component", "context", "getDomSibling", "childIndex", "indexOf", "sibling", "updateParentDomPointers", "child", "base", "enqueueRender", "c", "push", "process", "debounceRendering", "queue", "sort", "a", "b", "some", "component", "commitQueue", "oldVNode", "oldDom", "parentDom", "diff", "ownerSVGElement", "commitRoot", "diffChildren", "renderResult", "newParentVNode", "oldParentVNode", "globalContext", "isSvg", "excessDomChildren", "isHydrating", "j", "childVNode", "newDom", "firstChildDom", "refs", "oldChildren", "oldChildrenLength", "Array", "isArray", "reorderChildren", "placeChild", "unmount", "applyRef", "tmp", "toChildArray", "out", "nextDom", "sibDom", "outer", "appendChild", "nextSibling", "insertBefore", "diffProps", "dom", "newProps", "oldProps", "hydrate", "setProperty", "setStyle", "style", "value", "test", "name", "oldValue", "useCapture", "o", "cssText", "replace", "toLowerCase", "_listeners", "addEventListener", "eventProxyCapture", "eventProxy", "removeEventListener", "e", "setAttribute", "removeAttribute", "event", "newVNode", "isNew", "oldState", "snapshot", "clearProcessingException", "provider", "componentContext", "newType", "contextType", "prototype", "render", "doRender", "sub", "state", "getDerivedStateFromProps", "componentWillMount", "componentDidMount", "componentWillReceiveProps", "shouldComponentUpdate", "forEach", "componentWillUpdate", "componentDidUpdate", "getChildContext", "getSnapshotBeforeUpdate", "diffElementNodes", "diffed", "root", "cb", "oldHtml", "newHtml", "nodeType", "localName", "document", "createTextNode", "createElementNS", "is", "data", "childNodes", "dangerouslySetInnerHTML", "attributes", "innerHTML", "checked", "parentVNode", "skipRemove", "r", "componentWillUnmount", "this", "replaceNode", "firstChild", "slice", "EMPTY_ARR", "options", "error", "vnode", "component", "ctor", "handled", "constructor", "getDerivedStateFromError", "setState", "componentDidCatch", "e", "vnodeId", "isValidElement", "Component", "prototype", "update", "callback", "s", "this", "state", "assign", "props", "push", "enqueueRender", "forceUpdate", "render", "Fragment", "rerenderQueue", "defer", "Promise", "then", "bind", "resolve", "setTimeout", "process", "i", "createVNode", "type", "key", "__source", "__self", "ref", "normalizedProps", "undefined", "defaultProps", "v", "a", "x", "y", "b", "max", "response", "set", "c", "c2", "i2", "k", "defaults", "words", "index", "_", "k", "_", "currentIndex", "currentComponent", "prevRaf", "afterPaintEffects", "oldBeforeDiff", "options", "oldBeforeRender", "oldAfterDiff", "diffed", "oldCommit", "oldBeforeUnmount", "unmount", "flushAfterPaintEffects", "component", "afterPaintEffects", "sort", "a", "b", "pop", "forEach", "invokeCleanup", "invokeEffect", "e", "options", "vnode", "currentComponent", "oldBeforeDiff", "oldBeforeRender", "currentIndex", "hooks", "diffed", "oldAfterDiff", "c", "length", "push", "prevRaf", "requestAnimationFrame", "callback", "raf", "done", "clearTimeout", "timeout", "HAS_RAF", "cancelAnimationFrame", "setTimeout", "commitQueue", "some", "filter", "cb", "oldCommit", "unmount", "oldBeforeUnmount", "hasErrored", "s", "hook", "comp", "cleanup", "assign", "obj", "props", "i", "shallowDiffers", "a", "b", "PureComponent", "p", "PureComponent", "prototype", "Component", "isPureReactComponent", "shouldComponentUpdate", "props", "state", "shallowDiffers", "this", "oldDiffHook", "options", "vnode", "type", "ref", "REACT_FORWARD_SYMBOL", "Symbol", "for", "Forwarded", "oldCatchError", "options", "error", "newVNode", "oldVNode", "then", "component", "vnode", "oldUnmount", "unmount", "Suspense", "_suspenders", "suspended", "SuspenseList", "_next", "_map", "options", "unmount", "vnode", "component", "type", "oldUnmount", "Suspense", "prototype", "Component", "promise", "suspendingVNode", "suspendingComponent", "c", "this", "_suspenders", "push", "resolve", "suspended", "resolved", "onResolved", "onSuspensionComplete", "state", "suspendedVNode", "removeOriginal", "detachedParent", "originalParent", "map", "child", "insertBefore", "setState", "pop", "forceUpdate", "wasHydrating", "then", "componentWillUnmount", "render", "props", "document", "createElement", "detachedComponent", "detachedClone", "parentDom", "forEach", "effect", "assign", "fallback", "Fragment", "children", "list", "node", "delete", "revealOrder", "size", "length", "SuspenseList", "prototype", "Component", "child", "list", "this", "delegated", "suspended", "node", "_map", "get", "unsuspend", "wrappedUnsuspend", "props", "revealOrder", "push", "resolve", "render", "_next", "Map", "children", "toChildArray", "reverse", "i", "length", "set", "componentDidUpdate", "componentDidMount", "n", "forEach", "_this", "REACT_ELEMENT_TYPE", "Symbol", "for", "CAMEL_PROPS", "IS_DOM", "document", "onChangeInputType", "type", "test", "Component", "prototype", "isReactComponent", "forEach", "key", "Object", "defineProperty", "configurable", "get", "this", "set", "v", "writable", "value", "oldEventHook", "options", "event", "empty", "isPropagationStopped", "cancelBubble", "isDefaultPrevented", "defaultPrevented", "e", "persist", "nativeEvent", "currentComponent", "classNameDescriptor", "class", "oldVNodeHook", "vnode", "type", "props", "normalizedProps", "nonCustomElement", "indexOf", "i", "IS_DOM", "test", "onChangeInputType", "toLowerCase", "CAMEL_PROPS", "replace", "multiple", "Array", "isArray", "toChildArray", "children", "child", "selected", "defaultValue", "className", "enumerable", "$$typeof", "REACT_ELEMENT_TYPE", "oldBeforeRender", "i", "e", "k", "p2", "index", "left", "right", "size", "ii", "start", "end", "response", "event", "e", "_ReadMore", "event", "import_lodash", "event", "i", "navigator", "index", "controllers", "_instances", "error", "response", "i", "_instances", "supported_get", "deleteServerSubscription_fn", "event", "error", "_instances", "supported_get", "event", "callback", "name", "_a", "form_controller_default", "event", "event", "elements", "index", "index", "_instances", "event", "alert_controller_default", "form_controller_default", "St", "version_default", "schema", "schema_default", "__spreadValues", "Idiomorph", "EMPTY_SET", "defaults", "noOp", "elt", "morph", "oldNode", "newContent", "config", "parseContent", "normalizedContent", "normalizeContent", "ctx", "createMorphContext", "morphNormalizedContent", "normalizedNewContent", "oldHead", "newHead", "promises", "handleHeadElement", "morphChildren", "bestMatch", "findBestNodeMatch", "previousSibling", "nextSibling", "morphedNode", "morphOldNodeTo", "insertSiblings", "ignoreValueOfActiveElement", "possibleActiveElement", "isSoftMatch", "syncNodeFrom", "newParent", "oldParent", "nextNewChild", "insertionPoint", "newChild", "removeIdsFromConsideration", "isIdSetMatch", "idSetMatch", "findIdSetMatch", "removeNodesBetween", "softMatch", "findSoftMatch", "tempNode", "removeNode", "ignoreAttribute", "attr", "to", "updateType", "from", "type", "fromAttributes", "toAttributes", "fromAttribute", "i", "toAttribute", "syncInputValue", "syncBooleanAttribute", "attributeName", "ignoreUpdate", "fromValue", "toValue", "newHeadTag", "currentHead", "added", "removed", "preserved", "nodesToAppend", "headMergeStyle", "srcToNewHeadNodes", "newHeadChild", "currentHeadElt", "inNewContent", "isReAppended", "isPreserved", "newNode", "newElt", "resolve", "promise", "_resolve", "removedElement", "log", "mergeDefaults", "finalConfig", "createIdMap", "node1", "node2", "getIdIntersectionCount", "startInclusive", "endExclusive", "newChildPotentialIdCount", "potentialMatch", "otherMatchCount", "potentialSoftMatch", "siblingSoftMatchCount", "parser", "contentWithSvgsRemoved", "content", "htmlElement", "dummyParent", "stack", "node", "currentElement", "bestElement", "score", "newScore", "scoreElement", "isIdInConsideration", "id", "idIsWithinNode", "targetNode", "idSet", "sourceSet", "matchCount", "populateIdMapForNode", "idMap", "nodeParent", "idElements", "current", "oldContent", "_method", "_delay", "trixEditor", "isElement", "isTurboPermanent", "isActive", "morphAllowed", "defaultOptions", "_newNode", "element", "html", "options", "callbacks", "__spreadProps", "morph_default", "ms", "fn", "invokeEvents", "withInvokeEvents", "receiver", "detail", "callback", "object", "target", "delay", "execute", "result", "error", "invokeDispatchEvent", "method", "args", "receivers", "eventName", "eventOptions", "invokeMorph", "invokeAssignment", "property", "value", "invokeMethod", "performInvoke", "invoke", "payload", "selector", "el", "r", "chain", "javascript_default", "RESPONSE_HEADER", "types", "prepare", "headers", "__spreadValues", "accepts", "val", "tokenize", "value", "name", "status", "strategy", "headers_default", "append", "content", "replace", "_a", "_b", "_c", "_d", "doc", "head", "body", "newHead", "newBody", "render", "frameSources", "event", "frame", "response", "header", "schema", "schema_default", "commandEvents", "stateEvents", "dispatch", "target", "options", "resolve", "evt", "__spreadProps", "active", "add", "payload", "remove", "id", "activity_default", "confirmation", "message", "isTurboMethod", "isTurboForm", "element", "shouldDelegate", "confirmation_default", "events", "eventListener", "register", "eventName", "selectors", "match", "getRegisteredEventForElement", "selector", "el", "isRegisteredForElement", "delegates_default", "fn", "findClosestCommand", "findClosestFrameWithSource", "assignElementValueToPayload", "memo", "option", "buildAttributePayload", "attr", "elements_default", "invokeCommand", "form", "input", "form_default", "finish", "lifecycle_default", "buildURL", "path", "a", "urls_default", "parseError", "error", "parseAndRenderResponse", "invoke", "_", "frame_default", "activeElement", "activePayload", "reset", "amendForm", "method_default", "window_default", "src", "find", "turboFrame", "turboMethod", "drivers_default", "currentLevel", "initialized", "history", "logLevels", "shouldLogEvent", "detail", "key", "logMethod", "logEvent", "type", "commandName", "duration", "typeParts", "lastPart", "logger_default", "observable", "object", "parent", "proxy", "_receiver", "index", "observable_default", "updateElement", "attribute", "attempts", "buildState", "attributes", "stateAttributes", "acc", "restoreState", "state", "page_default", "save", "stored", "storage_default", "stub", "signed", "unsigned", "restore", "saved", "fresh", "pageKey", "pageState", "initialize", "json", "state_default", "v4", "c", "uuids_default", "version_default", "TurboBoost", "Commands", "buildCommandPayload", "commandId", "driver", "startEvent", "K", "U", "X", "O", "Y", "Q", "H", "t", "e", "o", "c", "h", "version_default", "template", "html", "appendHTML", "parent", "child", "addHighlight", "element", "options", "removeHighlight", "outline", "outlineOffset", "key", "value", "coordinates", "rect", "width", "height", "top", "left", "right", "bottom", "attempt", "callback", "DevtoolElement", "event", "SupervisorElement", "devtoolElement", "checked", "name", "el", "TooltipElement", "savedTransform", "added", "dependencies", "exists", "dependency", "add", "src", "integrity", "script", "remove", "removeAll", "dependencies_default", "__spreadProps", "__spreadValues", "supervisorElement", "makeDraggable", "stop", "stopped", "start", "started", "restart", "enabledList", "restartTimeout", "debouncedRestart", "autoRestart", "register", "label", "enabled", "supervisor_default", "appendTooltip", "title", "subtitle", "content", "backgroundColor", "color", "position", "id", "activeTarget", "Devtool", "delegate", "hideTimeout", "debouncedHide", "type", "listener", "data", "active", "tooltip", "coords", "_a", "_b", "targetTooltip", "renderingTooltip", "decorateElementWithDevtool", "mouseenter", "property", "src_default", "TurboBoostElement", "busyDelay", "busyDuration", "ToggleElement", "delay", "ToggleTargetElement", "entry", "parts", "focusTimeout", "deactivateTrixAttributes", "editor", "focusTrixEditorElement", "lastRange", "debouncedFocus", "trixEditorElement", "_", "focus_default", "y", "currentFocusSelector", "ToggleTriggerElement", "$t", "commandStartEvent", "beforeInvokeEvent", "selector", "duration", "reducer", "memo", "view", "index", "Dt", "javascript_default", "event", "Rails", "opts", "event", "submitter", "description", "cancel", "resolve", "event", "wait", "debounce", "fn", "wait", "dispatch", "event", "name", "initialize", "src_default", "Rails", "start", "global", "src_default", "jstz", "e"]
}
