{"version":3,"file":"chunk.9.eb5daec2946733f23581.js","names":["LogLevel","None","Error","Warn","Verbose","Debug","getClientLogConfig","client","_a","__assign","config","logger","loggerProvider","logLevel","getValueByStringPath","obj","path","n","r","replace","_b","__values","split","_c","next","done","attr","value","e","error","a","i","return","call","getClientStates","paths","res","paths_1","paths_1_1","l","debugWrapper","fn","fnName","getLogConfig","getStates","fnContext","args","_i","arguments","length","apply","ignoreDepth","debugContext","type","name","stacktrace","stack","slice","map","text","trim","time","start","Date","toISOString","states","before","result","promise","then","after","end","debug","JSON","stringify","AMPLITUDE_PREFIX","STORAGE_PREFIX","concat","AMPLITUDE_SERVER_URL","getCookieName","apiKey","postKey","limit","substring","filter","Boolean","join","getGlobalScope","globalThis","window","self","global","getQueryParams","globalScope","location","search","reduce","acc","curr","query","key","tryDecodeURIComponent","decodeURIComponent","g","Symbol","iterator","constructor","prototype","ApplicationContextProviderImpl","getApplicationContext","versionName","this","language","getLanguage","platform","os","deviceModel","navigator","languages","EventBridgeImpl","queue","logEvent","event","receiver","push","setEventReceiver","forEach","Object","assign","t","s","p","hasOwnProperty","isEqual","obj1","obj2","typeA","_typeof","primitive_1","isArrayA","Array","isArray","isArrayB","sorted1","keys","sort","sorted2","result_1","entries","ownProps","resArray","PluginType","IdentityStoreImpl","identity","userProperties","listeners","Set","editIdentity","actingUserProperties","actingIdentity","setUserId","userId","setDeviceId","deviceId","setUserProperties","setOptOut","optOut","updateUserProperties","actions","actingProperties","action","properties","_d","_e","_f","_g","commit","setIdentity","getIdentity","originalIdentity","listener","addIdentityListener","add","removeIdentityListener","delete","safeGlobal","AnalyticsConnector","identityStore","eventBridge","applicationContextProvider","getInstance","instanceName","analyticsConnectorInstances","getAnalyticsConnector","BEFORE","ENRICHMENT","DESTINATION","IdentityEventSender","execute","context","o","sH","YH","user_properties","setup","I","Status","returnWrapper","awaitable","Promise","resolve","Unknown","Skipped","Success","RateLimit","PayloadTooLarge","Invalid","Failed","Timeout","SystemError","ServerZone","buildResult","code","message","US","EU","STAGING","PREFIX","Logger","disable","enable","log","console","warn","getDefaultConfig","flushMaxRetries","flushQueueSize","flushIntervalMillis","serverUrl","serverZone","useBatch","Config","options","_optOut","defaultConfig","minIdLength","plan","ingestionMetadata","storageProvider","transportProvider","serverConfig","createServerConfig","defineProperty","get","set","enumerable","configurable","getServerUrl","_serverZone","includes","getResponseBodyString","responseBodyString","body","IdentifyOperation","RevenueProperty","SpecialEventType","Destination","retryTimeout","throttleTimeout","storageKey","scheduled","label","unsent","sent","saveEvents","all","_this","catch","attempts","callback","timeout","addToQueue","list","fulfillRequest","setTimeout","schedule","flush","useRetry","later","clearTimeout","arr","size","chunkSize","Math","max","batches","chunks","element","index","chunkIndex","floor","batch","send","payload","api_key","events","extra","__rest","min_id_length","trys","handleResponse","statusCode","status","e_1","errorMessage","String","handleSuccessResponse","handleInvalidResponse","handlePayloadTooLargeResponse","handleRateLimitResponse","handleOtherResponse","missingField","startsWith","dropIndex","__spreadArray","__read","values","eventsWithInvalidFields","eventsWithMissingFields","eventsWithInvalidIdLengths","silencedEvents","flat","dropIndexSet","retry","has","dropUserIds","exceededDailyQuotaUsers","dropDeviceIds","exceededDailyQuotaDevices","throttledIndex","throttledEvents","dropUserIdsSet","dropDeviceIdsSet","throttledIndexSet","user_id","device_id","from","UUID","random","toString","V","SET","SET_ONCE","ADD","APPEND","PREPEND","REMOVE","PREINSERT","POSTINSERT","UNSET","CLEAR_ALL","REVENUE_PRODUCT_ID","REVENUE_QUANTITY","REVENUE_PRICE","REVENUE_TYPE","REVENUE","IDENTIFY","GROUP_IDENTIFY","TransportType","isValidObject","isValidProperties","property","isValid","value_1","value_1_1","valueElement","Identify","_propertySet","_properties","getUserProperties","_safeSet","setOnce","append","prepend","postInsert","preInsert","remove","unset","clearAll","operation","_validate","userPropertyMap","Revenue","productId","quantity","price","setProductId","setQuantity","setPrice","setRevenueType","revenueType","setRevenue","revenue","setEventProperties","getEventProperties","eventProperties","createIdentifyEvent","identify","eventOptions","event_type","Timeline","applying","plugins","register","plugin","deregister","pluginName","findIndex","splice","teardown","reset","scheduleApply","shift","item","u","c","d","h","f","v","m","y","b","w","E","before_1","before_1_1","enrichment","enrichment_1","enrichment_1_1","destination","executeDestinations","eventClone","AmplitudeCore","initializing","q","dispatchQ","track","bind","timeline","_init","runQueuedFunctions","queueName","queuedFunctions","queuedFunctions_1","queuedFunctions_1_1","eventInput","baseEvent","event_properties","dispatch","groupIdentify","groupType","groupName","group_properties","groups","setGroup","dispatchWithCallback","process","e_2","DCLID","FBCLID","GBRAID","GCLID","KO_CLICK_ID","LI_FAT_ID","MSCLKID","RDT_CID","TTCLID","TWCLID","WBRAID","BASE_CAMPAIGN","utm_campaign","utm_content","utm_id","utm_medium","utm_source","utm_term","referrer","referring_domain","dclid","gbraid","gclid","fbclid","ko_click_id","li_fat_id","msclkid","rtd_cid","ttclid","twclid","wbraid","CampaignParser","parse","getUtmParam","getReferrer","getClickIds","params","data","document","omitUndefined","input","val","pageViewTrackingPlugin","amplitude","pushState","clientOrOptions","configOrUndefined","createPageViewEvent","__awaiter","eventType","getCampaignParams","page_domain","hostname","page_location","href","page_path","pathname","page_title","title","page_url","shouldTrackOnPageLoad","trackOn","previousURL","trackHistoryPageView","newURL","shouldTrackPageView","shouldTrackHistoryPageView","trackHistoryChanges","trackHistoryPageViewWrapper","attribution","trackPageViews","addEventListener","history","Proxy","target","thisArg","state","unused","url","receivedType","isCampaignEvent","pageViewEvent","removeEventListener","__trackHistoryPageView","__generator","$set","$unset","userProperties_1","every","trackingOption","oldURL","domainWithoutSubdomain","domain","parts","XHR","SendBeacon","Fetch","MemoryStorage","memoryStorage","Map","isEnabled","getRaw","clear","Ee","BaseTransport","_serverUrl","_payload","buildResponse","responseJSON","S","buildStatus","eventsIngested","events_ingested","payloadSizeBytes","payload_size_bytes","serverUploadTime","server_upload_time","missing_field","events_with_invalid_fields","events_with_missing_fields","_h","events_with_invalid_id_lengths","epsThreshold","_j","eps_threshold","_k","exceeded_daily_quota_devices","silencedDevices","_l","silenced_devices","_m","silenced_events","throttledDevices","_o","throttled_devices","_p","throttled_events","_q","_r","_s","_t","throttledUsers","_u","throttled_users","_v","_w","exceeded_daily_quota_users","_x","FetchTransport","_super","__extends","fetch","headers","Accept","method","json","responsePayload","CookieStorage","testValue","now","testStrorage","testKey","atob","cookie","match","find","indexOf","expirationDays","expireDate","expires","date","setTime","getTime","str","btoa","encodeURIComponent","toUTCString","secure","sameSite","MAX_ARRAY_LENGTH","LocalStorage","testStorage","localStorage","getItem","isExceededArraySize","serializedValue","setItem","droppedEventsCount","removeItem","XHRTransport","reject","XMLHttpRequest","xhr","open","onreadystatechange","readyState","responseText","parsedResponsePayload","setRequestHeader","SendBeaconTransport","sendBeacon","cookieExpiration","cookieSameSite","cookieSecure","cookieStorage","cookieUpgrade","disableCookies","sessionTimeout","trackingOptions","deviceManufacturer","ipAddress","osName","osVersion","BrowserConfig","lastEventId","lastEventTime","sessionId","appVersion","defaultTracking","partnerId","_deviceId","updateStorage","_userId","_sessionId","_lastEventTime","_lastEventId","cache","useBrowserConfig","Cl","createEventsStorage","createTransport","transport","createCookieStorage","overrides","baseConfig","createFlexibleStorage","storage","hasStorageProviderProperty","DEFAULT_EVENT_PREFIX","DEFAULT_PAGE_VIEW_EVENT","DEFAULT_FORM_START_EVENT","DEFAULT_FORM_SUBMIT_EVENT","DEFAULT_FILE_DOWNLOAD_EVENT","DEFAULT_SESSION_START_EVENT","DEFAULT_SESSION_END_EVENT","FILE_EXTENSION","FILE_NAME","LINK_ID","LINK_TEXT","LINK_URL","FORM_ID","FORM_NAME","FORM_DESTINATION","parseLegacyCookies","oldCookieName","toLowerCase","cookies","decode","parseTime","num","integer","parseInt","isNaN","escape","et","tt","userLanguage","Context","library","userAgent","uaResult","UAParser","getResult","browser","version","device","model","deviceVendor","vendor","nextEventId","event_id","session_id","app_version","os_name","os_version","device_manufacturer","device_model","ip","insert_id","partner_id","ingestion_metadata","source_name","sourceName","source_version","sourceVersion","user_agent","eventPropertyMap","formInteractionTracking","observer","eventListeners","handler","addFormInteractionListener","form","hasFormChanged","id","getElementsByTagName","MutationObserver","mutations","mutation","addedNodes","node","nodeName","querySelectorAll","observe","subtree","childList","disconnect","instance","convertProxyObjectToRealObject","name_1","isInstanceProxy","AmplitudeBrowser","init","C","x","O","M","A","P","L","N","H","D","R","B","z","F","j","U","G","Y","X","W","Z","_y","host","levels","_z","_0","legacyCookies","previousCookies","queryParams","previousSessionDeviceId","previousSessionUserId","browserOptions","isNewSession","setSessionId","connector","fileDownloads","addFileDownloadListener","URL","ext","exec","fileExtension","formInteractions","disabled","webAttribution","excludeReferrers","unshift","initialEmptyValue","resetSessionOnNewCampaign","currentCampaign","previousCampaign","pluginEnabledOverride","__pluginEnabledOverride","current","previous","prevReferringDomain","hasNewCampaign","hasNewDomain","campaignEvent","campaign","campaignParameters","identifyEvent","trackNewCampaigns","pageViewTrackingOptions","pageViews","transformedPropertyName","getUserId","getDeviceId","getSessionId","previousSessionId","sessions","extendSession","setTransport","currentTime","timeSinceLastEvent","createInstance","dt","undefined","FUNC_TYPE","UNDEF_TYPE","OBJ_TYPE","STR_TYPE","MODEL","NAME","TYPE","VENDOR","VERSION","ARCHITECTURE","CONSOLE","MOBILE","TABLET","SMARTTV","WEARABLE","EMBEDDED","AMAZON","APPLE","ASUS","BLACKBERRY","BROWSER","CHROME","FIREFOX","GOOGLE","HUAWEI","LG","MICROSOFT","MOTOROLA","OPERA","SAMSUNG","SHARP","SONY","XIAOMI","ZEBRA","FACEBOOK","enumerize","enums","toUpperCase","str1","str2","lowerize","len","rgxMapper","ua","arrays","k","matches","regex","props","test","strMapper","windowsVersionMap","ME","XP","Vista","RT","regexes","cpu","engine","EDGE","extensions","_ua","_rgxmap","mergedRegexes","getBrowser","_browser","major","getCPU","_cpu","getDevice","_device","getEngine","_engine","getOS","_os","getUA","setUA","CPU","DEVICE","ENGINE","OS","exports","module","define","$","jQuery","Zepto","parser","prop","setPrototypeOf","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","freeze","seal","create","_ref","Reflect","construct","fun","thisValue","Func","_construct","_toConsumableArray","func","arrayForEach","unapply","arrayPop","pop","arrayPush","stringToLowerCase","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","regExpTest","RegExp","typeErrorCreate","TypeError","_len2","_key2","_len","_key","addToSet","array","transformCaseFunc","_transformCaseFunc","lcElement","clone","object","newObject","lookupGetter","desc","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","html","svg","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","purify","createDOMPurify","DOMPurify","root","removed","nodeType","isSupported","originalDocument","DocumentFragment","HTMLTemplateElement","Node","Element","NodeFilter","_window$NamedNodeMap","NamedNodeMap","MozNamedAttrMap","HTMLFormElement","DOMParser","trustedTypes","ElementPrototype","cloneNode","getNextSibling","getChildNodes","getParentNode","template","createElement","content","ownerDocument","trustedTypesPolicy","createPolicy","suffix","ATTR_NAME","currentScript","hasAttribute","getAttribute","policyName","createHTML","createScriptURL","scriptUrl","_","emptyHTML","_document","implementation","createNodeIterator","createDocumentFragment","importNode","documentMode","hooks","createHTMLDocument","PARSER_MEDIA_TYPE","MUSTACHE_EXPR$1","ERB_EXPR$1","TMPLIT_EXPR$1","DATA_ATTR$1","ARIA_ATTR$1","IS_SCRIPT_OR_DATA$1","ATTR_WHITESPACE$1","CUSTOM_ELEMENT$1","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","tagNameCheck","writable","attributeNameCheck","allowCustomizedBuiltInElements","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","SUPPORTED_PARSER_MEDIA_TYPES","CONFIG","formElement","isRegexOrFunction","Function","_parseConfig","cfg","ADD_URI_SAFE_ATTR","ADD_DATA_URI_TAGS","ALLOWED_URI_REGEXP","ADD_TAGS","ADD_ATTR","table","tbody","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","ALL_SVG_TAGS","ALL_MATHML_TAGS","_forceRemove","parentNode","removeChild","outerHTML","_removeAttribute","attribute","getAttributeNode","removeAttribute","setAttribute","_initDocument","dirty","doc","leadingWhitespace","dirtyPayload","parseFromString","documentElement","createDocument","innerHTML","insertBefore","createTextNode","childNodes","_createIterator","SHOW_ELEMENT","SHOW_COMMENT","SHOW_TEXT","SHOW_PROCESSING_INSTRUCTION","SHOW_CDATA_SECTION","_isClobbered","elm","textContent","attributes","namespaceURI","hasChildNodes","_isNode","_executeHook","entryPoint","currentNode","hook","_sanitizeElements","tagName","allowedTags","firstElementChild","_basicCustomElementTest","childClone","__removalCount","parent","parentTagName","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","hookEvent","attrName","attrValue","keepAttr","allowedAttributes","_attr","forceKeepAttr","getAttributeType","setAttributeNS","_sanitizeShadowDOM","fragment","shadowNode","shadowIterator","nextNode","sanitize","importedNode","oldNode","returnNode","toStaticHTML","appendChild","firstChild","nodeIterator","shadowroot","shadowrootmod","serializedHTML","doctype","setConfig","clearConfig","isValidAttribute","tag","addHook","hookFunction","removeHook","removeHooks","removeAllHooks","ee","default","Droppable","Mixin","_currentDrag","classNameBindings","validateDragEvent","acceptDrop","handleDragOver","handleDragOut","dragOver","_droppableIsDraggable","_allowDrop","_resetDroppability","dragEnter","drop","stopPropagation","preventDefault","contains","dragLeave","dragStart","TEMPLATE","createTemplateFactory","block","moduleName","isStrictMode","draggableObjectTarget","setComponentTemplate","Component","overrideClass","isOver","coordinator","_coordinator","getOwner","lookup","handlePayload","getObject","handleDrop","dataTransfer","getData","click","onClick","mouseDown","handleMouseEnter","mouseEnter","didInsertElement","boundHandleMouseEnter","willDestroyElement","acceptForDrop","hashId","draggableObject","dragCoordinator","inject","attributeBindings","isDraggable","dragReady","isSortable","sortingScope","alias","draggable","computed","proxyContent","wrapper","mouseOverHandler","mouseOutHandler","scheduleOnce","dragHandle","querySelector","_this2","setObject","source","setData","dragStartHook","dragStarted","dragEnd","dragEndHook","dragEnded","drag","draggingOver","style","opacity","selectForDrag","sortableObjects","enableSort","useSwap","inPlace","sortableObjectList","pushSortComponent","removeSortComponent","ObjHash","EmberObject","contentLength","generateId","incrementProperty","getObj","Coordinator","Evented","objectMap","ops","isDestroying","isDestroyed","trigger","unwrapper","coordinatorSetup","initialize","items","Service","sortComponentController","currentDragObject","currentDragEvent","currentDragItem","currentOffsetItem","isMoving","lastEvent","arrayList","component","pushObject","removeObject","emberObject","effectAllowed","pos","relativeClientPosition","hasSameSortingScope","moveDirections","clientY","clientX","py","px","moveElements","moveObjectPositions","sortComponents","aSortable","sortable","bSortable","toArray","aPos","bPos","removeAt","insertAt","aList","bList","overElement","draggingItem","rerender","el","rect","getBoundingClientRect","left","top","width","height","toPrimitive","objectToProxy","isNone","guidKey","guidFor","_defineProperty","objectToUnproxy","unwrappingKey","keyList","hasProp","equal","arrA","arrB","dateA","dateB","regexpA","regexpB","monadic","serializer","arg","cacheKey","computedValue","variadic","assemble","strategy","serialize","strategyDefault","serializerDefault","ObjectWithoutPrototypeCache","cacheDefault","strategies","CallbackType","Registry","registry","WeakMap","elementExists","elem","getElement","addElement","removeElement","destroyRegistry","noop","enter","exit","Notifications","addCallback","entry","dispatchCallback","found","__proto__","IntersectionObserverAdmin","elementRegistry","setupObserver","unobserve","matchingRootEntry","findMatchingRootEntry","intersectionObserver","addEnterCallback","addExitCallback","dispatchEnterCallback","dispatchExitCallback","destroy","setupOnIntersection","ioEntries","onIntersection","matchingEntryForRoot","potentialRootMatch","findRootFromRegistry","determineMatchingElements","elements","observerEntry","newObserver","stringifiedOptions","stringifyOptions","rootMargin","threshold","newIO","IntersectionObserver","isIntersecting","intersectionRatio","some","matchingRoot","matchingStringifiedOptions","comparableOptions","areOptionsSame","type1","type2","classToken","classList","SKELETON_TYPE","SyntaxError","createLiteralElement","createNumberElement","isArgumentElement","isDateElement","isDateTimeSkeleton","isLiteralElement","isNumberElement","isNumberSkeleton","isPluralElement","isPoundElement","isSelectElement","isTagElement","isTimeElement","pegParse","literal","argument","number","select","plural","pound","dateTime","DATE_TIME_REGEX","FRACTION_PRECISION_REGEX","SIGNIFICANT_PRECISION_REGEX","INTEGER_WIDTH_REGEX","CONCISE_INTEGER_WIDTH_REGEX","parseSignificantPrecision","g1","g2","minimumSignificantDigits","maximumSignificantDigits","parseSign","signDisplay","currencySign","parseConciseScientificAndEngineeringStem","stem","notation","minimumIntegerDigits","parseNotationOptions","opt","parseNumberSkeleton","tokens","tokens_1","token","scale","currency","useGrouping","maximumFractionDigits","unit","compactDisplay","currencyDisplay","unitDisplay","parseFloat","RangeError","g3","g4","g5","minimumFractionDigits","signOpts","conciseScientificAndEngineeringOpts","expected","captureStackTrace","buildMessage","hex","ch","charCodeAt","literalEscape","classEscape","describeExpectation","expectation","escapedParts","part","inverted","description","expected1","descriptions","found1","peg$result","peg$FAILED","peg$startRuleFunctions","peg$parsestart","peg$startRuleFunction","peg$c0","ignoreTag","peg$c1","peg$c2","peg$c3","peg$c4","peg$literalExpectation","peg$c5","peg$c6","peg$c7","messageText","insertLocation","peg$c8","peg$c9","peg$c10","peg$c11","peg$otherExpectation","peg$c12","children","close","peg$c13","peg$c14","peg$c15","peg$c16","peg$c17","peg$c18","peg$c19","peg$c20","peg$c21","peg$c22","peg$c23","peg$c24","peg$c25","peg$c26","peg$c27","peg$c28","peg$c29","peg$classExpectation","peg$c30","peg$c31","peg$c32","peg$c33","peg$c34","option","peg$c35","peg$c36","peg$c37","parsedOptions","shouldParseSkeleton","peg$c38","peg$c39","peg$c40","skeleton","peg$c41","messageCtx","peg$c42","peg$c43","peg$c44","peg$c45","peg$c46","peg$c47","peg$c48","peg$c49","peg$c50","peg$c51","peg$c52","peg$c53","peg$c54","peg$c55","peg$c56","pattern","era","year","month","day","weekday","hour12","hourCycle","hour","minute","second","timeZoneName","peg$c57","peg$c58","peg$c59","peg$c60","peg$c61","peg$c62","peg$c63","peg$c64","peg$c65","peg$c66","peg$c67","peg$c68","pluralType","offset","optionLocation","peg$c69","peg$c70","peg$c71","peg$c72","peg$c73","peg$c74","peg$c75","peg$c76","peg$c77","peg$c78","peg$c79","peg$c80","peg$c81","peg$c82","peg$c83","peg$c84","peg$c85","peg$c86","peg$c87","peg$c88","negative","peg$c90","peg$c91","peg$c92","peg$c93","peg$c94","escapedChar","quotedChars","peg$c95","isInPluralOption","peg$c96","peg$c97","peg$c98","peg$c99","peg$c100","peg$c101","peg$c102","peg$c103","peg$c104","peg$c105","peg$c106","peg$c107","peg$c108","peg$c109","digits","peg$c110","peg$c111","peg$currPos","peg$savedPos","peg$posDetailsCache","line","column","peg$maxFailPos","peg$maxFailExpected","peg$silentFails","startRule","peg$computeLocation","location1","text1","ignoreCase","peg$computePosDetails","details","startPos","endPos","startPosDetails","endPosDetails","peg$fail","peg$parsemessage","s0","s1","peg$parsemessageElement","s2","s3","peg$parseselfClosingTag","peg$parseopeningTag","peg$parseclosingTag","peg$parsemessageText","s5","peg$parse_","peg$parseargNameOrNumber","s7","s9","s10","s11","s12","substr","peg$parsenumberSkeletonToken","peg$parsedateTimeSkeletonLiteral","peg$parsedateTimeSkeletonPattern","s13","s14","s15","peg$parsenumber","peg$parsepluralOption","peg$parseselectOption","peg$parsedoubleApostrophes","peg$parsequotedString","peg$parseunquotedString","peg$parsenonTagStartingAngleBracket","s4","peg$parsevalidTag","peg$parsenumberSkeletonId","peg$parsewhiteSpace","charAt","peg$parsenumberSkeletonTokenOption","s6","peg$parseargName","peg$parsepatternSyntax","peg$parseargNumber","captureLocation","PLURAL_HASHTAG_REGEX","normalizeHashtagInPlural","els","matchingLiteralElIndex","literalEl","el_1","newValue","newEls","opts","ErrorCode","fe","FormatError","ye","IntlMessageFormat","xe","InvalidValueError","be","InvalidValueTypeError","we","MissingValueError","PART_TYPE","ge","Oe","formatToParts","Te","isFormatXMLElementFn","Se","ErrorKind","EXPECT_ARGUMENT_CLOSING_BRACE","EMPTY_ARGUMENT","MALFORMED_ARGUMENT","EXPECT_ARGUMENT_TYPE","INVALID_ARGUMENT_TYPE","EXPECT_ARGUMENT_STYLE","INVALID_NUMBER_SKELETON","INVALID_DATE_TIME_SKELETON","EXPECT_NUMBER_SKELETON","EXPECT_DATE_TIME_SKELETON","UNCLOSED_QUOTE_IN_ARGUMENT_STYLE","EXPECT_SELECT_ARGUMENT_OPTIONS","EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE","INVALID_PLURAL_ARGUMENT_OFFSET_VALUE","EXPECT_SELECT_ARGUMENT_SELECTOR","EXPECT_PLURAL_ARGUMENT_SELECTOR","EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT","EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT","INVALID_PLURAL_ARGUMENT_SELECTOR","DUPLICATE_PLURAL_ARGUMENT_SELECTOR","DUPLICATE_SELECT_ARGUMENT_SELECTOR","MISSING_OTHER_CLAUSE","INVALID_TAG","INVALID_TAG_NAME","UNMATCHED_CLOSING_TAG","UNCLOSED_TAG","SPACE_SEPARATOR_REGEX","parseDateTimeSkeleton","WHITE_SPACE_REGEX","roundingPriority","trailingZeroDisplay","timeData","AX","BQ","CP","CZ","DK","FI","ID","IS","ML","NE","RU","SE","SJ","SK","AS","BT","DJ","ER","GH","IN","LS","PG","PW","SO","TO","VU","WS","AL","TD","CF","CM","LU","NP","PF","SC","SM","SN","TF","VA","CY","GR","CO","DO","KP","KR","NA","PA","PR","VE","AC","AI","BW","BZ","CC","CK","CX","DG","FK","GB","GG","GI","IE","IM","IO","JE","LT","MK","MN","MS","NF","NG","NR","NU","PN","SH","SX","TA","ZA","AR","CL","CR","CU","EA","GT","HN","IC","KG","KM","LK","MA","MX","NI","PY","SV","UY","JP","AD","AM","AO","AT","AW","BE","BF","BJ","BL","BR","CG","CI","CV","DE","EE","FR","GA","GF","GN","GP","GW","HR","IL","IT","KZ","MC","MD","MF","MQ","MZ","NC","NL","PM","PT","RE","RO","SI","SR","ST","TG","TR","WF","YT","BD","PK","AZ","BA","BG","CH","GE","LI","RS","UA","UZ","XK","AG","AU","BB","BM","BS","CA","DM","FJ","FM","GD","GM","GU","GY","JM","KI","KN","KY","LC","LR","MH","MP","MW","NZ","SB","SG","SL","SS","SZ","TC","TT","UM","VC","VG","VI","ZM","BO","EC","ES","GQ","PE","AE","BH","DZ","EG","EH","HK","IQ","JO","KW","LB","LY","MO","MR","OM","PH","PS","QA","SA","SD","SY","TN","YE","AF","LA","CN","LV","TL","CD","IR","KH","BN","MY","ET","TW","KE","MM","TZ","UG","getDefaultHourSymbolFromLocale","locale","hourCycles","regionTag","languageTag","maximize","region","SPACE_SEPARATOR_START_REGEX","SPACE_SEPARATOR_END_REGEX","createLocation","hasNativeStartsWith","hasNativeFromCodePoint","fromCodePoint","hasNativeFromEntries","fromEntries","hasNativeCodePointAt","codePointAt","hasTrimStart","trimStart","hasTrimEnd","trimEnd","isSafeInteger","Number","isFinite","abs","REGEX_SUPPORTS_U_AND_Y","matchIdentifierAtIndex","position","codePoints","fromCharCode","entries_1","first","flag","IDENTIFIER_PREFIX_RE_1","lastIndex","_isWhiteSpace","_isPatternSyntax","Parser","requiresOtherClause","shouldParseSkeletons","parseMessage","nestingLevel","parentArgType","expectingCloseTag","isEOF","char","parseArgument","err","peek","clonePosition","_isAlpha","parseTag","parseLiteral","bump","startPosition","parseTagName","bumpSpace","bumpIf","childrenResult","endTagStartPosition","closingTagNameStartPosition","startOffset","parseQuoteResult","tryParseQuote","parseUnquotedResult","tryParseUnquoted","parseLeftAngleResult","tryParseLeftAngleBracket","codepoint","openingBracePosition","parseIdentifierIfPossible","parseArgumentOptions","startingPosition","endOffset","bumpTo","typeStartPosition","argType","typeEndPosition","styleAndLocation","styleStartPosition","parseSimpleArgStyleIfPossible","styleLocation","argCloseResult","tryParseArgumentClose","location_1","parseNumberSkeletonFromString","dateTimePattern","skeletonCopy","patternPos","patternChar","extraLength","hourLen","dayPeriodLen","hourChar","typeEndPosition_1","identifierAndLocation","pluralOffset","tryParseDecimalInteger","optionsResult","tryParsePluralOrSelectOptions","location_2","nestedBraces","apostrophePosition","bumpUntil","stringTokens_1","stemAndOptions","options_1","expectCloseTag","parsedFirstIdentifier","hasOtherClause","parsedSelectors","selector","selectorLocation","fragmentResult","expectNumberError","invalidNumberError","sign","hasDigits","decimal","kind","prefix","currentOffset","targetOffset","min","nextCode","pruneLocation","originalMessage","memoize","MISSING_VALUE","INVALID_VALUE","MISSING_INTL_API","msg","variableId","locales","formatters","formats","currentPluralValue","els_1","getNumberFormat","format","varName","getDateTimeFormat","medium","formatFn","other","Intl","PluralRules","rule","getPluralRules","lastPart","createFastMemoizeCache","store","overrideFormats","configs","defaultLocale","formatterCache","pluralRules","ast","resolvedOptions","resolvedLocale","getAst","resolveLocale","__parse","c1","c2","NumberFormat","DateTimeFormat","memoizedDefaultLocale","supportedLocales","supportedLocalesOf","Locale","percent","short","long","full","requestId","RAFAdmin","pool","requestAnimationFrame","elementId","stop","cancelAnimationFrame","_toPropertyKey","RemotePromise","Constructor","_status","toStringTag","_promise","_resolve","_reject","protoProps","assertPending","reason","descriptor","_defineProperties","isObject","extend","src","A11y","$e","Autoplay","Je","Controller","je","EffectCoverflow","EffectCube","ot","EffectFade","nt","EffectFlip","lt","HashNavigation","Ke","History","qe","Keyboard","Lazy","Be","Mousewheel","Navigation","Pagination","Parallax","Pe","Scrollbar","Ie","Swiper","de","Thumbs","ft","Virtual","ve","Zoom","He","ssrDocument","activeElement","blur","getElementById","createEvent","initEvent","createElementNS","hash","origin","protocol","getDocument","ssrWindow","replaceState","go","back","CustomEvent","getComputedStyle","getPropertyValue","Image","screen","matchMedia","getWindow","win","_getPrototypeOf","_setPrototypeOf","Parent","Class","sham","_wrapNativeSuper","_cache","Wrapper","Dom7","_Array","subClass","superClass","proto","ReferenceError","arrayFlat","arrayFilter","toCreate","tempParent","uniqueArray","noTrigger","shortcut","on","Methods","addClass","classes","classNames","_el$classList","removeClass","_el$classList2","hasClass","_len4","_key4","className","toggleClass","_len3","_key3","toggle","attrs","removeAttr","transform","transition","duration","transitionDuration","_len5","_key5","targetSelector","capture","handleLiveEvent","eventData","dom7EventData","is","_parents","parents","handleEvent","_event","dom7LiveListeners","proxyListener","dom7Listeners","off","_len6","_key6","handlers","dom7proxy","_len9","_key9","evt","detail","bubbles","cancelable","dataIndex","dispatchEvent","transitionEnd","dom","fireCallBack","outerWidth","includeMargins","_styles","styles","offsetWidth","outerHeight","_styles2","offsetHeight","box","clientTop","clientLeft","scrollTop","scrollY","scrollLeft","scrollX","css","_prop","each","compareWith","webkitMatchesSelector","msMatchesSelector","child","previousSibling","eq","returnIndex","newChild","tempDiv","nextElementSibling","nextAll","nextEls","_next","prev","previousElementSibling","prevAll","prevEls","_prev","_parent","closest","foundElements","methodName","support","nextTick","delay","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","currentStyle","WebKitCSSMatrix","webkitTransform","MozTransform","OTransform","MsTransform","msTransform","m41","m42","to","noExtend","nextSource","HTMLElement","keysArray","nextIndex","nextKey","__swiper__","bindModuleMethods","subKey","classesToSelector","createElementIfNotDefined","$container","createElements","checkProps","auto","getSupport","touch","DocumentTouch","pointerEvents","PointerEvent","maxTouchPoints","passiveListener","supportsPassive","gestures","swiper","resize","createObserver","destroyed","initialized","ResizeObserver","newWidth","newHeight","contentBoxSize","contentRect","inlineSize","blockSize","resizeHandler","removeObserver","emit","orientationChangeHandler","resizeObserver","_extends","Observer","attach","WebkitMutationObserver","observerUpdate","characterData","observers","observeParents","containerParents","$el","observeSlideChildren","$wrapperEl","priority","eventsListeners","once","onceHandler","__emitterProxy","onAny","eventsAnyListeners","offAny","eventHandler","updateSize","clientWidth","clientHeight","isHorizontal","isVertical","updateSlides","getDirectionLabel","marginRight","getDirectionPropertyValue","swiperSize","rtl","rtlTranslate","wrongRTL","isVirtual","virtual","enabled","previousSlidesLength","slides","slideClass","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","slidesNumberEvenToRows","slideSize","virtualSize","marginLeft","marginBottom","marginTop","slidesPerColumn","ceil","slidesPerView","slidesPerColumnFill","newSlidesGrid","_$wrapperEl$css","_$wrapperEl$css2","slidesPerRow","numFullColumns","slide","newSlideOrderIndex","row","slidesPerGroup","groupIndex","slideIndexInGroup","columnsInGroup","order","slideStyles","currentTransform","currentWebKitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","_slide$","swiperSlideSize","centeredSlides","slidesPerGroupSkip","effect","setWrapperSize","slidesGridItem","_i2","_slidesGridItem","_slides$filter$css","slideIndex","cssMode","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","_allSlidesSize","allSlidesOffset","snapIndex","watchOverflow","checkOverflow","watchSlidesProgress","watchSlidesVisibility","updateSlidesOffset","updateAutoHeight","speed","activeSlides","setTransition","getSlideByIndex","visibleSlides","activeIndex","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","translate","offsetCenter","slideVisibleClass","visibleSlidesIndexes","slideProgress","minTranslate","autoHeight","slideBefore","slideAfter","progress","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","wasBeginning","wasEnd","updateSlidesClasses","activeSlide","realIndex","slideActiveClass","slideNextClass","slidePrevClass","slideDuplicateActiveClass","slideDuplicateNextClass","slideDuplicatePrevClass","loop","slideDuplicateClass","nextSlide","prevSlide","emitSlidesClasses","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","normalizeSlideIndex","skip","runCallbacksOnInit","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","slideTo","runCallbacks","internal","initial","indexAsNumber","wrapperEl","animating","preventInteractionOnTransition","initialSlide","direction","normalizedTranslate","normalizedGird","normalizedGridNext","allowSlideNext","allowSlidePrev","setTranslate","transitionStart","_wrapperEl$scrollTo","isH","scrollWidth","scrollTo","behavior","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","loopedSlides","slideNext","increment","loopPreventsSlide","loopFix","_clientLeft","slidePrev","normalize","prevIndex","normalizedSnapGrid","prevSnap","slideReset","slideToClosest","currentSnap","slidesPerViewDynamic","slideToIndex","loopCreate","loopFillGroupWithBlank","blankSlidesNum","blankNode","slideBlankClass","loopAdditionalSlides","prependSlides","appendSlides","diff","loopDestroy","onTouchStart","touchEventsData","touches","originalEvent","$targetEl","touchEventsTarget","isTouchEvent","which","button","isTouched","isMoved","noSwipingClass","shadowRoot","noSwipingSelector","isTargetShadow","noSwiping","base","__closestFrom","assignedSlot","getRootNode","allowClick","swipeHandler","currentX","targetTouches","pageX","currentY","pageY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","innerWidth","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","onTouchMove","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","touchAngle","diffX","diffY","sqrt","pow","atan2","PI","touchMoveStopPropagation","nested","startTranslate","allowMomentumBounce","grabCursor","setGrabCursor","touchRatio","currentTranslate","disableParentSwiper","resistanceRatio","resistance","followFinger","freeMode","velocities","onTouchEnd","currentPos","touchEndTime","timeDiff","lastClickTime","freeModeMomentum","lastMoveEvent","velocityEvent","distance","velocity","freeModeMinimumVelocity","freeModeMomentumVelocityRatio","momentumDuration","freeModeMomentumRatio","momentumDistance","newPosition","afterBouncePosition","needsLoopFix","doBounce","bounceAmount","freeModeMomentumBounceRatio","freeModeMomentumBounce","freeModeSticky","moveDistance","currentSlideSize","longSwipesMs","stopIndex","groupSize","_increment","ratio","longSwipes","longSwipesRatio","shortSwipes","navigation","nextEl","prevEl","onResize","breakpoints","setBreakpoint","autoplay","running","paused","run","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","previousTranslate","dummyEventAttached","dummyEventListener","ne","attachEvents","touchEvents","move","passiveListeners","passive","cancel","simulateTouch","ios","android","updateOnWindowResize","detachEvents","re","ie","addClasses","resultClasses","suffixes","autoheight","multirow","containerModifierClass","emitContainerClasses","removeClasses","oe","virtualTranslate","breakpointsBase","uniqueNavElements","preloadImages","updateOnImagesReady","wrapperClass","_emitClasses","ae","prototypes","modular","useParams","instanceParams","modules","useModules","modulesParams","moduleParams","moduleEventName","eventsEmitter","update","byController","translateTo","translateBounds","newTranslate","onTranslateToWrapperTransitionEnd","dir","moving","isLocked","cursor","unsetGrabCursor","manipulation","appendSlide","prependSlide","addSlide","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","_swiper$loopedSlides","breakpoint","getBreakpoint","currentBreakpoint","breakpointOnlyParams","param","paramValue","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","directionChanged","needsReLoop","changeDirection","containerEl","currentHeight","innerHeight","points","point","minRatio","_points$i","wasLocked","lastSlidePosition","images","loadImage","imageEl","srcset","sizes","checkForComplete","image","onReady","complete","onload","onerror","imagesLoaded","imagesToLoad","currentSrc","extendedDefaults","swipers","newParams","_temp","screenWidth","screenHeight","ipad","ipod","iphone","windows","macos","isEdge","isSafari","isWebView","moduleParamName","desktop","swiperParams","defaults","passedParams","eventName","touchEventsTouch","touchEventsDesktop","clickTimeout","staticProps","_proto","setProgress","getSlideClasses","slideEl","updates","spv","breakLoop","translateValue","newDirection","needUpdate","currentDirection","mount","mounted","getWrapperSelector","deleteInstance","cleanStyles","extendDefaults","newDefaults","installModule","use","prototypeGroup","protoMethod","Resize","ce","pe","force","_swiper$params","_swiper$params$virtua","addSlidesBefore","addSlidesAfter","_swiper$virtual","previousFrom","previousTo","previousSlidesGrid","renderSlide","previousOffset","offsetProp","slidesAfter","slidesBefore","onRendered","lazy","load","renderExternal","slidesToRender","renderExternalUpdate","prependIndexes","appendIndexes","$slideEl","numberOfNewSlides","newCache","cachedIndex","$cachedEl","cachedElIndex","beforeInit","overwriteParams","handle","kc","keyCode","charCode","pageUpDown","keyboard","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","shiftKey","altKey","ctrlKey","metaKey","onlyInViewport","inView","swiperWidth","swiperHeight","windowWidth","windowHeight","swiperOffset","swiperCoord","returnValue","lastScrollTime","lastEventBeforeSnap","recentWheelEvents","hasFeature","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","mouseEntered","handleMouseLeave","mousewheel","eventsTarget","releaseOnEdges","delta","rtlFactor","forceToAxis","invert","positions","sensitivity","_newEvent","ignoreWheelEvents","_recentWheelEvents","_prevEvent","firstEvent","snapToThreshold","autoplayDisableOnInteraction","newEvent","raw","prevEvent","animateSlider","releaseScroll","thresholdDelta","thresholdTime","toggleEl","disabledClass","_swiper$navigation","$nextEl","$prevEl","lockClass","onPrevClick","onNextClick","_swiper$navigation2","hideOnClick","hiddenClass","toEdge","fromEdge","_swiper$navigation3","_swiper$navigation4","targetEl","pagination","clickable","isHidden","total","paginationType","bullets","firstIndex","midIndex","dynamicBullets","bulletSize","dynamicMainBullets","dynamicBulletIndex","bulletActiveClass","bullet","$bullet","bulletIndex","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","currentClass","formatFractionCurrent","totalClass","formatFractionTotal","progressbarDirection","progressbarOpposite","scaleX","scaleY","progressbarFillClass","renderCustom","render","paginationHTML","numberOfBullets","renderBullet","bulletClass","bulletElement","renderFraction","renderProgressbar","clickableClass","modifierClass","progressbarOppositeClass","activeIndexChange","snapIndexChange","slidesLengthChange","snapGridLengthChange","scrollbar","dragSize","trackSize","$dragEl","newSize","newPos","hide","divider","moveDivider","display","getPointerPosition","setDragPosition","positionRatio","dragStartPos","onDragStart","dragTimeout","onDragMove","onDragEnd","snapOnRelease","enableDraggable","activeListener","disableDraggable","$swiperEl","dragClass","dragEl","setTransform","currentOpacity","currentScale","parallax","parallaxEl","$parallaxEl","parallaxDuration","getDistanceBetweenTouches","x1","y1","x2","y2","onGestureStart","zoom","gesture","fakeGestureTouched","fakeGestureMoved","scaleStart","$imageEl","$imageWrapEl","containerClass","maxRatio","isScaling","onGestureChange","scaleMove","onGestureEnd","touchesStart","slideWidth","slideHeight","scaledWidth","scaledHeight","minX","maxX","minY","maxY","touchesCurrent","prevPositionX","prevPositionY","prevTime","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","onTransitionEnd","out","in","touchX","touchY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","zoomedSlideClass","toggleGestures","slideSelector","enableGestures","gesturesEnabled","disableGestures","activeListenerWithCapture","touchStart","touchEnd","doubleTap","slideChange","loadInSlide","loadInDuplicate","$images","elementClass","loadedClass","loadingClass","background","$pictureEl","sourceEl","$source","preloaderClass","slideOriginalIndex","originalSlide","duplicatedSlide","slideExist","initialImageLoaded","loadPrevNext","loadPrevNextAmount","amount","maxIndex","minIndex","checkInViewOnLoad","$scrollElement","scrollingElement","isWindow","scrollElementWidth","scrollElementHeight","scrollHandlerAttached","checkInView","loadOnTransitionStart","scroll","LinearSpline","guess","i1","i3","interpolate","getInterpolateFunction","controller","spline","_setTranslate","controlledTranslate","controlled","control","setControlledTranslate","by","inverse","setControlledTransition","getRandomNumber","repeat","round","makeElFocusable","makeElNotFocusable","addElRole","role","addElRoleDescription","addElControls","controls","addElLabel","addElId","addElLive","live","disableEl","enableEl","onEnterOrSpaceKey","a11y","notify","lastSlideMessage","nextSlideMessage","firstSlideMessage","prevSlideMessage","notification","liveRegion","updateNavigation","updatePagination","bulletEl","$bulletEl","paginationBulletMessage","$containerEl","containerRoleDescriptionMessage","containerMessage","wrapperId","itemRoleDescriptionMessage","slideRole","ariaLabelMessage","slideLabelMessage","notificationClass","afterInit","paginationUpdate","hashNavigation","getPathValues","scrollToSlide","setHistoryPopState","urlOverride","pathArray","setHistory","slugify","currentState","onHashChange","newHash","setHash","watchState","$activeSlideEl","autoplayResult","reverseDirection","stopOnLastSlide","pause","waitForTransition","onVisibilityChange","visibilityState","onMouseEnter","disableOnInteraction","onMouseLeave","attachMouseEvents","pauseOnMouseEnter","detachMouseEvents","beforeTransitionStart","sliderFirstMove","Fade","tx","ty","slideOpacity","fadeEffect","crossFade","eventTriggered","triggerEvents","Cube","$cubeShadowEl","cubeEffect","wrapperRotate","shadow","slideAngle","tz","slideShadows","shadowBefore","shadowAfter","shadowOffset","shadowScale","shadowAngle","sin","cos","scale1","scale2","zFactor","Flip","flipEffect","limitRotation","rotateY","rotateX","zIndex","Coverflow","coverflowEffect","center","rotate","depth","offsetMultiplier","modifier","translateZ","stretch","slideTransform","$shadowBeforeEl","$shadowAfterEl","thumbsParams","thumbs","SwiperClass","swiperCreated","thumbsContainerClass","onThumbClick","thumbsSwiper","slideThumbActiveClass","currentIndex","autoScrollOffset","useOffset","newThumbsIndex","currentThumbsIndex","prevThumbsIndex","nextThumbsIndex","thumbsToActivate","thumbActiveClass","multipleActiveThumbs","beforeDestroy","le","isBrowser","timeoutDuration","longerTimeoutBrowsers","debounce","called","isFunction","functionToCheck","getStyleComputedProperty","defaultView","getScrollParent","overflow","_getStyleComputedProp","overflowX","overflowY","getReferenceNode","reference","referenceNode","isIE11","MSInputMethodContext","isIE10","isIE","getOffsetParent","noOffsetParent","offsetParent","getRoot","findCommonOffsetParent","element1","element2","compareDocumentPosition","DOCUMENT_POSITION_FOLLOWING","range","createRange","setStart","setEnd","commonAncestorContainer","element1root","getScroll","upperSide","getBordersSize","sideA","sideB","getSize","computedStyle","getWindowSizes","T","getClientRect","offsets","right","bottom","horizScrollbar","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","subtract","isFixed","getFixedPositionOffsetParent","parentElement","getBoundaries","popper","padding","boundariesElement","boundaries","excludeScroll","relativeOffset","boundariesNode","_getWindowSizes","isPaddingNumber","computeAutoPlacement","placement","refRect","rects","sortedAreas","area","filteredAreas","_ref2","computedPlacement","variation","getReferenceOffsets","getOuterSizes","getOppositePlacement","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","check","runModifiers","modifiers","ends","cur","function","arrowStyles","flipped","positionFixed","flip","originalPlacement","isCreated","onUpdate","onCreate","isModifierEnabled","modifierName","getSupportedPropertyName","prefixes","upperProp","toCheck","willChange","disableEventListeners","removeOnDestroy","attachToScrollParents","scrollParents","isBody","setupEventListeners","updateBound","scrollElement","eventsEnabled","enableEventListeners","scheduleUpdate","isNumeric","setStyles","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","reverse","basePlacement","shiftvariation","_data$offsets","side","shiftOffsets","useHeight","fragments","frag","splitRegex","op","mergeWithPrevious","index2","preventOverflow","transformProp","popperStyles","primary","escapeWithReference","secondary","keepTogether","opSide","arrow","arrowElement","sideCapitalized","altSide","arrowElementSize","popperMarginSide","popperBorderSide","sideValue","_data$offsets$arrow","placementOpposite","flipOrder","step","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","inner","subtractLength","bound","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","devicePixelRatio","prefixedProperty","invertTop","invertLeft","applyStyle","onLoad","modifierOptions","Defaults","J","Popper","jquery","Utils","PopperUtils","te","DEFAULT_OPTIONS","container","arrowSelector","innerSelector","Tooltip","se","_isOpen","_popperOptions","_setEventListeners","allowHtml","tooltipGenerator","tooltipNode","titleNode","_addTitleContent","_isOpening","_tooltipNode","visibility","popperInstance","_create","_findContainer","_append","popperOptions","_events","_hide","directEvents","oppositeEvents","usedByTooltip","_scheduleShow","_scheduleHide","closeOnClickOutside","computedDelay","show","_showTimeout","_this3","_show","_this4","_setTooltipNodeEvent","_clearTitleContent","lastTitle","_this5","dispose","_dispose","updateTitleContent","_updateTitleContent","relatedreference","toElement","relatedTarget","evt2","relatedreference2","C6","Ju","Tt","fX","zs","extendStatics","__","getOwnPropertySymbols","propertyIsEnumerable","_arguments","generator","fulfilled","rejected","throw","verb","ar","pack","SuppressedError"],"sources":["webpack://__ember_auto_import__/src/logger.ts","webpack://__ember_auto_import__/src/utils/debug.ts","webpack://__ember_auto_import__/src/constants.ts","webpack://__ember_auto_import__/src/cookie-name.ts","webpack://__ember_auto_import__/src/global-scope.ts","webpack://__ember_auto_import__/src/query-params.ts","webpack://__ember_auto_import__/node_modules/@amplitude/analytics-connector/dist/analytics-connector.esm.js","webpack://__ember_auto_import__/src/plugin.ts","webpack://__ember_auto_import__/src/analytics-connector.ts","webpack://__ember_auto_import__/src/plugins/identity.ts","webpack://__ember_auto_import__/src/default-tracking.ts","webpack://__ember_auto_import__/src/status.ts","webpack://__ember_auto_import__/src/utils/return-wrapper.ts","webpack://__ember_auto_import__/src/messages.ts","webpack://__ember_auto_import__/src/server-zone.ts","webpack://__ember_auto_import__/src/utils/result-builder.ts","webpack://__ember_auto_import__/src/config.ts","webpack://__ember_auto_import__/src/plugins/destination.ts","webpack://__ember_auto_import__/src/event.ts","webpack://__ember_auto_import__/src/utils/chunk.ts","webpack://__ember_auto_import__/src/utils/uuid.ts","webpack://__ember_auto_import__/src/utils/valid-properties.ts","webpack://__ember_auto_import__/src/transport.ts","webpack://__ember_auto_import__/src/identify.ts","webpack://__ember_auto_import__/src/revenue.ts","webpack://__ember_auto_import__/src/utils/event-builder.ts","webpack://__ember_auto_import__/src/timeline.ts","webpack://__ember_auto_import__/src/core-client.ts","webpack://__ember_auto_import__/src/attribution/constants.ts","webpack://__ember_auto_import__/src/attribution/campaign-parser.ts","webpack://__ember_auto_import__/src/utils.ts","webpack://__ember_auto_import__/src/page-view-tracking.ts","webpack://__ember_auto_import__/src/helpers.ts","webpack://__ember_auto_import__/src/storage/memory.ts","webpack://__ember_auto_import__/src/transports/base.ts","webpack://__ember_auto_import__/src/transports/fetch.ts","webpack://__ember_auto_import__/src/storage/cookie.ts","webpack://__ember_auto_import__/src/storage/local-storage.ts","webpack://__ember_auto_import__/src/transports/xhr.ts","webpack://__ember_auto_import__/src/transports/send-beacon.ts","webpack://__ember_auto_import__/src/cookie-migration/index.ts","webpack://__ember_auto_import__/src/language.ts","webpack://__ember_auto_import__/src/plugins/context.ts","webpack://__ember_auto_import__/src/version.ts","webpack://__ember_auto_import__/src/plugins/default-page-view-event-enrichment.ts","webpack://__ember_auto_import__/src/plugins/form-interaction-tracking.ts","webpack://__ember_auto_import__/src/utils/snippet-helper.ts","webpack://__ember_auto_import__/src/browser-client.ts","webpack://__ember_auto_import__/src/plugins/file-download-tracking.ts","webpack://__ember_auto_import__/src/web-attribution.ts","webpack://__ember_auto_import__/src/browser-client-factory.ts","webpack://__ember_auto_import__/src/index.ts","webpack://__ember_auto_import__/node_modules/@amplitude/ua-parser-js/src/ua-parser.js","webpack://__ember_auto_import__/src/utils.js","webpack://__ember_auto_import__/src/tags.js","webpack://__ember_auto_import__/src/attrs.js","webpack://__ember_auto_import__/src/regexp.js","webpack://__ember_auto_import__/src/purify.js","webpack://__ember_auto_import__/src/mixins/droppable.js","webpack://__ember_auto_import__/src/components/draggable-object-target.hbs","webpack://__ember_auto_import__/src/components/draggable-object-target.js","webpack://__ember_auto_import__/src/components/draggable-object.hbs","webpack://__ember_auto_import__/src/components/draggable-object.js","webpack://__ember_auto_import__/src/components/sortable-objects.hbs","webpack://__ember_auto_import__/src/components/sortable-objects.js","webpack://__ember_auto_import__/src/models/obj-hash.js","webpack://__ember_auto_import__/src/models/coordinator.js","webpack://__ember_auto_import__/src/initializers/coordinator-setup.js","webpack://__ember_auto_import__/src/services/drag-coordinator.js","webpack://__ember_auto_import__/src/utils/proxy-unproxy-objects.js","webpack://__ember_auto_import__/node_modules/ember-in-viewport/node_modules/fast-deep-equal/index.js","webpack://__ember_auto_import__/node_modules/fast-memoize/src/index.js","webpack://__ember_auto_import__/src/registry.ts","webpack://__ember_auto_import__/src/notification.ts","webpack://__ember_auto_import__/node_modules/intl-messageformat-parser/lib/src/types.js","webpack://__ember_auto_import__/node_modules/intl-messageformat-parser/lib/src/skeleton.js","webpack://__ember_auto_import__/node_modules/intl-messageformat-parser/lib/src/parser.js","webpack://__ember_auto_import__/node_modules/intl-messageformat-parser/lib/src/normalize.js","webpack://__ember_auto_import__/node_modules/intl-messageformat-parser/lib/index.js","webpack://__ember_auto_import__/node_modules/@formatjs/icu-messageformat-parser/lib/error.js","webpack://__ember_auto_import__/node_modules/@formatjs/icu-messageformat-parser/lib/types.js","webpack://__ember_auto_import__/node_modules/@formatjs/icu-messageformat-parser/lib/regex.generated.js","webpack://__ember_auto_import__/node_modules/@formatjs/icu-skeleton-parser/lib/date-time.js","webpack://__ember_auto_import__/node_modules/@formatjs/icu-skeleton-parser/lib/regex.generated.js","webpack://__ember_auto_import__/node_modules/@formatjs/icu-skeleton-parser/lib/number.js","webpack://__ember_auto_import__/node_modules/@formatjs/icu-messageformat-parser/lib/time-data.generated.js","webpack://__ember_auto_import__/node_modules/@formatjs/icu-messageformat-parser/lib/parser.js","webpack://__ember_auto_import__/node_modules/@formatjs/icu-messageformat-parser/lib/date-time-pattern-generator.js","webpack://__ember_auto_import__/node_modules/@formatjs/icu-messageformat-parser/lib/index.js","webpack://__ember_auto_import__/node_modules/@formatjs/fast-memoize/lib/index.js","webpack://__ember_auto_import__/node_modules/intl-messageformat/lib/src/error.js","webpack://__ember_auto_import__/node_modules/intl-messageformat/lib/src/formatters.js","webpack://__ember_auto_import__/node_modules/intl-messageformat/lib/src/core.js","webpack://__ember_auto_import__/node_modules/intl-messageformat/lib/index.js","webpack://__ember_auto_import__/node_modules/remote-promises/dist/index.js","webpack://__ember_auto_import__/node_modules/ssr-window/ssr-window.esm.js","webpack://__ember_auto_import__/node_modules/dom7/dom7.esm.js","webpack://__ember_auto_import__/node_modules/swiper/esm/utils/dom.js","webpack://__ember_auto_import__/node_modules/swiper/esm/utils/get-support.js","webpack://__ember_auto_import__/node_modules/swiper/esm/utils/get-device.js","webpack://__ember_auto_import__/node_modules/swiper/esm/utils/get-browser.js","webpack://__ember_auto_import__/node_modules/swiper/esm/utils/utils.js","webpack://__ember_auto_import__/node_modules/swiper/esm/modules/resize/resize.js","webpack://__ember_auto_import__/node_modules/swiper/esm/modules/observer/observer.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/events-emitter.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/update/index.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/update/updateSize.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/update/updateSlides.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/update/updateAutoHeight.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/update/updateSlidesOffset.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/update/updateSlidesProgress.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/update/updateProgress.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/update/updateSlidesClasses.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/update/updateActiveIndex.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/update/updateClickedSlide.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/slide/index.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/slide/slideTo.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/slide/slideToLoop.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/slide/slideNext.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/slide/slidePrev.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/slide/slideReset.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/slide/slideToClosest.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/slide/slideToClickedSlide.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/loop/index.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/loop/loopCreate.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/loop/loopFix.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/loop/loopDestroy.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/events/onTouchStart.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/events/onTouchMove.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/events/onTouchEnd.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/events/onResize.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/events/onClick.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/events/onScroll.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/events/index.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/classes/index.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/classes/addClasses.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/classes/removeClasses.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/defaults.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/core-class.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/modular.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/translate/index.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/translate/getTranslate.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/translate/setTranslate.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/translate/minTranslate.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/translate/maxTranslate.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/translate/translateTo.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/transition/index.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/transition/setTransition.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/transition/transitionStart.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/transition/transitionEnd.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/grab-cursor/index.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/grab-cursor/setGrabCursor.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/grab-cursor/unsetGrabCursor.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/manipulation/index.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/manipulation/appendSlide.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/manipulation/prependSlide.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/manipulation/addSlide.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/manipulation/removeSlide.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/manipulation/removeAllSlides.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/breakpoints/index.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/breakpoints/setBreakpoint.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/breakpoints/getBreakpoint.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/check-overflow/index.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/images/index.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/images/loadImage.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/core/images/preloadImages.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/virtual/virtual.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/keyboard/keyboard.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/mousewheel/mousewheel.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/navigation/navigation.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/pagination/pagination.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/scrollbar/scrollbar.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/parallax/parallax.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/zoom/zoom.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/lazy/lazy.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/controller/controller.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/a11y/a11y.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/history/history.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/hash-navigation/hash-navigation.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/autoplay/autoplay.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/effect-fade/effect-fade.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/effect-cube/effect-cube.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/effect-flip/effect-flip.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/effect-coverflow/effect-coverflow.js","webpack://__ember_auto_import__/node_modules/swiper/esm/components/thumbs/thumbs.js","webpack://__ember_auto_import__/src/utils/isBrowser.js","webpack://__ember_auto_import__/src/utils/debounce.js","webpack://__ember_auto_import__/src/utils/isFunction.js","webpack://__ember_auto_import__/src/utils/getStyleComputedProperty.js","webpack://__ember_auto_import__/src/utils/getParentNode.js","webpack://__ember_auto_import__/src/utils/getScrollParent.js","webpack://__ember_auto_import__/src/utils/getReferenceNode.js","webpack://__ember_auto_import__/src/utils/isIE.js","webpack://__ember_auto_import__/src/utils/getOffsetParent.js","webpack://__ember_auto_import__/src/utils/getRoot.js","webpack://__ember_auto_import__/src/utils/findCommonOffsetParent.js","webpack://__ember_auto_import__/src/utils/isOffsetContainer.js","webpack://__ember_auto_import__/src/utils/getScroll.js","webpack://__ember_auto_import__/src/utils/getBordersSize.js","webpack://__ember_auto_import__/src/utils/getWindowSizes.js","webpack://__ember_auto_import__/src/utils/getClientRect.js","webpack://__ember_auto_import__/src/utils/getBoundingClientRect.js","webpack://__ember_auto_import__/src/utils/getOffsetRectRelativeToArbitraryNode.js","webpack://__ember_auto_import__/src/utils/includeScroll.js","webpack://__ember_auto_import__/src/utils/isFixed.js","webpack://__ember_auto_import__/src/utils/getFixedPositionOffsetParent.js","webpack://__ember_auto_import__/src/utils/getBoundaries.js","webpack://__ember_auto_import__/src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","webpack://__ember_auto_import__/src/utils/computeAutoPlacement.js","webpack://__ember_auto_import__/src/utils/getReferenceOffsets.js","webpack://__ember_auto_import__/src/utils/getOuterSizes.js","webpack://__ember_auto_import__/src/utils/getOppositePlacement.js","webpack://__ember_auto_import__/src/utils/getPopperOffsets.js","webpack://__ember_auto_import__/src/utils/find.js","webpack://__ember_auto_import__/src/utils/runModifiers.js","webpack://__ember_auto_import__/src/utils/findIndex.js","webpack://__ember_auto_import__/src/methods/update.js","webpack://__ember_auto_import__/src/utils/isModifierEnabled.js","webpack://__ember_auto_import__/src/utils/getSupportedPropertyName.js","webpack://__ember_auto_import__/src/methods/destroy.js","webpack://__ember_auto_import__/src/utils/getWindow.js","webpack://__ember_auto_import__/src/utils/setupEventListeners.js","webpack://__ember_auto_import__/src/methods/enableEventListeners.js","webpack://__ember_auto_import__/src/methods/disableEventListeners.js","webpack://__ember_auto_import__/src/utils/removeEventListeners.js","webpack://__ember_auto_import__/src/utils/isNumeric.js","webpack://__ember_auto_import__/src/utils/setStyles.js","webpack://__ember_auto_import__/src/modifiers/computeStyle.js","webpack://__ember_auto_import__/src/utils/isModifierRequired.js","webpack://__ember_auto_import__/src/methods/placements.js","webpack://__ember_auto_import__/src/utils/clockwise.js","webpack://__ember_auto_import__/src/modifiers/index.js","webpack://__ember_auto_import__/src/modifiers/shift.js","webpack://__ember_auto_import__/src/modifiers/offset.js","webpack://__ember_auto_import__/src/modifiers/preventOverflow.js","webpack://__ember_auto_import__/src/modifiers/keepTogether.js","webpack://__ember_auto_import__/src/modifiers/arrow.js","webpack://__ember_auto_import__/src/modifiers/flip.js","webpack://__ember_auto_import__/src/utils/getOppositeVariation.js","webpack://__ember_auto_import__/src/modifiers/inner.js","webpack://__ember_auto_import__/src/modifiers/hide.js","webpack://__ember_auto_import__/src/utils/getRoundedOffsets.js","webpack://__ember_auto_import__/src/modifiers/applyStyle.js","webpack://__ember_auto_import__/src/utils/setAttributes.js","webpack://__ember_auto_import__/src/methods/defaults.js","webpack://__ember_auto_import__/src/index.js","webpack://__ember_auto_import__/popper/src/utils/isFunction.js","webpack://__ember_auto_import__/node_modules/tslib/tslib.es6.mjs"],"sourcesContent":["export interface Logger {\n  disable(): void;\n  enable(logLevel: LogLevel): void;\n  log(...args: any[]): void;\n  warn(...args: any[]): void;\n  error(...args: any[]): void;\n  debug(...args: any[]): void;\n}\n\nexport enum LogLevel {\n  None = 0,\n  Error = 1,\n  Warn = 2,\n  Verbose = 3,\n  Debug = 4,\n}\n\nexport interface LogConfig {\n  logger: Logger;\n  logLevel: LogLevel;\n}\n\ntype TimeKey = 'start' | 'end';\n\nexport interface DebugContext {\n  type: string;\n  name: string;\n  args: string[] | string;\n  stacktrace?: string[] | string;\n  time?: { [key in TimeKey]?: string };\n  states?: { [key: string]: any };\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { LogLevel, LogConfig, DebugContext } from '@amplitude/analytics-types';\nimport { AmplitudeCore } from '../core-client';\n\nexport const getStacktrace = (ignoreDepth = 0): string[] => {\n  const trace = new Error().stack || '';\n  return trace\n    .split('\\n')\n    .slice(2 + ignoreDepth)\n    .map((text) => text.trim());\n};\n\n// This hook makes sure we always get the latest logger and logLevel.\nexport const getClientLogConfig = (client: AmplitudeCore) => (): LogConfig => {\n  const { loggerProvider: logger, logLevel } = { ...client.config };\n  return {\n    logger,\n    logLevel,\n  };\n};\n\n// This is a convenient function to get the attribute from object with string path, similar to lodash '#get'.\nexport const getValueByStringPath = (obj: any, path: string): any => {\n  path = path.replace(/\\[(\\w+)\\]/g, '.$1'); // convert indexes to properties\n  path = path.replace(/^\\./, ''); // strip a leading dot\n  for (const attr of path.split('.')) {\n    if (attr in obj) {\n      obj = obj[attr];\n    } else {\n      return;\n    }\n  }\n  return obj;\n};\n\nexport const getClientStates = (client: AmplitudeCore, paths: Array<string>) => (): { [key: string]: any } => {\n  const res: { [key: string]: any } = {};\n  for (const path of paths) {\n    res[path] = getValueByStringPath(client, path);\n  }\n  return res;\n};\n\nexport const debugWrapper =\n  <T extends Array<any>, R>(\n    fn: (...args: T) => R,\n    fnName: string,\n    getLogConfig: () => LogConfig,\n    getStates?: () => { [key: string]: any },\n    fnContext: any = null,\n  ) =>\n  (...args: T): R => {\n    const { logger, logLevel } = getLogConfig();\n    // return early if possible to reduce overhead\n    if ((logLevel && logLevel < LogLevel.Debug) || !logLevel || !logger) {\n      return fn.apply(fnContext, args);\n    }\n    const debugContext: DebugContext = {\n      type: 'invoke public method',\n      name: fnName,\n      args,\n      stacktrace: getStacktrace(1),\n      time: {\n        start: new Date().toISOString(),\n      },\n      states: {},\n    };\n    if (getStates && debugContext.states) {\n      debugContext.states.before = getStates();\n    }\n    const result = fn.apply(fnContext, args);\n    if (result && (result as any).promise) {\n      // if result is a promise, add the callback\n      (result as any).promise.then(() => {\n        if (getStates && debugContext.states) {\n          debugContext.states.after = getStates();\n        }\n        if (debugContext.time) {\n          debugContext.time.end = new Date().toISOString();\n        }\n        logger.debug(JSON.stringify(debugContext, null, 2));\n      });\n    } else {\n      if (getStates && debugContext.states) {\n        debugContext.states.after = getStates();\n      }\n      if (debugContext.time) {\n        debugContext.time.end = new Date().toISOString();\n      }\n      logger.debug(JSON.stringify(debugContext, null, 2));\n    }\n    return result;\n  };\n","export const UNSET_VALUE = '-';\nexport const AMPLITUDE_PREFIX = 'AMP';\nexport const STORAGE_PREFIX = `${AMPLITUDE_PREFIX}_unsent`;\nexport const AMPLITUDE_SERVER_URL = 'https://api2.amplitude.com/2/httpapi';\nexport const EU_AMPLITUDE_SERVER_URL = 'https://api.eu.amplitude.com/2/httpapi';\nexport const AMPLITUDE_BATCH_SERVER_URL = 'https://api2.amplitude.com/batch';\nexport const EU_AMPLITUDE_BATCH_SERVER_URL = 'https://api.eu.amplitude.com/batch';\n","import { AMPLITUDE_PREFIX } from '@amplitude/analytics-core';\n\nexport const getCookieName = (apiKey: string, postKey = '', limit = 10) => {\n  return [AMPLITUDE_PREFIX, postKey, apiKey.substring(0, limit)].filter(Boolean).join('_');\n};\n\nexport const getOldCookieName = (apiKey: string) => {\n  return `${AMPLITUDE_PREFIX.toLowerCase()}_${apiKey.substring(0, 6)}`;\n};\n","/* eslint-disable no-restricted-globals */\n/* Only file allowed to access to globalThis, window, self */\n\nexport const getGlobalScope = (): typeof globalThis | undefined => {\n  if (typeof globalThis !== 'undefined') {\n    return globalThis;\n  }\n  if (typeof window !== 'undefined') {\n    return window;\n  }\n  if (typeof self !== 'undefined') {\n    return self;\n  }\n  if (typeof global !== 'undefined') {\n    return global;\n  }\n  return undefined;\n};\n","import { getGlobalScope } from './global-scope';\n\nexport const getQueryParams = (): Record<string, string | undefined> => {\n  const globalScope = getGlobalScope();\n  /* istanbul ignore if */\n  if (!globalScope?.location?.search) {\n    return {};\n  }\n  const pairs = globalScope.location.search.substring(1).split('&').filter(Boolean);\n  const params = pairs.reduce<Record<string, string | undefined>>((acc, curr) => {\n    const query = curr.split('=', 2);\n    const key = tryDecodeURIComponent(query[0]);\n    const value = tryDecodeURIComponent(query[1]);\n    if (!value) {\n      return acc;\n    }\n    acc[key] = value;\n    return acc;\n  }, {});\n  return params;\n};\n\nexport const tryDecodeURIComponent = (value = '') => {\n  try {\n    return decodeURIComponent(value);\n  } catch {\n    return '';\n  }\n};\n","var ApplicationContextProviderImpl = /** @class */ (function () {\n    function ApplicationContextProviderImpl() {\n    }\n    ApplicationContextProviderImpl.prototype.getApplicationContext = function () {\n        return {\n            versionName: this.versionName,\n            language: getLanguage(),\n            platform: 'Web',\n            os: undefined,\n            deviceModel: undefined,\n        };\n    };\n    return ApplicationContextProviderImpl;\n}());\nvar getLanguage = function () {\n    return ((typeof navigator !== 'undefined' &&\n        ((navigator.languages && navigator.languages[0]) ||\n            navigator.language)) ||\n        '');\n};\n\nvar EventBridgeImpl = /** @class */ (function () {\n    function EventBridgeImpl() {\n        this.queue = [];\n    }\n    EventBridgeImpl.prototype.logEvent = function (event) {\n        if (!this.receiver) {\n            if (this.queue.length < 512) {\n                this.queue.push(event);\n            }\n        }\n        else {\n            this.receiver(event);\n        }\n    };\n    EventBridgeImpl.prototype.setEventReceiver = function (receiver) {\n        this.receiver = receiver;\n        if (this.queue.length > 0) {\n            this.queue.forEach(function (event) {\n                receiver(event);\n            });\n            this.queue = [];\n        }\n    };\n    return EventBridgeImpl;\n}());\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\nvar __assign = function () {\n  __assign = Object.assign || function __assign(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n      s = arguments[i];\n      for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n    }\n    return t;\n  };\n  return __assign.apply(this, arguments);\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nvar isEqual = function (obj1, obj2) {\n    var primitive = ['string', 'number', 'boolean', 'undefined'];\n    var typeA = typeof obj1;\n    var typeB = typeof obj2;\n    if (typeA !== typeB) {\n        return false;\n    }\n    for (var _i = 0, primitive_1 = primitive; _i < primitive_1.length; _i++) {\n        var p = primitive_1[_i];\n        if (p === typeA) {\n            return obj1 === obj2;\n        }\n    }\n    // check null\n    if (obj1 == null && obj2 == null) {\n        return true;\n    }\n    else if (obj1 == null || obj2 == null) {\n        return false;\n    }\n    // if got here - objects\n    if (obj1.length !== obj2.length) {\n        return false;\n    }\n    //check if arrays\n    var isArrayA = Array.isArray(obj1);\n    var isArrayB = Array.isArray(obj2);\n    if (isArrayA !== isArrayB) {\n        return false;\n    }\n    if (isArrayA && isArrayB) {\n        //arrays\n        for (var i = 0; i < obj1.length; i++) {\n            if (!isEqual(obj1[i], obj2[i])) {\n                return false;\n            }\n        }\n    }\n    else {\n        //objects\n        var sorted1 = Object.keys(obj1).sort();\n        var sorted2 = Object.keys(obj2).sort();\n        if (!isEqual(sorted1, sorted2)) {\n            return false;\n        }\n        //compare object values\n        var result_1 = true;\n        Object.keys(obj1).forEach(function (key) {\n            if (!isEqual(obj1[key], obj2[key])) {\n                result_1 = false;\n            }\n        });\n        return result_1;\n    }\n    return true;\n};\n\nvar ID_OP_SET = '$set';\nvar ID_OP_UNSET = '$unset';\nvar ID_OP_CLEAR_ALL = '$clearAll';\n// Polyfill for Object.entries\nif (!Object.entries) {\n    Object.entries = function (obj) {\n        var ownProps = Object.keys(obj);\n        var i = ownProps.length;\n        var resArray = new Array(i);\n        while (i--) {\n            resArray[i] = [ownProps[i], obj[ownProps[i]]];\n        }\n        return resArray;\n    };\n}\nvar IdentityStoreImpl = /** @class */ (function () {\n    function IdentityStoreImpl() {\n        this.identity = { userProperties: {} };\n        this.listeners = new Set();\n    }\n    IdentityStoreImpl.prototype.editIdentity = function () {\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        var self = this;\n        var actingUserProperties = __assign({}, this.identity.userProperties);\n        var actingIdentity = __assign(__assign({}, this.identity), { userProperties: actingUserProperties });\n        return {\n            setUserId: function (userId) {\n                actingIdentity.userId = userId;\n                return this;\n            },\n            setDeviceId: function (deviceId) {\n                actingIdentity.deviceId = deviceId;\n                return this;\n            },\n            setUserProperties: function (userProperties) {\n                actingIdentity.userProperties = userProperties;\n                return this;\n            },\n            setOptOut: function (optOut) {\n                actingIdentity.optOut = optOut;\n                return this;\n            },\n            updateUserProperties: function (actions) {\n                var actingProperties = actingIdentity.userProperties || {};\n                for (var _i = 0, _a = Object.entries(actions); _i < _a.length; _i++) {\n                    var _b = _a[_i], action = _b[0], properties = _b[1];\n                    switch (action) {\n                        case ID_OP_SET:\n                            for (var _c = 0, _d = Object.entries(properties); _c < _d.length; _c++) {\n                                var _e = _d[_c], key = _e[0], value = _e[1];\n                                actingProperties[key] = value;\n                            }\n                            break;\n                        case ID_OP_UNSET:\n                            for (var _f = 0, _g = Object.keys(properties); _f < _g.length; _f++) {\n                                var key = _g[_f];\n                                delete actingProperties[key];\n                            }\n                            break;\n                        case ID_OP_CLEAR_ALL:\n                            actingProperties = {};\n                            break;\n                    }\n                }\n                actingIdentity.userProperties = actingProperties;\n                return this;\n            },\n            commit: function () {\n                self.setIdentity(actingIdentity);\n                return this;\n            },\n        };\n    };\n    IdentityStoreImpl.prototype.getIdentity = function () {\n        return __assign({}, this.identity);\n    };\n    IdentityStoreImpl.prototype.setIdentity = function (identity) {\n        var originalIdentity = __assign({}, this.identity);\n        this.identity = __assign({}, identity);\n        if (!isEqual(originalIdentity, this.identity)) {\n            this.listeners.forEach(function (listener) {\n                listener(identity);\n            });\n        }\n    };\n    IdentityStoreImpl.prototype.addIdentityListener = function (listener) {\n        this.listeners.add(listener);\n    };\n    IdentityStoreImpl.prototype.removeIdentityListener = function (listener) {\n        this.listeners.delete(listener);\n    };\n    return IdentityStoreImpl;\n}());\n\nvar safeGlobal = typeof globalThis !== 'undefined'\n    ? globalThis\n    : typeof global !== 'undefined'\n        ? global\n        : self;\n\nvar AnalyticsConnector = /** @class */ (function () {\n    function AnalyticsConnector() {\n        this.identityStore = new IdentityStoreImpl();\n        this.eventBridge = new EventBridgeImpl();\n        this.applicationContextProvider = new ApplicationContextProviderImpl();\n    }\n    AnalyticsConnector.getInstance = function (instanceName) {\n        if (!safeGlobal['analyticsConnectorInstances']) {\n            safeGlobal['analyticsConnectorInstances'] = {};\n        }\n        if (!safeGlobal['analyticsConnectorInstances'][instanceName]) {\n            safeGlobal['analyticsConnectorInstances'][instanceName] =\n                new AnalyticsConnector();\n        }\n        return safeGlobal['analyticsConnectorInstances'][instanceName];\n    };\n    return AnalyticsConnector;\n}());\n\nexport { AnalyticsConnector };\n","import { Event } from './event';\nimport { Config } from './config';\nimport { Result } from './result';\nimport { CoreClient } from './client/core-client';\n\nexport enum PluginType {\n  BEFORE = 'before',\n  ENRICHMENT = 'enrichment',\n  DESTINATION = 'destination',\n}\n\nexport interface BeforePlugin<T = CoreClient, U = Config> {\n  name: string;\n  type: PluginType.BEFORE | 'before';\n  setup(config: U, client?: T): Promise<void>;\n  execute(context: Event): Promise<Event | null>;\n  teardown?(): Promise<void>;\n}\n\nexport interface EnrichmentPlugin<T = CoreClient, U = Config> {\n  name: string;\n  type: PluginType.ENRICHMENT | 'enrichment';\n  setup(config: U, client?: T): Promise<void>;\n  execute(context: Event): Promise<Event | null>;\n  teardown?(): Promise<void>;\n}\n\nexport interface DestinationPlugin<T = CoreClient, U = Config> {\n  name: string;\n  type: PluginType.DESTINATION | 'destination';\n  setup(config: U, client?: T): Promise<void>;\n  execute(context: Event): Promise<Result>;\n  flush?(): Promise<void>;\n  teardown?(): Promise<void>;\n}\n\nexport type Plugin<T = CoreClient, U = Config> = BeforePlugin<T, U> | EnrichmentPlugin<T, U> | DestinationPlugin<T, U>;\n","import { AnalyticsConnector } from '@amplitude/analytics-connector';\n\nexport const getAnalyticsConnector = (instanceName = '$default_instance'): AnalyticsConnector => {\n  return AnalyticsConnector.getInstance(instanceName);\n};\n\nexport const setConnectorUserId = (userId: string | undefined, instanceName?: string): void => {\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  getAnalyticsConnector(instanceName).identityStore.editIdentity().setUserId(userId).commit();\n};\n\nexport const setConnectorDeviceId = (deviceId: string, instanceName?: string): void => {\n  getAnalyticsConnector(instanceName).identityStore.editIdentity().setDeviceId(deviceId).commit();\n};\n\nexport const setConnectorOptOut = (optOut: boolean, instanceName?: string): void => {\n  getAnalyticsConnector(instanceName).identityStore.editIdentity().setOptOut(optOut).commit();\n};\n","import { BeforePlugin, Config, Event, PluginType } from '@amplitude/analytics-types';\nimport { getAnalyticsConnector } from '../analytics-connector';\n\nexport class IdentityEventSender implements BeforePlugin {\n  name = 'identity';\n  type = PluginType.BEFORE as const;\n\n  identityStore = getAnalyticsConnector().identityStore;\n\n  async execute(context: Event): Promise<Event> {\n    const userProperties = context.user_properties as Record<string, any>;\n    if (userProperties) {\n      this.identityStore.editIdentity().updateUserProperties(userProperties).commit();\n    }\n    return context;\n  }\n\n  async setup(config: Config) {\n    if (config.instanceName) {\n      this.identityStore = getAnalyticsConnector(config.instanceName).identityStore;\n    }\n  }\n}\n","import {\n  BrowserOptions,\n  DefaultTrackingOptions,\n  PageTrackingHistoryChanges,\n  PageTrackingOptions,\n  PageTrackingTrackOn,\n} from '@amplitude/analytics-types';\n\nexport const isFileDownloadTrackingEnabled = (defaultTracking: DefaultTrackingOptions | boolean | undefined) => {\n  if (typeof defaultTracking === 'boolean') {\n    return defaultTracking;\n  }\n\n  if (defaultTracking?.fileDownloads) {\n    return true;\n  }\n\n  return false;\n};\n\nexport const isFormInteractionTrackingEnabled = (defaultTracking: DefaultTrackingOptions | boolean | undefined) => {\n  if (typeof defaultTracking === 'boolean') {\n    return defaultTracking;\n  }\n\n  if (defaultTracking?.formInteractions) {\n    return true;\n  }\n\n  return false;\n};\n\nexport const isPageViewTrackingEnabled = (defaultTracking: DefaultTrackingOptions | boolean | undefined) => {\n  if (typeof defaultTracking === 'boolean') {\n    return defaultTracking;\n  }\n\n  if (\n    defaultTracking?.pageViews === true ||\n    (defaultTracking?.pageViews && typeof defaultTracking.pageViews === 'object')\n  ) {\n    return true;\n  }\n\n  return false;\n};\n\nexport const isSessionTrackingEnabled = (defaultTracking: DefaultTrackingOptions | boolean | undefined) => {\n  if (typeof defaultTracking === 'boolean') {\n    return defaultTracking;\n  }\n\n  if (defaultTracking?.sessions) {\n    return true;\n  }\n\n  return false;\n};\n\n/**\n * Returns page view tracking config\n *\n * if config.attribution.trackPageViews and config.defaultTracking.pageViews are both TRUE\n * then always track page views\n *\n * if config.attribution.trackPageViews is TRUE and config.defaultTracking.pageViews is FALSE\n * then only track page views on attribution\n *\n * if config.attribution.trackPageViews is FALSE and config.defaultTracking.pageViews is TRUE\n * then always track page views\n *\n * if config.attribution.trackPageViews and config.defaultTracking.pageViews are both FALSE\n * then never track page views\n */\nexport const getPageViewTrackingConfig = (config: BrowserOptions): PageTrackingOptions => {\n  let trackOn: PageTrackingTrackOn | undefined = config.attribution?.trackPageViews ? 'attribution' : () => false;\n  let trackHistoryChanges: PageTrackingHistoryChanges | undefined = undefined;\n  let eventType: string | undefined = 'Page View';\n\n  const isDefaultPageViewTrackingEnabled = isPageViewTrackingEnabled(config.defaultTracking);\n  if (isDefaultPageViewTrackingEnabled) {\n    trackOn = undefined;\n    eventType = undefined;\n\n    if (\n      config.defaultTracking &&\n      typeof config.defaultTracking === 'object' &&\n      config.defaultTracking.pageViews &&\n      typeof config.defaultTracking.pageViews === 'object'\n    ) {\n      if ('trackOn' in config.defaultTracking.pageViews) {\n        trackOn = config.defaultTracking.pageViews.trackOn;\n      }\n\n      if ('trackHistoryChanges' in config.defaultTracking.pageViews) {\n        trackHistoryChanges = config.defaultTracking.pageViews.trackHistoryChanges;\n      }\n\n      if ('eventType' in config.defaultTracking.pageViews && config.defaultTracking.pageViews.eventType) {\n        eventType = config.defaultTracking.pageViews.eventType;\n      }\n    }\n  }\n\n  return {\n    trackOn,\n    trackHistoryChanges,\n    eventType,\n  };\n};\n","/** The status of an event. */\nexport enum Status {\n  /** The status could not be determined. */\n  Unknown = 'unknown',\n  /** The event was skipped due to configuration or callbacks. */\n  Skipped = 'skipped',\n  /** The event was sent successfully. */\n  Success = 'success',\n  /** A user or device in the payload is currently rate limited and should try again later. */\n  RateLimit = 'rate_limit',\n  /** The sent payload was too large to be processed. */\n  PayloadTooLarge = 'payload_too_large',\n  /** The event could not be processed. */\n  Invalid = 'invalid',\n  /** A server-side error ocurred during submission. */\n  Failed = 'failed',\n  /** a server or client side error occuring when a request takes too long and is cancelled */\n  Timeout = 'Timeout',\n  /** NodeJS runtime environment error.. E.g. disconnected from network */\n  SystemError = 'SystemError',\n}\n","import { AmplitudeReturn } from '@amplitude/analytics-types';\n\nexport const returnWrapper: {\n  (): AmplitudeReturn<void>;\n  <T>(awaitable: Promise<T>): AmplitudeReturn<T>;\n} = <T>(awaitable?: Promise<T>) => ({\n  promise: awaitable || Promise.resolve(),\n});\n","export const SUCCESS_MESSAGE = 'Event tracked successfully';\nexport const UNEXPECTED_ERROR_MESSAGE = 'Unexpected error occurred';\nexport const MAX_RETRIES_EXCEEDED_MESSAGE = 'Event rejected due to exceeded retry count';\nexport const OPT_OUT_MESSAGE = 'Event skipped due to optOut config';\nexport const MISSING_API_KEY_MESSAGE = 'Event rejected due to missing API key';\nexport const INVALID_API_KEY = 'Invalid API key';\nexport const CLIENT_NOT_INITIALIZED = 'Client not initialized';\n","export enum ServerZone {\n  US = 'US',\n  EU = 'EU',\n  STAGING = 'STAGING',\n}\n","import { Event, Result, Status } from '@amplitude/analytics-types';\n\nexport const buildResult = (event: Event, code = 0, message: string = Status.Unknown): Result => {\n  return { event, code, message };\n};\n","import {\n  Event,\n  Config as IConfig,\n  Logger as ILogger,\n  LogLevel,\n  Storage,\n  Transport,\n  Plan,\n  IngestionMetadata,\n  ServerZone,\n  Options,\n} from '@amplitude/analytics-types';\nimport {\n  AMPLITUDE_SERVER_URL,\n  AMPLITUDE_BATCH_SERVER_URL,\n  EU_AMPLITUDE_SERVER_URL,\n  EU_AMPLITUDE_BATCH_SERVER_URL,\n} from './constants';\n\nimport { Logger } from './logger';\n\nexport const getDefaultConfig = () => ({\n  flushMaxRetries: 12,\n  flushQueueSize: 200,\n  flushIntervalMillis: 10000,\n  instanceName: '$default_instance',\n  logLevel: LogLevel.Warn,\n  loggerProvider: new Logger(),\n  optOut: false,\n  serverUrl: AMPLITUDE_SERVER_URL,\n  serverZone: ServerZone.US,\n  useBatch: false,\n});\n\nexport class Config implements IConfig {\n  apiKey: string;\n  flushIntervalMillis: number;\n  flushMaxRetries: number;\n  flushQueueSize: number;\n  instanceName?: string;\n  loggerProvider: ILogger;\n  logLevel: LogLevel;\n  minIdLength?: number;\n  plan?: Plan;\n  ingestionMetadata?: IngestionMetadata;\n  serverUrl: string | undefined;\n  serverZone?: keyof typeof ServerZone;\n  transportProvider: Transport;\n  storageProvider?: Storage<Event[]>;\n  useBatch: boolean;\n\n  protected _optOut = false;\n  get optOut() {\n    return this._optOut;\n  }\n  set optOut(optOut: boolean) {\n    this._optOut = optOut;\n  }\n\n  constructor(options: Options) {\n    const defaultConfig = getDefaultConfig();\n    this.apiKey = options.apiKey;\n    this.flushIntervalMillis = options.flushIntervalMillis ?? defaultConfig.flushIntervalMillis;\n    this.flushMaxRetries = options.flushMaxRetries || defaultConfig.flushMaxRetries;\n    this.flushQueueSize = options.flushQueueSize || defaultConfig.flushQueueSize;\n    this.instanceName = options.instanceName || defaultConfig.instanceName;\n    this.loggerProvider = options.loggerProvider || defaultConfig.loggerProvider;\n    this.logLevel = options.logLevel ?? defaultConfig.logLevel;\n    this.minIdLength = options.minIdLength;\n    this.plan = options.plan;\n    this.ingestionMetadata = options.ingestionMetadata;\n    this.optOut = options.optOut ?? defaultConfig.optOut;\n    this.serverUrl = options.serverUrl;\n    this.serverZone = options.serverZone || defaultConfig.serverZone;\n    this.storageProvider = options.storageProvider;\n    this.transportProvider = options.transportProvider;\n    this.useBatch = options.useBatch ?? defaultConfig.useBatch;\n    this.loggerProvider.enable(this.logLevel);\n\n    const serverConfig = createServerConfig(options.serverUrl, options.serverZone, options.useBatch);\n    this.serverZone = serverConfig.serverZone;\n    this.serverUrl = serverConfig.serverUrl;\n  }\n}\n\nexport const getServerUrl = (serverZone: keyof typeof ServerZone, useBatch: boolean) => {\n  if (serverZone === ServerZone.EU) {\n    return useBatch ? EU_AMPLITUDE_BATCH_SERVER_URL : EU_AMPLITUDE_SERVER_URL;\n  }\n  return useBatch ? AMPLITUDE_BATCH_SERVER_URL : AMPLITUDE_SERVER_URL;\n};\n\nexport const createServerConfig = (\n  serverUrl = '',\n  serverZone: keyof typeof ServerZone = getDefaultConfig().serverZone,\n  useBatch: boolean = getDefaultConfig().useBatch,\n) => {\n  if (serverUrl) {\n    return { serverUrl, serverZone: undefined };\n  }\n  const _serverZone = ['US', 'EU'].includes(serverZone) ? serverZone : getDefaultConfig().serverZone;\n  return {\n    serverZone: _serverZone,\n    serverUrl: getServerUrl(_serverZone, useBatch),\n  };\n};\n","import {\n  Config,\n  DestinationContext as Context,\n  DestinationPlugin,\n  Event,\n  InvalidResponse,\n  PayloadTooLargeResponse,\n  PluginType,\n  RateLimitResponse,\n  Response,\n  Result,\n  Status,\n  SuccessResponse,\n} from '@amplitude/analytics-types';\nimport {\n  INVALID_API_KEY,\n  MAX_RETRIES_EXCEEDED_MESSAGE,\n  MISSING_API_KEY_MESSAGE,\n  SUCCESS_MESSAGE,\n  UNEXPECTED_ERROR_MESSAGE,\n} from '../messages';\nimport { STORAGE_PREFIX } from '../constants';\nimport { chunk } from '../utils/chunk';\nimport { buildResult } from '../utils/result-builder';\nimport { createServerConfig } from '../config';\n\nfunction getErrorMessage(error: unknown) {\n  if (error instanceof Error) return error.message;\n  return String(error);\n}\n\nexport function getResponseBodyString(res: Response) {\n  let responseBodyString = '';\n  try {\n    if ('body' in res) {\n      responseBodyString = JSON.stringify(res.body);\n    }\n  } catch {\n    // to avoid crash, but don't care about the error, add comment to avoid empty block lint error\n  }\n  return responseBodyString;\n}\n\nexport class Destination implements DestinationPlugin {\n  name = 'amplitude';\n  type = PluginType.DESTINATION as const;\n\n  retryTimeout = 1000;\n  throttleTimeout = 30000;\n  storageKey = '';\n  // this.config is defined in setup() which will always be called first\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  config: Config;\n  private scheduled: ReturnType<typeof setTimeout> | null = null;\n  queue: Context[] = [];\n\n  async setup(config: Config): Promise<undefined> {\n    this.config = config;\n\n    this.storageKey = `${STORAGE_PREFIX}_${this.config.apiKey.substring(0, 10)}`;\n    const unsent = await this.config.storageProvider?.get(this.storageKey);\n    this.saveEvents(); // sets storage to '[]'\n    if (unsent && unsent.length > 0) {\n      void Promise.all(unsent.map((event) => this.execute(event))).catch();\n    }\n\n    return Promise.resolve(undefined);\n  }\n\n  execute(event: Event): Promise<Result> {\n    return new Promise((resolve) => {\n      const context = {\n        event,\n        attempts: 0,\n        callback: (result: Result) => resolve(result),\n        timeout: 0,\n      };\n      void this.addToQueue(context);\n    });\n  }\n\n  addToQueue(...list: Context[]) {\n    const tryable = list.filter((context) => {\n      if (context.attempts < this.config.flushMaxRetries) {\n        context.attempts += 1;\n        return true;\n      }\n      void this.fulfillRequest([context], 500, MAX_RETRIES_EXCEEDED_MESSAGE);\n      return false;\n    });\n\n    tryable.forEach((context) => {\n      this.queue = this.queue.concat(context);\n      if (context.timeout === 0) {\n        this.schedule(this.config.flushIntervalMillis);\n        return;\n      }\n\n      setTimeout(() => {\n        context.timeout = 0;\n        this.schedule(0);\n      }, context.timeout);\n    });\n\n    this.saveEvents();\n  }\n\n  schedule(timeout: number) {\n    if (this.scheduled) return;\n    this.scheduled = setTimeout(() => {\n      void this.flush(true).then(() => {\n        if (this.queue.length > 0) {\n          this.schedule(timeout);\n        }\n      });\n    }, timeout);\n  }\n\n  async flush(useRetry = false) {\n    const list: Context[] = [];\n    const later: Context[] = [];\n    this.queue.forEach((context) => (context.timeout === 0 ? list.push(context) : later.push(context)));\n    this.queue = later;\n\n    if (this.scheduled) {\n      clearTimeout(this.scheduled);\n      this.scheduled = null;\n    }\n\n    const batches = chunk(list, this.config.flushQueueSize);\n    await Promise.all(batches.map((batch) => this.send(batch, useRetry)));\n  }\n\n  async send(list: Context[], useRetry = true) {\n    if (!this.config.apiKey) {\n      return this.fulfillRequest(list, 400, MISSING_API_KEY_MESSAGE);\n    }\n\n    const payload = {\n      api_key: this.config.apiKey,\n      events: list.map((context) => {\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        const { extra, ...eventWithoutExtra } = context.event;\n        return eventWithoutExtra;\n      }),\n      options: {\n        min_id_length: this.config.minIdLength,\n      },\n    };\n\n    try {\n      const { serverUrl } = createServerConfig(this.config.serverUrl, this.config.serverZone, this.config.useBatch);\n      const res = await this.config.transportProvider.send(serverUrl, payload);\n      if (res === null) {\n        this.fulfillRequest(list, 0, UNEXPECTED_ERROR_MESSAGE);\n        return;\n      }\n      if (!useRetry) {\n        if ('body' in res) {\n          this.fulfillRequest(list, res.statusCode, `${res.status}: ${getResponseBodyString(res)}`);\n        } else {\n          this.fulfillRequest(list, res.statusCode, res.status);\n        }\n        return;\n      }\n      this.handleResponse(res, list);\n    } catch (e) {\n      this.config.loggerProvider.error(e);\n      const errorMessage = getErrorMessage(e);\n      this.fulfillRequest(list, 0, errorMessage);\n    }\n  }\n\n  handleResponse(res: Response, list: Context[]) {\n    const { status } = res;\n\n    switch (status) {\n      case Status.Success: {\n        this.handleSuccessResponse(res, list);\n        break;\n      }\n      case Status.Invalid: {\n        this.handleInvalidResponse(res, list);\n        break;\n      }\n      case Status.PayloadTooLarge: {\n        this.handlePayloadTooLargeResponse(res, list);\n        break;\n      }\n      case Status.RateLimit: {\n        this.handleRateLimitResponse(res, list);\n        break;\n      }\n      default: {\n        // log intermediate event status before retry\n        this.config.loggerProvider.warn(`{code: 0, error: \"Status '${status}' provided for ${list.length} events\"}`);\n\n        this.handleOtherResponse(list);\n        break;\n      }\n    }\n  }\n\n  handleSuccessResponse(res: SuccessResponse, list: Context[]) {\n    this.fulfillRequest(list, res.statusCode, SUCCESS_MESSAGE);\n  }\n\n  handleInvalidResponse(res: InvalidResponse, list: Context[]) {\n    if (res.body.missingField || res.body.error.startsWith(INVALID_API_KEY)) {\n      this.fulfillRequest(list, res.statusCode, res.body.error);\n      return;\n    }\n\n    const dropIndex = [\n      ...Object.values(res.body.eventsWithInvalidFields),\n      ...Object.values(res.body.eventsWithMissingFields),\n      ...Object.values(res.body.eventsWithInvalidIdLengths),\n      ...res.body.silencedEvents,\n    ].flat();\n    const dropIndexSet = new Set(dropIndex);\n\n    const retry = list.filter((context, index) => {\n      if (dropIndexSet.has(index)) {\n        this.fulfillRequest([context], res.statusCode, res.body.error);\n        return;\n      }\n      return true;\n    });\n\n    if (retry.length > 0) {\n      // log intermediate event status before retry\n      this.config.loggerProvider.warn(getResponseBodyString(res));\n    }\n    this.addToQueue(...retry);\n  }\n\n  handlePayloadTooLargeResponse(res: PayloadTooLargeResponse, list: Context[]) {\n    if (list.length === 1) {\n      this.fulfillRequest(list, res.statusCode, res.body.error);\n      return;\n    }\n\n    // log intermediate event status before retry\n    this.config.loggerProvider.warn(getResponseBodyString(res));\n\n    this.config.flushQueueSize /= 2;\n    this.addToQueue(...list);\n  }\n\n  handleRateLimitResponse(res: RateLimitResponse, list: Context[]) {\n    const dropUserIds = Object.keys(res.body.exceededDailyQuotaUsers);\n    const dropDeviceIds = Object.keys(res.body.exceededDailyQuotaDevices);\n    const throttledIndex = res.body.throttledEvents;\n    const dropUserIdsSet = new Set(dropUserIds);\n    const dropDeviceIdsSet = new Set(dropDeviceIds);\n    const throttledIndexSet = new Set(throttledIndex);\n\n    const retry = list.filter((context, index) => {\n      if (\n        (context.event.user_id && dropUserIdsSet.has(context.event.user_id)) ||\n        (context.event.device_id && dropDeviceIdsSet.has(context.event.device_id))\n      ) {\n        this.fulfillRequest([context], res.statusCode, res.body.error);\n        return;\n      }\n      if (throttledIndexSet.has(index)) {\n        context.timeout = this.throttleTimeout;\n      }\n      return true;\n    });\n\n    if (retry.length > 0) {\n      // log intermediate event status before retry\n      this.config.loggerProvider.warn(getResponseBodyString(res));\n    }\n\n    this.addToQueue(...retry);\n  }\n\n  handleOtherResponse(list: Context[]) {\n    this.addToQueue(\n      ...list.map((context) => {\n        context.timeout = context.attempts * this.retryTimeout;\n        return context;\n      }),\n    );\n  }\n\n  fulfillRequest(list: Context[], code: number, message: string) {\n    this.saveEvents();\n    list.forEach((context) => context.callback(buildResult(context.event, code, message)));\n  }\n\n  /**\n   * Saves events to storage\n   * This is called on\n   * 1) new events are added to queue; or\n   * 2) response comes back for a request\n   */\n  saveEvents() {\n    if (!this.config.storageProvider) {\n      return;\n    }\n    const events = Array.from(this.queue.map((context) => context.event));\n    void this.config.storageProvider.set(this.storageKey, events);\n  }\n}\n","import { BaseEvent } from './base-event';\n\nexport interface Identify {\n  getUserProperties(): IdentifyUserProperties;\n  set(property: string, value: ValidPropertyType): Identify;\n  setOnce(property: string, value: ValidPropertyType): Identify;\n  append(property: string, value: ValidPropertyType): Identify;\n  prepend(property: string, value: ValidPropertyType): Identify;\n  postInsert(property: string, value: ValidPropertyType): Identify;\n  preInsert(property: string, value: ValidPropertyType): Identify;\n  remove(property: string, value: ValidPropertyType): Identify;\n  add(property: string, value: number): Identify;\n  unset(property: string): Identify;\n  clearAll(): Identify;\n}\n\nexport enum IdentifyOperation {\n  // Base Operations to set values\n  SET = '$set',\n  SET_ONCE = '$setOnce',\n\n  // Operations around modifying existing values\n  ADD = '$add',\n  APPEND = '$append',\n  PREPEND = '$prepend',\n  REMOVE = '$remove',\n\n  // Operations around appending values *if* they aren't present\n  PREINSERT = '$preInsert',\n  POSTINSERT = '$postInsert',\n\n  // Operations around removing properties/values\n  UNSET = '$unset',\n  CLEAR_ALL = '$clearAll',\n}\n\nexport type ValidPropertyType =\n  | number\n  | string\n  | boolean\n  | Array<string | number>\n  | { [key: string]: ValidPropertyType };\n\ninterface BaseOperationConfig {\n  [key: string]: ValidPropertyType;\n}\n\nexport interface IdentifyUserProperties {\n  // Add operations can only take numbers\n  [IdentifyOperation.ADD]?: { [key: string]: number };\n\n  // This reads the keys of the passed object, but the values are not used\n  [IdentifyOperation.UNSET]?: BaseOperationConfig;\n  // This option does not read the key as it unsets all user properties\n  [IdentifyOperation.CLEAR_ALL]?: any;\n\n  // These operations can take numbers, strings, or arrays of both.\n  [IdentifyOperation.SET]?: BaseOperationConfig;\n  [IdentifyOperation.SET_ONCE]?: BaseOperationConfig;\n  [IdentifyOperation.APPEND]?: BaseOperationConfig;\n  [IdentifyOperation.PREPEND]?: BaseOperationConfig;\n  [IdentifyOperation.POSTINSERT]?: BaseOperationConfig;\n  [IdentifyOperation.PREINSERT]?: BaseOperationConfig;\n  [IdentifyOperation.REMOVE]?: BaseOperationConfig;\n}\n\nexport interface Revenue {\n  getEventProperties(): RevenueEventProperties;\n  setProductId(productId: string): Revenue;\n  setQuantity(quantity: number): Revenue;\n  setPrice(price: number): Revenue;\n  setRevenueType(revenueType: string): Revenue;\n  setEventProperties(properties: { [key: string]: any }): Revenue;\n  setRevenue(revenue: number): Revenue;\n}\n\nexport enum RevenueProperty {\n  REVENUE_PRODUCT_ID = '$productId',\n  REVENUE_QUANTITY = '$quantity',\n  REVENUE_PRICE = '$price',\n  REVENUE_TYPE = '$revenueType',\n  REVENUE = '$revenue',\n}\n\nexport interface RevenueEventProperties {\n  [RevenueProperty.REVENUE_PRODUCT_ID]?: string;\n  [RevenueProperty.REVENUE_QUANTITY]?: number;\n  [RevenueProperty.REVENUE_PRICE]?: number;\n  [RevenueProperty.REVENUE_TYPE]?: string;\n  [RevenueProperty.REVENUE_TYPE]?: string;\n  [RevenueProperty.REVENUE]?: number;\n}\n\n/**\n * Strings that have special meaning when used as an event's type\n * and have different specifications.\n */\nexport enum SpecialEventType {\n  IDENTIFY = '$identify',\n  GROUP_IDENTIFY = '$groupidentify',\n  REVENUE = 'revenue_amount',\n}\n\nexport interface TrackEvent extends BaseEvent {\n  event_type: Exclude<string, SpecialEventType>;\n}\n\nexport interface IdentifyEvent extends BaseEvent {\n  event_type: SpecialEventType.IDENTIFY;\n  user_properties:\n    | IdentifyUserProperties\n    | {\n        [key in Exclude<string, IdentifyOperation>]: any;\n      };\n}\n\nexport interface GroupIdentifyEvent extends BaseEvent {\n  event_type: SpecialEventType.GROUP_IDENTIFY;\n  group_properties:\n    | IdentifyUserProperties\n    | {\n        [key in Exclude<string, IdentifyOperation>]: any;\n      };\n}\n\nexport interface RevenueEvent extends BaseEvent {\n  event_type: SpecialEventType.REVENUE;\n  event_properties:\n    | RevenueEventProperties\n    | {\n        [key: string]: any;\n      };\n}\n\nexport type Event = TrackEvent | IdentifyEvent | GroupIdentifyEvent | RevenueEvent;\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 elements.\n// Works similary as https://lodash.com/docs/4.17.15#chunk\n\nexport const chunk = <T>(arr: T[], size: number) => {\n  const chunkSize = Math.max(size, 1);\n  return arr.reduce<T[][]>((chunks, element, index) => {\n    const chunkIndex = Math.floor(index / chunkSize);\n    if (!chunks[chunkIndex]) {\n      chunks[chunkIndex] = [];\n    }\n    chunks[chunkIndex].push(element);\n    return chunks;\n  }, []);\n};\n","/**\n * Source: [jed's gist]{@link https://gist.github.com/982883}.\n * Returns a random v4 UUID of the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx,\n * where each x is replaced with a random hexadecimal digit from 0 to f, and\n * y is replaced with a random hexadecimal digit from 8 to b.\n * Used to generate UUIDs for deviceIds.\n * @private\n */\nexport const UUID = function (a?: any): string {\n  return a // if the placeholder was passed, return\n    ? // a random number from 0 to 15\n      (\n        a ^ // unless b is 8,\n        ((Math.random() * // in which case\n          16) >> // a random number from\n          (a / 4))\n      ) // 8 to 11\n        .toString(16) // in hexadecimal\n    : // or otherwise a concatenated string:\n      (\n        String(1e7) + // 10000000 +\n        String(-1e3) + // -1000 +\n        String(-4e3) + // -4000 +\n        String(-8e3) + // -80000000 +\n        String(-1e11)\n      ) // -100000000000,\n        .replace(\n          // replacing\n          /[018]/g, // zeroes, ones, and eights with\n          UUID, // random hex digits\n        );\n};\n","const MAX_PROPERTY_KEYS = 1000;\n\nexport const isValidObject = (properties: { [key: string]: any }): boolean => {\n  if (Object.keys(properties).length > MAX_PROPERTY_KEYS) {\n    return false;\n  }\n  for (const key in properties) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    const value = properties[key];\n    if (!isValidProperties(key, value)) return false;\n  }\n  return true;\n};\n\nexport const isValidProperties = (property: string, value: any): boolean => {\n  if (typeof property !== 'string') return false;\n  if (Array.isArray(value)) {\n    let isValid = true;\n    for (const valueElement of value) {\n      if (Array.isArray(valueElement)) {\n        return false;\n      } else if (typeof valueElement === 'object') {\n        isValid = isValid && isValidObject(valueElement as object);\n      } else if (!['number', 'string'].includes(typeof valueElement)) {\n        return false;\n      }\n      if (!isValid) {\n        return false;\n      }\n    }\n  } else if (value === null || value === undefined) {\n    return false;\n  } else if (typeof value === 'object') {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n    return isValidObject(value);\n  } else if (!['number', 'string', 'boolean'].includes(typeof value)) {\n    return false;\n  }\n  return true;\n};\n","import { Payload } from './payload';\nimport { Response } from './response';\n\nexport interface Transport {\n  send(serverUrl: string, payload: Payload): Promise<Response | null>;\n}\n\nexport enum TransportType {\n  XHR = 'xhr',\n  SendBeacon = 'beacon',\n  Fetch = 'fetch',\n}\n","import {\n  IdentifyOperation,\n  IdentifyUserProperties,\n  ValidPropertyType,\n  Identify as IIdentify,\n} from '@amplitude/analytics-types';\nimport { UNSET_VALUE } from './constants';\nimport { isValidProperties } from './utils/valid-properties';\n\nexport class Identify implements IIdentify {\n  protected readonly _propertySet: Set<string> = new Set<string>();\n  protected _properties: IdentifyUserProperties = {};\n\n  public getUserProperties(): IdentifyUserProperties {\n    return { ...this._properties };\n  }\n\n  public set(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.SET, property, value);\n    return this;\n  }\n\n  public setOnce(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.SET_ONCE, property, value);\n    return this;\n  }\n\n  public append(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.APPEND, property, value);\n    return this;\n  }\n\n  public prepend(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.PREPEND, property, value);\n    return this;\n  }\n\n  public postInsert(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.POSTINSERT, property, value);\n    return this;\n  }\n\n  public preInsert(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.PREINSERT, property, value);\n    return this;\n  }\n\n  public remove(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.REMOVE, property, value);\n    return this;\n  }\n\n  public add(property: string, value: number): Identify {\n    this._safeSet(IdentifyOperation.ADD, property, value);\n    return this;\n  }\n\n  public unset(property: string): Identify {\n    this._safeSet(IdentifyOperation.UNSET, property, UNSET_VALUE);\n    return this;\n  }\n\n  public clearAll(): Identify {\n    // When clear all happens, all properties are unset. Reset the entire object.\n    this._properties = {};\n    this._properties[IdentifyOperation.CLEAR_ALL] = UNSET_VALUE;\n\n    return this;\n  }\n\n  // Returns whether or not this set actually worked.\n  private _safeSet(operation: IdentifyOperation, property: string, value: ValidPropertyType): boolean {\n    if (this._validate(operation, property, value)) {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n      let userPropertyMap: any = this._properties[operation];\n      if (userPropertyMap === undefined) {\n        userPropertyMap = {};\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        this._properties[operation] = userPropertyMap;\n      }\n\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      userPropertyMap[property] = value;\n      this._propertySet.add(property);\n      return true;\n    }\n\n    return false;\n  }\n\n  private _validate(operation: IdentifyOperation, property: string, value: ValidPropertyType): boolean {\n    if (this._properties[IdentifyOperation.CLEAR_ALL] !== undefined) {\n      // clear all already set. Skipping operation;\n      return false;\n    }\n\n    if (this._propertySet.has(property)) {\n      // Property already used. Skipping operation\n      return false;\n    }\n\n    if (operation === IdentifyOperation.ADD) {\n      return typeof value === 'number';\n    }\n\n    if (operation !== IdentifyOperation.UNSET && operation !== IdentifyOperation.REMOVE) {\n      return isValidProperties(property, value);\n    }\n    return true;\n  }\n}\n","import {\n  RevenueProperty,\n  RevenueEventProperties,\n  Revenue as IRevenue,\n  ValidPropertyType,\n} from '@amplitude/analytics-types';\nimport { isValidObject } from './utils/valid-properties';\n\nexport class Revenue implements IRevenue {\n  private productId: string;\n  private quantity: number;\n  private price: number;\n  private revenueType?: string;\n  private properties?: { [key: string]: any };\n  private revenue?: number;\n\n  constructor() {\n    this.productId = '';\n    this.quantity = 1;\n    this.price = 0.0;\n  }\n\n  setProductId(productId: string) {\n    this.productId = productId;\n    return this;\n  }\n\n  setQuantity(quantity: number) {\n    if (quantity > 0) {\n      this.quantity = quantity;\n    }\n    return this;\n  }\n\n  setPrice(price: number) {\n    this.price = price;\n    return this;\n  }\n\n  setRevenueType(revenueType: string) {\n    this.revenueType = revenueType;\n    return this;\n  }\n\n  setRevenue(revenue: number) {\n    this.revenue = revenue;\n    return this;\n  }\n\n  setEventProperties(properties: { [key: string]: ValidPropertyType }) {\n    if (isValidObject(properties)) {\n      this.properties = properties;\n    }\n    return this;\n  }\n\n  getEventProperties(): RevenueEventProperties {\n    const eventProperties: RevenueEventProperties = this.properties ? { ...this.properties } : {};\n    eventProperties[RevenueProperty.REVENUE_PRODUCT_ID] = this.productId;\n    eventProperties[RevenueProperty.REVENUE_QUANTITY] = this.quantity;\n    eventProperties[RevenueProperty.REVENUE_PRICE] = this.price;\n    eventProperties[RevenueProperty.REVENUE_TYPE] = this.revenueType;\n    eventProperties[RevenueProperty.REVENUE] = this.revenue;\n    return eventProperties;\n  }\n}\n","import {\n  BaseEvent,\n  TrackEvent,\n  IdentifyEvent,\n  GroupIdentifyEvent,\n  SpecialEventType,\n  Identify as IIdentify,\n  Revenue,\n  RevenueEvent,\n  EventOptions,\n} from '@amplitude/analytics-types';\nimport { Identify } from '../identify';\n\nexport const createTrackEvent = (\n  eventInput: BaseEvent | string,\n  eventProperties?: Record<string, any>,\n  eventOptions?: EventOptions,\n): TrackEvent => {\n  const baseEvent: BaseEvent = typeof eventInput === 'string' ? { event_type: eventInput } : eventInput;\n  return {\n    ...baseEvent,\n    ...eventOptions,\n    ...(eventProperties && { event_properties: eventProperties }),\n  };\n};\n\nexport const createIdentifyEvent = (identify: IIdentify, eventOptions?: EventOptions): IdentifyEvent => {\n  const identifyEvent: IdentifyEvent = {\n    ...eventOptions,\n    event_type: SpecialEventType.IDENTIFY,\n    user_properties: identify.getUserProperties(),\n  };\n\n  return identifyEvent;\n};\n\nexport const createGroupIdentifyEvent = (\n  groupType: string,\n  groupName: string | string[],\n  identify: IIdentify,\n  eventOptions?: EventOptions,\n): GroupIdentifyEvent => {\n  const groupIdentify: GroupIdentifyEvent = {\n    ...eventOptions,\n    event_type: SpecialEventType.GROUP_IDENTIFY,\n    group_properties: identify.getUserProperties(),\n    groups: {\n      [groupType]: groupName,\n    },\n  };\n\n  return groupIdentify;\n};\n\nexport const createGroupEvent = (groupType: string, groupName: string | string[], eventOptions?: EventOptions) => {\n  const identify = new Identify();\n  identify.set(groupType, groupName);\n\n  const groupEvent: IdentifyEvent = {\n    ...eventOptions,\n    event_type: SpecialEventType.IDENTIFY,\n    user_properties: identify.getUserProperties(),\n    groups: {\n      [groupType]: groupName,\n    },\n  };\n  return groupEvent;\n};\n\nexport const createRevenueEvent = (revenue: Revenue, eventOptions?: EventOptions): RevenueEvent => {\n  return {\n    ...eventOptions,\n    event_type: SpecialEventType.REVENUE,\n    event_properties: revenue.getEventProperties(),\n  };\n};\n","import {\n  BeforePlugin,\n  Config,\n  CoreClient,\n  DestinationPlugin,\n  EnrichmentPlugin,\n  Event,\n  EventCallback,\n  Plugin,\n  PluginType,\n  Result,\n} from '@amplitude/analytics-types';\nimport { buildResult } from './utils/result-builder';\n\nexport class Timeline {\n  queue: [Event, EventCallback][] = [];\n  // Flag to guarantee one schedule apply is running\n  applying = false;\n  // Flag indicates whether timeline is ready to process event\n  // Events collected before timeline is ready will stay in the queue to be processed later\n  plugins: Plugin[] = [];\n\n  constructor(private client: CoreClient) {}\n\n  async register(plugin: Plugin, config: Config) {\n    await plugin.setup(config, this.client);\n    this.plugins.push(plugin);\n  }\n\n  async deregister(pluginName: string) {\n    const index = this.plugins.findIndex((plugin) => plugin.name === pluginName);\n    const plugin = this.plugins[index];\n    this.plugins.splice(index, 1);\n    await plugin.teardown?.();\n  }\n\n  reset(client: CoreClient) {\n    this.applying = false;\n    const plugins = this.plugins;\n    plugins.map((plugin) => plugin.teardown?.());\n    this.plugins = [];\n    this.client = client;\n  }\n\n  push(event: Event) {\n    return new Promise<Result>((resolve) => {\n      this.queue.push([event, resolve]);\n      this.scheduleApply(0);\n    });\n  }\n\n  scheduleApply(timeout: number) {\n    if (this.applying) return;\n    this.applying = true;\n    setTimeout(() => {\n      void this.apply(this.queue.shift()).then(() => {\n        this.applying = false;\n        if (this.queue.length > 0) {\n          this.scheduleApply(0);\n        }\n      });\n    }, timeout);\n  }\n\n  async apply(item: [Event, EventCallback] | undefined) {\n    if (!item) {\n      return;\n    }\n\n    let [event] = item;\n    const [, resolve] = item;\n\n    const before = this.plugins.filter<BeforePlugin>(\n      (plugin: Plugin): plugin is BeforePlugin => plugin.type === PluginType.BEFORE,\n    );\n\n    for (const plugin of before) {\n      const e = await plugin.execute({ ...event });\n      if (e === null) {\n        resolve({ event, code: 0, message: '' });\n        return;\n      } else {\n        event = e;\n      }\n    }\n\n    const enrichment = this.plugins.filter<EnrichmentPlugin>(\n      (plugin: Plugin): plugin is EnrichmentPlugin => plugin.type === PluginType.ENRICHMENT,\n    );\n\n    for (const plugin of enrichment) {\n      const e = await plugin.execute({ ...event });\n      if (e === null) {\n        resolve({ event, code: 0, message: '' });\n        return;\n      } else {\n        event = e;\n      }\n    }\n\n    const destination = this.plugins.filter<DestinationPlugin>(\n      (plugin: Plugin): plugin is DestinationPlugin => plugin.type === PluginType.DESTINATION,\n    );\n\n    const executeDestinations = destination.map((plugin) => {\n      const eventClone = { ...event };\n      return plugin.execute(eventClone).catch((e) => buildResult(eventClone, 0, String(e)));\n    });\n\n    void Promise.all(executeDestinations).then(([result]) => {\n      resolve(result);\n    });\n\n    return;\n  }\n\n  async flush() {\n    const queue = this.queue;\n    this.queue = [];\n\n    await Promise.all(queue.map((item) => this.apply(item)));\n\n    const destination = this.plugins.filter<DestinationPlugin>(\n      (plugin: Plugin): plugin is DestinationPlugin => plugin.type === PluginType.DESTINATION,\n    );\n\n    const executeDestinations = destination.map((plugin) => {\n      return plugin.flush && plugin.flush();\n    });\n\n    await Promise.all(executeDestinations);\n  }\n}\n","import {\n  CoreClient,\n  Config,\n  Event,\n  BaseEvent,\n  EventOptions,\n  Identify,\n  Plugin,\n  Revenue,\n  Result,\n} from '@amplitude/analytics-types';\nimport {\n  createGroupIdentifyEvent,\n  createIdentifyEvent,\n  createTrackEvent,\n  createRevenueEvent,\n  createGroupEvent,\n} from './utils/event-builder';\nimport { Timeline } from './timeline';\nimport { buildResult } from './utils/result-builder';\nimport { CLIENT_NOT_INITIALIZED, OPT_OUT_MESSAGE } from './messages';\nimport { returnWrapper } from './utils/return-wrapper';\n\nexport class AmplitudeCore implements CoreClient {\n  protected initializing = false;\n  protected name: string;\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  config: Config;\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  timeline: Timeline;\n  protected q: CallableFunction[] = [];\n  protected dispatchQ: CallableFunction[] = [];\n\n  constructor(name = '$default') {\n    this.timeline = new Timeline(this);\n    this.name = name;\n  }\n\n  protected async _init(config: Config) {\n    this.config = config;\n    this.timeline.reset(this);\n    await this.runQueuedFunctions('q');\n  }\n\n  async runQueuedFunctions(queueName: 'q' | 'dispatchQ') {\n    const queuedFunctions = this[queueName];\n    this[queueName] = [];\n    for (const queuedFunction of queuedFunctions) {\n      await queuedFunction();\n    }\n  }\n\n  track(eventInput: BaseEvent | string, eventProperties?: Record<string, any>, eventOptions?: EventOptions) {\n    const event = createTrackEvent(eventInput, eventProperties, eventOptions);\n    return returnWrapper(this.dispatch(event));\n  }\n\n  logEvent = this.track.bind(this);\n\n  identify(identify: Identify, eventOptions?: EventOptions) {\n    const event = createIdentifyEvent(identify, eventOptions);\n    return returnWrapper(this.dispatch(event));\n  }\n\n  groupIdentify(groupType: string, groupName: string | string[], identify: Identify, eventOptions?: EventOptions) {\n    const event = createGroupIdentifyEvent(groupType, groupName, identify, eventOptions);\n    return returnWrapper(this.dispatch(event));\n  }\n\n  setGroup(groupType: string, groupName: string | string[], eventOptions?: EventOptions) {\n    const event = createGroupEvent(groupType, groupName, eventOptions);\n    return returnWrapper(this.dispatch(event));\n  }\n\n  revenue(revenue: Revenue, eventOptions?: EventOptions) {\n    const event = createRevenueEvent(revenue, eventOptions);\n    return returnWrapper(this.dispatch(event));\n  }\n\n  add(plugin: Plugin) {\n    if (!this.config) {\n      this.q.push(this.add.bind(this, plugin));\n      return returnWrapper();\n    }\n    return returnWrapper(this.timeline.register(plugin, this.config));\n  }\n\n  remove(pluginName: string) {\n    if (!this.config) {\n      this.q.push(this.remove.bind(this, pluginName));\n      return returnWrapper();\n    }\n    return returnWrapper(this.timeline.deregister(pluginName));\n  }\n\n  dispatchWithCallback(event: Event, callback: (result: Result) => void): void {\n    if (!this.config) {\n      return callback(buildResult(event, 0, CLIENT_NOT_INITIALIZED));\n    }\n    void this.process(event).then(callback);\n  }\n\n  async dispatch(event: Event): Promise<Result> {\n    if (!this.config) {\n      return new Promise<Result>((resolve) => {\n        this.dispatchQ.push(this.dispatchWithCallback.bind(this, event, resolve));\n      });\n    }\n\n    return this.process(event);\n  }\n\n  async process(event: Event): Promise<Result> {\n    try {\n      // skip event processing if opt out\n      if (this.config.optOut) {\n        return buildResult(event, 0, OPT_OUT_MESSAGE);\n      }\n\n      const result = await this.timeline.push(event);\n\n      result.code === 200\n        ? this.config.loggerProvider.log(result.message)\n        : this.config.loggerProvider.error(result.message);\n\n      return result;\n    } catch (e) {\n      this.config.loggerProvider.error(e);\n      const message = String(e);\n      const result = buildResult(event, 0, message);\n\n      return result;\n    }\n  }\n\n  setOptOut(optOut: boolean) {\n    if (!this.config) {\n      this.q.push(this.setOptOut.bind(this, Boolean(optOut)));\n      return;\n    }\n    this.config.optOut = Boolean(optOut);\n  }\n\n  flush() {\n    return returnWrapper(this.timeline.flush());\n  }\n}\n","import { Campaign } from '@amplitude/analytics-types';\n\nexport const UTM_CAMPAIGN = 'utm_campaign';\nexport const UTM_CONTENT = 'utm_content';\nexport const UTM_ID = 'utm_id';\nexport const UTM_MEDIUM = 'utm_medium';\nexport const UTM_SOURCE = 'utm_source';\nexport const UTM_TERM = 'utm_term';\n\nexport const DCLID = 'dclid';\nexport const FBCLID = 'fbclid';\nexport const GBRAID = 'gbraid';\nexport const GCLID = 'gclid';\nexport const KO_CLICK_ID = 'ko_click_id';\nexport const LI_FAT_ID = 'li_fat_id';\nexport const MSCLKID = 'msclkid';\nexport const RDT_CID = 'rtd_cid';\nexport const TTCLID = 'ttclid';\nexport const TWCLID = 'twclid';\nexport const WBRAID = 'wbraid';\n\nexport const EMPTY_VALUE = 'EMPTY';\n\nexport const BASE_CAMPAIGN: Campaign = {\n  utm_campaign: undefined,\n  utm_content: undefined,\n  utm_id: undefined,\n  utm_medium: undefined,\n  utm_source: undefined,\n  utm_term: undefined,\n  referrer: undefined,\n  referring_domain: undefined,\n  dclid: undefined,\n  gbraid: undefined,\n  gclid: undefined,\n  fbclid: undefined,\n  ko_click_id: undefined,\n  li_fat_id: undefined,\n  msclkid: undefined,\n  rtd_cid: undefined,\n  ttclid: undefined,\n  twclid: undefined,\n  wbraid: undefined,\n};\n\nexport const MKTG = 'MKTG';\n","import { getQueryParams } from '../query-params';\nimport {\n  UTM_CAMPAIGN,\n  UTM_CONTENT,\n  UTM_MEDIUM,\n  UTM_SOURCE,\n  UTM_TERM,\n  GCLID,\n  FBCLID,\n  BASE_CAMPAIGN,\n  DCLID,\n  MSCLKID,\n  RDT_CID,\n  TWCLID,\n  TTCLID,\n  KO_CLICK_ID,\n  LI_FAT_ID,\n  GBRAID,\n  WBRAID,\n  UTM_ID,\n} from './constants';\nimport {\n  Campaign,\n  CampaignParser as ICampaignParser,\n  ClickIdParameters,\n  ReferrerParameters,\n  UTMParameters,\n} from '@amplitude/analytics-types';\n\nexport class CampaignParser implements ICampaignParser {\n  async parse(): Promise<Campaign> {\n    return {\n      ...BASE_CAMPAIGN,\n      ...this.getUtmParam(),\n      ...this.getReferrer(),\n      ...this.getClickIds(),\n    } as Campaign;\n  }\n\n  getUtmParam(): UTMParameters {\n    const params = getQueryParams();\n\n    const utmCampaign = params[UTM_CAMPAIGN];\n    const utmContent = params[UTM_CONTENT];\n    const utmId = params[UTM_ID];\n    const utmMedium = params[UTM_MEDIUM];\n    const utmSource = params[UTM_SOURCE];\n    const utmTerm = params[UTM_TERM];\n\n    return {\n      utm_campaign: utmCampaign,\n      utm_content: utmContent,\n      utm_id: utmId,\n      utm_medium: utmMedium,\n      utm_source: utmSource,\n      utm_term: utmTerm,\n    };\n  }\n\n  getReferrer(): ReferrerParameters {\n    const data: ReferrerParameters = {\n      referrer: undefined,\n      referring_domain: undefined,\n    };\n    try {\n      data.referrer = document.referrer || undefined;\n      data.referring_domain = data.referrer?.split('/')[2] ?? undefined;\n    } catch {\n      // nothing to track\n    }\n    return data;\n  }\n\n  getClickIds(): ClickIdParameters {\n    const params = getQueryParams();\n    return {\n      [DCLID]: params[DCLID],\n      [FBCLID]: params[FBCLID],\n      [GBRAID]: params[GBRAID],\n      [GCLID]: params[GCLID],\n      [KO_CLICK_ID]: params[KO_CLICK_ID],\n      [LI_FAT_ID]: params[LI_FAT_ID],\n      [MSCLKID]: params[MSCLKID],\n      [RDT_CID]: params[RDT_CID],\n      [TTCLID]: params[TTCLID],\n      [TWCLID]: params[TWCLID],\n      [WBRAID]: params[WBRAID],\n    };\n  }\n}\n","export const omitUndefined = (input: Record<string, string | undefined>) => {\n  const obj: Record<string, string> = {};\n  for (const key in input) {\n    const val = input[key];\n    if (val) {\n      obj[key] = val;\n    }\n  }\n  return obj;\n};\n","import { CampaignParser, getGlobalScope } from '@amplitude/analytics-client-common';\nimport {\n  BrowserClient,\n  BrowserConfig,\n  Event,\n  IdentifyOperation,\n  IdentifyUserProperties,\n  Logger,\n  PluginType,\n} from '@amplitude/analytics-types';\nimport { BASE_CAMPAIGN } from '@amplitude/analytics-client-common';\nimport {\n  CreatePageViewTrackingPlugin,\n  CreatePageViewTrackingPluginParameters,\n  Options,\n} from './typings/page-view-tracking';\nimport { omitUndefined } from './utils';\n\nexport const pageViewTrackingPlugin: CreatePageViewTrackingPlugin = (\n  ...args: CreatePageViewTrackingPluginParameters\n) => {\n  let amplitude: BrowserClient | undefined;\n  let options: Options = {};\n  const globalScope = getGlobalScope();\n  let loggerProvider: Logger | undefined = undefined;\n  let pushState: undefined | ((data: any, unused: string, url?: string | URL | null) => void);\n\n  const [clientOrOptions, configOrUndefined] = args;\n  if (clientOrOptions && 'init' in clientOrOptions) {\n    amplitude = clientOrOptions;\n    if (configOrUndefined) {\n      options = configOrUndefined;\n    }\n  } else if (clientOrOptions) {\n    options = clientOrOptions;\n  }\n\n  const createPageViewEvent = async (): Promise<Event> => {\n    return {\n      event_type: options.eventType ?? 'Page View',\n      event_properties: {\n        ...(await getCampaignParams()),\n        page_domain: /* istanbul ignore next */ (typeof location !== 'undefined' && location.hostname) || '',\n        page_location: /* istanbul ignore next */ (typeof location !== 'undefined' && location.href) || '',\n        page_path: /* istanbul ignore next */ (typeof location !== 'undefined' && location.pathname) || '',\n        page_title: /* istanbul ignore next */ (typeof document !== 'undefined' && document.title) || '',\n        page_url: /* istanbul ignore next */ (typeof location !== 'undefined' && location.href.split('?')[0]) || '',\n      },\n    };\n  };\n\n  const shouldTrackOnPageLoad = () =>\n    typeof options.trackOn === 'undefined' || (typeof options.trackOn === 'function' && options.trackOn());\n\n  /* istanbul ignore next */\n  let previousURL: string | null = typeof location !== 'undefined' ? location.href : null;\n\n  const trackHistoryPageView = async (): Promise<void> => {\n    const newURL = location.href;\n    const shouldTrackPageView =\n      shouldTrackHistoryPageView(options.trackHistoryChanges, newURL, previousURL || '') && shouldTrackOnPageLoad();\n    // Note: Update `previousURL` in the same clock tick as `shouldTrackHistoryPageView()`\n    // This was previously done after `amplitude?.track(await createPageViewEvent());` and\n    // causes a concurrency issue where app triggers `pushState` twice with the same URL target\n    // but `previousURL` is only updated after the second `pushState` producing two page viewed events\n    previousURL = newURL;\n\n    if (shouldTrackPageView) {\n      /* istanbul ignore next */\n      loggerProvider?.log('Tracking page view event');\n      amplitude?.track(await createPageViewEvent());\n    }\n  };\n\n  /* istanbul ignore next */\n  const trackHistoryPageViewWrapper = () => {\n    void trackHistoryPageView();\n  };\n\n  const plugin = {\n    name: 'page-view-tracking',\n    type: PluginType.ENRICHMENT as const,\n\n    setup: async (config: BrowserConfig, client?: BrowserClient) => {\n      amplitude = amplitude ?? client;\n      if (!amplitude) {\n        const receivedType = clientOrOptions ? 'Options' : 'undefined';\n        config.loggerProvider.error(\n          `Argument of type '${receivedType}' is not assignable to parameter of type 'BrowserClient'.`,\n        );\n        return;\n      }\n\n      loggerProvider = config.loggerProvider;\n      loggerProvider.log('Installing @amplitude/plugin-page-view-tracking-browser');\n\n      options.trackOn = config.attribution?.trackPageViews ? 'attribution' : options.trackOn;\n\n      if (!client && config.attribution?.trackPageViews) {\n        loggerProvider.warn(\n          `@amplitude/plugin-page-view-tracking-browser overrides page view tracking behavior defined in @amplitude/analytics-browser. Resolve by disabling page view tracking in @amplitude/analytics-browser.`,\n        );\n        config.attribution.trackPageViews = false;\n      }\n\n      if (options.trackHistoryChanges && globalScope) {\n        /* istanbul ignore next */\n        globalScope.addEventListener('popstate', trackHistoryPageViewWrapper);\n\n        // Save reference to original push state, to be used in teardown\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        pushState = globalScope.history.pushState;\n\n        /* istanbul ignore next */\n        // There is no global browser listener for changes to history, so we have\n        // to modify pushState directly.\n        // https://stackoverflow.com/a/64927639\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        globalScope.history.pushState = new Proxy(globalScope.history.pushState, {\n          apply: (target, thisArg, [state, unused, url]) => {\n            target.apply(thisArg, [state, unused, url]);\n            void trackHistoryPageView();\n          },\n        });\n      }\n\n      if (shouldTrackOnPageLoad()) {\n        loggerProvider.log('Tracking page view event');\n\n        amplitude.track(await createPageViewEvent());\n      }\n    },\n\n    execute: async (event: Event) => {\n      if (options.trackOn === 'attribution' && isCampaignEvent(event)) {\n        /* istanbul ignore next */ // loggerProvider should be defined by the time execute is invoked\n        loggerProvider?.log('Enriching campaign event to page view event with campaign parameters');\n        const pageViewEvent = await createPageViewEvent();\n        event.event_type = pageViewEvent.event_type;\n        event.event_properties = {\n          ...event.event_properties,\n          ...pageViewEvent.event_properties,\n        };\n      }\n      return event;\n    },\n\n    teardown: async () => {\n      if (globalScope) {\n        globalScope.removeEventListener('popstate', trackHistoryPageViewWrapper);\n        if (pushState) {\n          globalScope.history.pushState = pushState;\n        }\n      }\n    },\n  };\n\n  // Required for unit tests\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  (plugin as any).__trackHistoryPageView = trackHistoryPageView;\n\n  return plugin;\n};\n\nconst getCampaignParams = async () => omitUndefined(await new CampaignParser().parse());\n\nconst isCampaignEvent = (event: Event) => {\n  if (event.event_type === '$identify' && event.user_properties) {\n    const properties = event.user_properties as IdentifyUserProperties;\n    const $set = properties[IdentifyOperation.SET] || {};\n    const $unset = properties[IdentifyOperation.UNSET] || {};\n    const userProperties = [...Object.keys($set), ...Object.keys($unset)];\n    return Object.keys(BASE_CAMPAIGN).every((value) => userProperties.includes(value));\n  }\n  return false;\n};\n\nexport const shouldTrackHistoryPageView = (\n  trackingOption: Options['trackHistoryChanges'],\n  newURL: string,\n  oldURL: string,\n): boolean => {\n  switch (trackingOption) {\n    case 'pathOnly':\n      return newURL.split('?')[0] !== oldURL.split('?')[0];\n    default:\n      return newURL !== oldURL;\n  }\n};\n","import { BASE_CAMPAIGN } from '@amplitude/analytics-client-common';\nimport { AMPLITUDE_PREFIX, createIdentifyEvent, Identify } from '@amplitude/analytics-core';\nimport { Campaign } from '@amplitude/analytics-types';\nimport { Options } from './typings/web-attribution';\n\nexport const getStorageKey = (apiKey: string, postKey = '', limit = 10) => {\n  return [AMPLITUDE_PREFIX, postKey, apiKey.substring(0, limit)].filter(Boolean).join('_');\n};\n\nconst domainWithoutSubdomain = (domain: string) => {\n  const parts = domain.split('.');\n\n  if (parts.length <= 2) {\n    return domain;\n  }\n\n  return parts.slice(parts.length - 2, parts.length).join('.');\n};\n\nexport const isNewCampaign = (current: Campaign, previous: Campaign | undefined, options: Options) => {\n  const { referrer, referring_domain, ...currentCampaign } = current;\n  const { referrer: _previous_referrer, referring_domain: prevReferringDomain, ...previousCampaign } = previous || {};\n\n  if (current.referring_domain && options.excludeReferrers?.includes(current.referring_domain)) {\n    return false;\n  }\n\n  const hasNewCampaign = JSON.stringify(currentCampaign) !== JSON.stringify(previousCampaign);\n\n  const hasNewDomain =\n    domainWithoutSubdomain(referring_domain || '') !== domainWithoutSubdomain(prevReferringDomain || '');\n\n  return !previous || hasNewCampaign || hasNewDomain;\n};\n\nexport const createCampaignEvent = (campaign: Campaign, options: Options) => {\n  const campaignParameters: Campaign = {\n    // This object definition allows undefined keys to be iterated on\n    // in .reduce() to build indentify object\n    ...BASE_CAMPAIGN,\n    ...campaign,\n  };\n  const identifyEvent = Object.entries(campaignParameters).reduce((identify, [key, value]) => {\n    identify.setOnce(`initial_${key}`, value ?? options.initialEmptyValue ?? 'EMPTY');\n    if (value) {\n      return identify.set(key, value);\n    }\n    return identify.unset(key);\n  }, new Identify());\n\n  return createIdentifyEvent(identifyEvent);\n};\n","import { Storage } from '@amplitude/analytics-types';\n\nexport class MemoryStorage<T> implements Storage<T> {\n  memoryStorage: Map<string, T> = new Map();\n\n  async isEnabled(): Promise<boolean> {\n    return true;\n  }\n\n  async get(key: string): Promise<T | undefined> {\n    return this.memoryStorage.get(key);\n  }\n\n  async getRaw(key: string): Promise<string | undefined> {\n    const value = await this.get(key);\n    return value ? JSON.stringify(value) : undefined;\n  }\n\n  async set(key: string, value: T): Promise<void> {\n    this.memoryStorage.set(key, value);\n  }\n\n  async remove(key: string): Promise<void> {\n    this.memoryStorage.delete(key);\n  }\n\n  async reset(): Promise<void> {\n    this.memoryStorage.clear();\n  }\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\nimport { Payload, Response, Status, Transport } from '@amplitude/analytics-types';\n\nexport class BaseTransport implements Transport {\n  send(_serverUrl: string, _payload: Payload): Promise<Response | null> {\n    return Promise.resolve(null);\n  }\n\n  buildResponse(responseJSON: Record<string, any>): Response | null {\n    if (typeof responseJSON !== 'object') {\n      return null;\n    }\n\n    const statusCode = responseJSON.code || 0;\n    const status = this.buildStatus(statusCode);\n\n    switch (status) {\n      case Status.Success:\n        return {\n          status,\n          statusCode,\n          body: {\n            eventsIngested: responseJSON.events_ingested ?? 0,\n            payloadSizeBytes: responseJSON.payload_size_bytes ?? 0,\n            serverUploadTime: responseJSON.server_upload_time ?? 0,\n          },\n        };\n\n      case Status.Invalid:\n        return {\n          status,\n          statusCode,\n          body: {\n            error: responseJSON.error ?? '',\n            missingField: responseJSON.missing_field ?? '',\n            eventsWithInvalidFields: responseJSON.events_with_invalid_fields ?? {},\n            eventsWithMissingFields: responseJSON.events_with_missing_fields ?? {},\n            eventsWithInvalidIdLengths: responseJSON.events_with_invalid_id_lengths ?? {},\n            epsThreshold: responseJSON.eps_threshold ?? 0,\n            exceededDailyQuotaDevices: responseJSON.exceeded_daily_quota_devices ?? {},\n            silencedDevices: responseJSON.silenced_devices ?? [],\n            silencedEvents: responseJSON.silenced_events ?? [],\n            throttledDevices: responseJSON.throttled_devices ?? {},\n            throttledEvents: responseJSON.throttled_events ?? [],\n          },\n        };\n      case Status.PayloadTooLarge:\n        return {\n          status,\n          statusCode,\n          body: {\n            error: responseJSON.error ?? '',\n          },\n        };\n      case Status.RateLimit:\n        return {\n          status,\n          statusCode,\n          body: {\n            error: responseJSON.error ?? '',\n            epsThreshold: responseJSON.eps_threshold ?? 0,\n            throttledDevices: responseJSON.throttled_devices ?? {},\n            throttledUsers: responseJSON.throttled_users ?? {},\n            exceededDailyQuotaDevices: responseJSON.exceeded_daily_quota_devices ?? {},\n            exceededDailyQuotaUsers: responseJSON.exceeded_daily_quota_users ?? {},\n            throttledEvents: responseJSON.throttled_events ?? [],\n          },\n        };\n      case Status.Timeout:\n      default:\n        return {\n          status,\n          statusCode,\n        };\n    }\n  }\n\n  buildStatus(code: number): Status {\n    if (code >= 200 && code < 300) {\n      return Status.Success;\n    }\n\n    if (code === 429) {\n      return Status.RateLimit;\n    }\n\n    if (code === 413) {\n      return Status.PayloadTooLarge;\n    }\n\n    if (code === 408) {\n      return Status.Timeout;\n    }\n\n    if (code >= 400 && code < 500) {\n      return Status.Invalid;\n    }\n\n    if (code >= 500) {\n      return Status.Failed;\n    }\n\n    return Status.Unknown;\n  }\n}\n","import { BaseTransport } from '@amplitude/analytics-core';\nimport { Payload, Response, Transport } from '@amplitude/analytics-types';\n\nexport class FetchTransport extends BaseTransport implements Transport {\n  async send(serverUrl: string, payload: Payload): Promise<Response | null> {\n    /* istanbul ignore if */\n    if (typeof fetch === 'undefined') {\n      throw new Error('FetchTransport is not supported');\n    }\n    const options: RequestInit = {\n      headers: {\n        'Content-Type': 'application/json',\n        Accept: '*/*',\n      },\n      body: JSON.stringify(payload),\n      method: 'POST',\n    };\n    const response = await fetch(serverUrl, options);\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    const responsePayload: Record<string, any> = await response.json();\n    return this.buildResponse(responsePayload);\n  }\n}\n","import { Storage, CookieStorageOptions } from '@amplitude/analytics-types';\nimport { getGlobalScope } from '../global-scope';\n\nexport class CookieStorage<T> implements Storage<T> {\n  options: CookieStorageOptions;\n  private static testValue: undefined | string;\n\n  constructor(options?: CookieStorageOptions) {\n    this.options = { ...options };\n  }\n\n  async isEnabled(): Promise<boolean> {\n    /* istanbul ignore if */\n    if (!getGlobalScope()) {\n      return false;\n    }\n\n    CookieStorage.testValue = String(Date.now());\n    const testStrorage = new CookieStorage<string>(this.options);\n    const testKey = 'AMP_TEST';\n    try {\n      await testStrorage.set(testKey, CookieStorage.testValue);\n      const value = await testStrorage.get(testKey);\n      return value === CookieStorage.testValue;\n    } catch {\n      /* istanbul ignore next */\n      return false;\n    } finally {\n      await testStrorage.remove(testKey);\n    }\n  }\n\n  async get(key: string): Promise<T | undefined> {\n    let value = await this.getRaw(key);\n    if (!value) {\n      return undefined;\n    }\n    try {\n      try {\n        value = decodeURIComponent(atob(value));\n      } catch {\n        // value not encoded\n      }\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      return JSON.parse(value);\n    } catch {\n      /* istanbul ignore next */\n      return undefined;\n    }\n  }\n\n  async getRaw(key: string): Promise<string | undefined> {\n    const globalScope = getGlobalScope();\n    const cookie = globalScope?.document.cookie.split('; ') ?? [];\n    const match = cookie.find((c) => c.indexOf(key + '=') === 0);\n    if (!match) {\n      return undefined;\n    }\n    return match.substring(key.length + 1);\n  }\n\n  async set(key: string, value: T | null): Promise<void> {\n    try {\n      const expirationDays = this.options.expirationDays ?? 0;\n      const expires = value !== null ? expirationDays : -1;\n      let expireDate: Date | undefined = undefined;\n      if (expires) {\n        const date = new Date();\n        date.setTime(date.getTime() + expires * 24 * 60 * 60 * 1000);\n        expireDate = date;\n      }\n      let str = `${key}=${btoa(encodeURIComponent(JSON.stringify(value)))}`;\n      if (expireDate) {\n        str += `; expires=${expireDate.toUTCString()}`;\n      }\n      str += '; path=/';\n      if (this.options.domain) {\n        str += `; domain=${this.options.domain}`;\n      }\n      if (this.options.secure) {\n        str += '; Secure';\n      }\n      if (this.options.sameSite) {\n        str += `; SameSite=${this.options.sameSite}`;\n      }\n      const globalScope = getGlobalScope();\n      if (globalScope) {\n        globalScope.document.cookie = str;\n      }\n    } catch {\n      //\n    }\n  }\n\n  async remove(key: string): Promise<void> {\n    await this.set(key, null);\n  }\n\n  async reset(): Promise<void> {\n    return;\n  }\n}\n","import { getGlobalScope } from '@amplitude/analytics-client-common';\nimport { Storage } from '@amplitude/analytics-types';\nimport { Logger } from '@amplitude/analytics-types';\n\nconst MAX_ARRAY_LENGTH = 1000;\n\ninterface LocalStorageOptions {\n  loggerProvider?: Logger;\n}\n\nexport class LocalStorage<T> implements Storage<T> {\n  loggerProvider?: Logger;\n\n  constructor(config?: LocalStorageOptions) {\n    this.loggerProvider = config?.loggerProvider;\n  }\n\n  async isEnabled(): Promise<boolean> {\n    /* istanbul ignore if */\n    if (!getGlobalScope()) {\n      return false;\n    }\n\n    const random = String(Date.now());\n    const testStorage = new LocalStorage<string>();\n    const testKey = 'AMP_TEST';\n    try {\n      await testStorage.set(testKey, random);\n      const value = await testStorage.get(testKey);\n      return value === random;\n    } catch {\n      /* istanbul ignore next */\n      return false;\n    } finally {\n      await testStorage.remove(testKey);\n    }\n  }\n\n  async get(key: string): Promise<T | undefined> {\n    try {\n      const value = await this.getRaw(key);\n      if (!value) {\n        return undefined;\n      }\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      return JSON.parse(value);\n    } catch {\n      /* istanbul ignore next */\n      return undefined;\n    }\n  }\n\n  async getRaw(key: string): Promise<string | undefined> {\n    return getGlobalScope()?.localStorage.getItem(key) || undefined;\n  }\n\n  async set(key: string, value: T): Promise<void> {\n    const isExceededArraySize = Array.isArray(value) && value.length > MAX_ARRAY_LENGTH;\n\n    try {\n      const serializedValue = isExceededArraySize\n        ? JSON.stringify(value.slice(0, MAX_ARRAY_LENGTH) as T)\n        : JSON.stringify(value);\n\n      getGlobalScope()?.localStorage.setItem(key, serializedValue);\n    } catch {\n      //\n    }\n\n    if (isExceededArraySize) {\n      const droppedEventsCount = value.length - MAX_ARRAY_LENGTH;\n      this.loggerProvider?.error(\n        `Failed to save ${droppedEventsCount} events because the queue length exceeded ${MAX_ARRAY_LENGTH}.`,\n      );\n    }\n  }\n\n  async remove(key: string): Promise<void> {\n    try {\n      getGlobalScope()?.localStorage.removeItem(key);\n    } catch {\n      //\n    }\n  }\n\n  async reset(): Promise<void> {\n    try {\n      getGlobalScope()?.localStorage.clear();\n    } catch {\n      //\n    }\n  }\n}\n","import { BaseTransport } from '@amplitude/analytics-core';\nimport { Payload, Response, Transport } from '@amplitude/analytics-types';\n\nexport class XHRTransport extends BaseTransport implements Transport {\n  private state = {\n    done: 4,\n  };\n\n  async send(serverUrl: string, payload: Payload): Promise<Response | null> {\n    return new Promise((resolve, reject) => {\n      /* istanbul ignore if */\n      if (typeof XMLHttpRequest === 'undefined') {\n        reject(new Error('XHRTransport is not supported.'));\n      }\n\n      const xhr = new XMLHttpRequest();\n      xhr.open('POST', serverUrl, true);\n      xhr.onreadystatechange = () => {\n        if (xhr.readyState === this.state.done) {\n          try {\n            const responsePayload = xhr.responseText;\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            const parsedResponsePayload: Record<string, any> = JSON.parse(responsePayload);\n            const result = this.buildResponse(parsedResponsePayload);\n            resolve(result);\n          } catch (e) {\n            reject(e);\n          }\n        }\n      };\n      xhr.setRequestHeader('Content-Type', 'application/json');\n      xhr.setRequestHeader('Accept', '*/*');\n      xhr.send(JSON.stringify(payload));\n    });\n  }\n}\n","import { getGlobalScope } from '@amplitude/analytics-client-common';\nimport { BaseTransport } from '@amplitude/analytics-core';\nimport { Payload, Response, Transport } from '@amplitude/analytics-types';\n\nexport class SendBeaconTransport extends BaseTransport implements Transport {\n  async send(serverUrl: string, payload: Payload): Promise<Response | null> {\n    return new Promise((resolve, reject) => {\n      const globalScope = getGlobalScope();\n      /* istanbul ignore if */\n      if (!globalScope?.navigator.sendBeacon) {\n        throw new Error('SendBeaconTransport is not supported');\n      }\n      try {\n        const data = JSON.stringify(payload);\n        const success = globalScope.navigator.sendBeacon(serverUrl, JSON.stringify(payload));\n        if (success) {\n          return resolve(\n            this.buildResponse({\n              code: 200,\n              events_ingested: payload.events.length,\n              payload_size_bytes: data.length,\n              server_upload_time: Date.now(),\n            }),\n          );\n        }\n        return resolve(this.buildResponse({ code: 500 }));\n      } catch (e) {\n        reject(e);\n      }\n    });\n  }\n}\n","import { BrowserOptions, UserSession } from '@amplitude/analytics-types';\nimport { getOldCookieName } from '@amplitude/analytics-client-common';\nimport { createCookieStorage, getDefaultConfig } from '../config';\n\nexport const parseLegacyCookies = async (apiKey: string, options: BrowserOptions): Promise<UserSession> => {\n  const storage = await createCookieStorage<string>(options);\n  const oldCookieName = getOldCookieName(apiKey);\n  const cookies = await storage.getRaw(oldCookieName);\n\n  if (!cookies) {\n    return {\n      optOut: false,\n    };\n  }\n\n  if (options.cookieUpgrade ?? getDefaultConfig().cookieUpgrade) {\n    await storage.remove(oldCookieName);\n  }\n  const [deviceId, userId, optOut, sessionId, lastEventTime, lastEventId] = cookies.split('.');\n  return {\n    deviceId,\n    userId: decode(userId),\n    sessionId: parseTime(sessionId),\n    lastEventId: parseTime(lastEventId),\n    lastEventTime: parseTime(lastEventTime),\n    optOut: Boolean(optOut),\n  };\n};\n\nexport const parseTime = (num: string) => {\n  const integer = parseInt(num, 32);\n  if (isNaN(integer)) {\n    return undefined;\n  }\n  return integer;\n};\n\nexport const decode = (value?: string): string | undefined => {\n  if (!atob || !escape || !value) {\n    return undefined;\n  }\n  try {\n    return decodeURIComponent(escape(atob(value)));\n  } catch {\n    return undefined;\n  }\n};\n","export const getLanguage = (): string => {\n  if (typeof navigator === 'undefined') return '';\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  const userLanguage = (navigator as any).userLanguage as string | undefined;\n\n  return navigator.languages?.[0] ?? navigator.language ?? userLanguage ?? '';\n};\n","import { BeforePlugin, BrowserConfig, Event, PluginType } from '@amplitude/analytics-types';\nimport UAParser from '@amplitude/ua-parser-js';\nimport { UUID } from '@amplitude/analytics-core';\nimport { getLanguage } from '@amplitude/analytics-client-common';\nimport { VERSION } from '../version';\n\nconst BROWSER_PLATFORM = 'Web';\nconst IP_ADDRESS = '$remote';\nexport class Context implements BeforePlugin {\n  name = 'context';\n  type = PluginType.BEFORE as const;\n\n  // this.config is defined in setup() which will always be called first\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  config: BrowserConfig;\n  userAgent: string | undefined;\n  uaResult: UAParser.IResult;\n  library = `amplitude-ts/${VERSION}`;\n\n  constructor() {\n    /* istanbul ignore else */\n    if (typeof navigator !== 'undefined') {\n      this.userAgent = navigator.userAgent;\n    }\n    this.uaResult = new UAParser(this.userAgent).getResult();\n  }\n\n  setup(config: BrowserConfig): Promise<undefined> {\n    this.config = config;\n\n    return Promise.resolve(undefined);\n  }\n\n  async execute(context: Event): Promise<Event> {\n    const time = new Date().getTime();\n\n    const osName = this.uaResult.browser.name;\n    const osVersion = this.uaResult.browser.version;\n    const deviceModel = this.uaResult.device.model || this.uaResult.os.name;\n    const deviceVendor = this.uaResult.device.vendor;\n\n    const lastEventId = this.config.lastEventId ?? -1;\n    const nextEventId = context.event_id ?? lastEventId + 1;\n    this.config.lastEventId = nextEventId;\n    if (!context.time) {\n      this.config.lastEventTime = time;\n    }\n\n    const event: Event = {\n      user_id: this.config.userId,\n      device_id: this.config.deviceId,\n      session_id: this.config.sessionId,\n      time,\n      ...(this.config.appVersion && { app_version: this.config.appVersion }),\n      ...(this.config.trackingOptions.platform && { platform: BROWSER_PLATFORM }),\n      ...(this.config.trackingOptions.osName && { os_name: osName }),\n      ...(this.config.trackingOptions.osVersion && { os_version: osVersion }),\n      ...(this.config.trackingOptions.deviceManufacturer && { device_manufacturer: deviceVendor }),\n      ...(this.config.trackingOptions.deviceModel && { device_model: deviceModel }),\n      ...(this.config.trackingOptions.language && { language: getLanguage() }),\n      ...(this.config.trackingOptions.ipAddress && { ip: IP_ADDRESS }),\n      insert_id: UUID(),\n      partner_id: this.config.partnerId,\n      plan: this.config.plan,\n      ...(this.config.ingestionMetadata && {\n        ingestion_metadata: {\n          source_name: this.config.ingestionMetadata.sourceName,\n          source_version: this.config.ingestionMetadata.sourceVersion,\n        },\n      }),\n      ...context,\n      event_id: nextEventId,\n      library: this.library,\n      user_agent: this.userAgent,\n    };\n    return event;\n  }\n}\n","export const VERSION = '1.13.5';\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport { BaseEvent, EnrichmentPlugin, PluginType } from '@amplitude/analytics-types';\nimport { DEFAULT_EVENT_PREFIX, DEFAULT_PAGE_VIEW_EVENT } from '../constants';\n\ninterface PageViewEventProperties extends Record<string, string | undefined> {\n  page_domain: string;\n  page_location: string;\n  page_path: string;\n  page_title: string;\n  page_url: string;\n}\n\nconst eventPropertyMap: PageViewEventProperties = {\n  page_domain: `${DEFAULT_EVENT_PREFIX} Page Domain`,\n  page_location: `${DEFAULT_EVENT_PREFIX} Page Location`,\n  page_path: `${DEFAULT_EVENT_PREFIX} Page Path`,\n  page_title: `${DEFAULT_EVENT_PREFIX} Page Title`,\n  page_url: `${DEFAULT_EVENT_PREFIX} Page URL`,\n};\n\nexport const defaultPageViewEventEnrichment = (): EnrichmentPlugin => {\n  const name = '@amplitude/plugin-default-page-view-event-enrichment-browser';\n  const type = PluginType.ENRICHMENT;\n  const setup = async () => undefined;\n  const execute = async (event: BaseEvent) => {\n    if (event.event_type === DEFAULT_PAGE_VIEW_EVENT && event.event_properties) {\n      event.event_properties = Object.entries(event.event_properties).reduce<{\n        [key: string]: any;\n      }>((acc, [key, value]) => {\n        const transformedPropertyName = eventPropertyMap[key];\n        if (transformedPropertyName) {\n          acc[transformedPropertyName] = value;\n        } else {\n          acc[key] = value;\n        }\n        return acc;\n      }, {});\n    }\n    return event;\n  };\n\n  return {\n    name,\n    type,\n    setup,\n    execute,\n  };\n};\n","import { BrowserClient, PluginType, Event, EnrichmentPlugin } from '@amplitude/analytics-types';\nimport {\n  DEFAULT_FORM_START_EVENT,\n  DEFAULT_FORM_SUBMIT_EVENT,\n  FORM_ID,\n  FORM_NAME,\n  FORM_DESTINATION,\n} from '../constants';\nimport { BrowserConfig } from '../config';\n\ninterface EventListener {\n  element: Element;\n  type: 'change' | 'submit';\n  handler: () => void;\n}\n\nexport const formInteractionTracking = (): EnrichmentPlugin => {\n  let observer: MutationObserver | undefined;\n  let eventListeners: EventListener[] = [];\n  const addEventListener = (element: Element, type: 'change' | 'submit', handler: () => void) => {\n    element.addEventListener(type, handler);\n    eventListeners.push({\n      element,\n      type,\n      handler,\n    });\n  };\n  const removeClickListeners = () => {\n    eventListeners.forEach(({ element, type, handler }) => {\n      /* istanbul ignore next */\n      element?.removeEventListener(type, handler);\n    });\n    eventListeners = [];\n  };\n\n  const name = '@amplitude/plugin-form-interaction-tracking-browser';\n  const type = PluginType.ENRICHMENT;\n  const setup = async (config: BrowserConfig, amplitude?: BrowserClient) => {\n    /* istanbul ignore if */\n    if (!amplitude) {\n      // TODO: Add required minimum version of @amplitude/analytics-browser\n      config.loggerProvider.warn(\n        'Form interaction tracking requires a later version of @amplitude/analytics-browser. Form interaction events are not tracked.',\n      );\n      return;\n    }\n\n    /* istanbul ignore if */\n    if (typeof document === 'undefined') {\n      return;\n    }\n\n    const addFormInteractionListener = (form: HTMLFormElement) => {\n      let hasFormChanged = false;\n\n      addEventListener(form, 'change', () => {\n        if (!hasFormChanged) {\n          amplitude.track(DEFAULT_FORM_START_EVENT, {\n            [FORM_ID]: form.id,\n            [FORM_NAME]: form.name,\n            [FORM_DESTINATION]: form.action,\n          });\n        }\n        hasFormChanged = true;\n      });\n\n      addEventListener(form, 'submit', () => {\n        if (!hasFormChanged) {\n          amplitude.track(DEFAULT_FORM_START_EVENT, {\n            [FORM_ID]: form.id,\n            [FORM_NAME]: form.name,\n            [FORM_DESTINATION]: form.action,\n          });\n        }\n\n        amplitude.track(DEFAULT_FORM_SUBMIT_EVENT, {\n          [FORM_ID]: form.id,\n          [FORM_NAME]: form.name,\n          [FORM_DESTINATION]: form.action,\n        });\n        hasFormChanged = false;\n      });\n    };\n\n    // Adds listener to existing anchor tags\n    const forms = Array.from(document.getElementsByTagName('form'));\n    forms.forEach(addFormInteractionListener);\n\n    // Adds listener to anchor tags added after initial load\n    /* istanbul ignore else */\n    if (typeof MutationObserver !== 'undefined') {\n      observer = new MutationObserver((mutations) => {\n        mutations.forEach((mutation) => {\n          mutation.addedNodes.forEach((node) => {\n            if (node.nodeName === 'FORM') {\n              addFormInteractionListener(node as HTMLFormElement);\n            }\n            if ('querySelectorAll' in node && typeof node.querySelectorAll === 'function') {\n              Array.from(node.querySelectorAll('form') as HTMLFormElement[]).map(addFormInteractionListener);\n            }\n          });\n        });\n      });\n\n      observer.observe(document.body, {\n        subtree: true,\n        childList: true,\n      });\n    }\n  };\n  const execute = async (event: Event) => event;\n  const teardown = async () => {\n    observer?.disconnect();\n    removeClickListeners();\n  };\n\n  return {\n    name,\n    type,\n    setup,\n    execute,\n    teardown,\n  };\n};\n","import { AmplitudeReturn, InstanceProxy, QueueProxy, Result } from '@amplitude/analytics-types';\n\n/**\n * Applies the proxied functions on the proxied amplitude snippet to an instance of the real object.\n * @ignore\n */\nexport const runQueuedFunctions = (instance: object, queue: QueueProxy) => {\n  convertProxyObjectToRealObject(instance, queue);\n};\n\n/**\n * Applies the proxied functions on the proxied object to an instance of the real object.\n * Used to convert proxied Identify and Revenue objects.\n */\nexport const convertProxyObjectToRealObject = <T>(instance: T, queue: QueueProxy): T => {\n  for (let i = 0; i < queue.length; i++) {\n    const { name, args, resolve } = queue[i];\n    const fn = instance && instance[name as keyof T];\n    if (typeof fn === 'function') {\n      const result = fn.apply(instance, args) as AmplitudeReturn<Result>;\n      if (typeof resolve === 'function') {\n        resolve(result?.promise);\n      }\n    }\n  }\n  return instance;\n};\n\n/**\n * Check if the param is snippet proxy\n */\nexport const isInstanceProxy = (instance: unknown): instance is InstanceProxy => {\n  const instanceProxy = instance as InstanceProxy;\n  return instanceProxy && instanceProxy._q !== undefined;\n};\n","import {\n  getAnalyticsConnector,\n  getCookieName,\n  getPageViewTrackingConfig,\n  getQueryParams,\n  IdentityEventSender,\n  isFileDownloadTrackingEnabled,\n  isFormInteractionTrackingEnabled,\n  isSessionTrackingEnabled,\n  setConnectorDeviceId,\n  setConnectorOptOut,\n  setConnectorUserId,\n} from '@amplitude/analytics-client-common';\nimport { AmplitudeCore, Destination, Identify, returnWrapper, Revenue, UUID } from '@amplitude/analytics-core';\nimport {\n  BrowserClient,\n  BrowserConfig,\n  BrowserOptions,\n  Event,\n  EventOptions,\n  Identify as IIdentify,\n  Revenue as IRevenue,\n  TransportType,\n  UserSession,\n} from '@amplitude/analytics-types';\nimport { pageViewTrackingPlugin } from '@amplitude/plugin-page-view-tracking-browser';\nimport { webAttributionPlugin } from '@amplitude/plugin-web-attribution-browser';\nimport { createCookieStorage, createTransport, getTopLevelDomain, useBrowserConfig } from './config';\nimport { DEFAULT_PAGE_VIEW_EVENT, DEFAULT_SESSION_END_EVENT, DEFAULT_SESSION_START_EVENT } from './constants';\nimport { parseLegacyCookies } from './cookie-migration';\nimport { Context } from './plugins/context';\nimport { defaultPageViewEventEnrichment } from './plugins/default-page-view-event-enrichment';\nimport { fileDownloadTracking } from './plugins/file-download-tracking';\nimport { formInteractionTracking } from './plugins/form-interaction-tracking';\nimport { convertProxyObjectToRealObject, isInstanceProxy } from './utils/snippet-helper';\n\nexport class AmplitudeBrowser extends AmplitudeCore implements BrowserClient {\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  config: BrowserConfig;\n  previousSessionDeviceId: string | undefined;\n  previousSessionUserId: string | undefined;\n\n  init(apiKey = '', userId?: string, options?: BrowserOptions) {\n    return returnWrapper(this._init({ ...options, userId, apiKey }));\n  }\n  protected async _init(options: BrowserOptions & { apiKey: string }) {\n    // Step 0: Block concurrent initialization\n    if (this.initializing) {\n      return;\n    }\n    this.initializing = true;\n\n    // Step 1: Read cookies stored by SDK\n    options.domain = options.disableCookies ? '' : options.domain ?? (await getTopLevelDomain());\n    const legacyCookies = await parseLegacyCookies(options.apiKey, options);\n    const cookieStorage = await createCookieStorage<UserSession>(options);\n    const previousCookies = await cookieStorage.get(getCookieName(options.apiKey));\n    const queryParams = getQueryParams();\n\n    // Step 2: Create browser config\n    const deviceId = options.deviceId ?? queryParams.deviceId ?? previousCookies?.deviceId ?? legacyCookies.deviceId;\n    const sessionId = previousCookies?.sessionId ?? legacyCookies.sessionId;\n    const optOut = options.optOut ?? previousCookies?.optOut ?? legacyCookies.optOut;\n    const lastEventId = previousCookies?.lastEventId ?? legacyCookies.lastEventId;\n    const lastEventTime = previousCookies?.lastEventTime ?? legacyCookies.lastEventTime;\n    const userId = options.userId ?? previousCookies?.userId ?? legacyCookies.userId;\n\n    this.previousSessionDeviceId = previousCookies?.deviceId ?? legacyCookies.deviceId;\n    this.previousSessionUserId = previousCookies?.userId ?? legacyCookies.userId;\n\n    const browserOptions = await useBrowserConfig(options.apiKey, {\n      ...options,\n      deviceId,\n      sessionId,\n      optOut,\n      lastEventId,\n      lastEventTime,\n      userId,\n      cookieStorage,\n    });\n\n    await super._init(browserOptions);\n\n    // Step 3: Set session ID\n    let isNewSession = false;\n    if (\n      // user has never sent an event\n      !this.config.lastEventTime ||\n      // user has no previous session ID\n      !this.config.sessionId ||\n      // has sent an event and has previous session but expired\n      (this.config.lastEventTime && Date.now() - this.config.lastEventTime > this.config.sessionTimeout)\n    ) {\n      this.setSessionId(options.sessionId ?? this.config.sessionId ?? Date.now());\n      isNewSession = true;\n    }\n\n    // Set up the analytics connector to integrate with the experiment SDK.\n    // Send events from the experiment SDK and forward identifies to the\n    // identity store.\n    const connector = getAnalyticsConnector(options.instanceName);\n    connector.identityStore.setIdentity({\n      userId: this.config.userId,\n      deviceId: this.config.deviceId,\n    });\n\n    // Step 4: Install plugins\n    // Do not track any events before this\n    await this.add(new Destination()).promise;\n    await this.add(new Context()).promise;\n    await this.add(new IdentityEventSender()).promise;\n\n    if (isFileDownloadTrackingEnabled(this.config.defaultTracking)) {\n      await this.add(fileDownloadTracking()).promise;\n    }\n\n    if (isFormInteractionTrackingEnabled(this.config.defaultTracking)) {\n      await this.add(formInteractionTracking()).promise;\n    }\n\n    // Add web attribution plugin\n    if (!this.config.attribution?.disabled) {\n      const webAttribution = webAttributionPlugin({\n        excludeReferrers: this.config.attribution?.excludeReferrers,\n        initialEmptyValue: this.config.attribution?.initialEmptyValue,\n        resetSessionOnNewCampaign: this.config.attribution?.resetSessionOnNewCampaign,\n      });\n\n      // For Amplitude-internal functionality\n      // if pluginEnabledOverride === undefined then use plugin default logic\n      // if pluginEnabledOverride === true then track attribution\n      // if pluginEnabledOverride === false then do not track attribution\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      (webAttribution as any).__pluginEnabledOverride =\n        isNewSession || this.config.attribution?.trackNewCampaigns ? undefined : false;\n      await this.add(webAttribution).promise;\n    }\n\n    // Add page view plugin\n    const pageViewTrackingOptions = getPageViewTrackingConfig(this.config);\n    pageViewTrackingOptions.eventType = pageViewTrackingOptions.eventType || DEFAULT_PAGE_VIEW_EVENT;\n    await this.add(pageViewTrackingPlugin(pageViewTrackingOptions)).promise;\n    await this.add(defaultPageViewEventEnrichment()).promise;\n\n    this.initializing = false;\n\n    // Step 6: Run queued dispatch functions\n    await this.runQueuedFunctions('dispatchQ');\n\n    // Step 7: Add the event receiver after running remaining queued functions.\n    connector.eventBridge.setEventReceiver((event) => {\n      void this.track(event.eventType, event.eventProperties);\n    });\n  }\n\n  getUserId() {\n    return this.config?.userId;\n  }\n\n  setUserId(userId: string | undefined) {\n    if (!this.config) {\n      this.q.push(this.setUserId.bind(this, userId));\n      return;\n    }\n    if (userId !== this.config.userId || userId === undefined) {\n      this.config.userId = userId;\n      setConnectorUserId(userId, this.config.instanceName);\n    }\n  }\n\n  getDeviceId() {\n    return this.config?.deviceId;\n  }\n\n  setDeviceId(deviceId: string) {\n    if (!this.config) {\n      this.q.push(this.setDeviceId.bind(this, deviceId));\n      return;\n    }\n    this.config.deviceId = deviceId;\n    setConnectorDeviceId(deviceId, this.config.instanceName);\n  }\n\n  setOptOut(optOut: boolean): void {\n    setConnectorOptOut(optOut, this.config.instanceName);\n    super.setOptOut(optOut);\n  }\n\n  reset() {\n    this.setDeviceId(UUID());\n    this.setUserId(undefined);\n  }\n\n  getSessionId() {\n    return this.config?.sessionId;\n  }\n\n  setSessionId(sessionId: number) {\n    if (!this.config) {\n      this.q.push(this.setSessionId.bind(this, sessionId));\n      return;\n    }\n\n    // Prevents starting a new session with the same session ID\n    if (sessionId === this.config.sessionId) {\n      return;\n    }\n\n    const previousSessionId = this.getSessionId();\n    const lastEventTime = this.config.lastEventTime;\n    let lastEventId = this.config.lastEventId ?? -1;\n\n    this.config.sessionId = sessionId;\n    this.config.lastEventTime = undefined;\n\n    if (isSessionTrackingEnabled(this.config.defaultTracking)) {\n      if (previousSessionId && lastEventTime) {\n        this.track(DEFAULT_SESSION_END_EVENT, undefined, {\n          device_id: this.previousSessionDeviceId,\n          event_id: ++lastEventId,\n          session_id: previousSessionId,\n          time: lastEventTime + 1,\n          user_id: this.previousSessionUserId,\n        });\n      }\n\n      this.config.lastEventTime = this.config.sessionId;\n      this.track(DEFAULT_SESSION_START_EVENT, undefined, {\n        event_id: ++lastEventId,\n        session_id: this.config.sessionId,\n        time: this.config.lastEventTime,\n      });\n    }\n\n    this.previousSessionDeviceId = this.config.deviceId;\n    this.previousSessionUserId = this.config.userId;\n  }\n\n  extendSession() {\n    if (!this.config) {\n      this.q.push(this.extendSession.bind(this));\n      return;\n    }\n    this.config.lastEventTime = Date.now();\n  }\n\n  setTransport(transport: TransportType) {\n    if (!this.config) {\n      this.q.push(this.setTransport.bind(this, transport));\n      return;\n    }\n    this.config.transportProvider = createTransport(transport);\n  }\n\n  identify(identify: IIdentify, eventOptions?: EventOptions) {\n    if (isInstanceProxy(identify)) {\n      const queue = identify._q;\n      identify._q = [];\n      identify = convertProxyObjectToRealObject(new Identify(), queue);\n    }\n    if (eventOptions?.user_id) {\n      this.setUserId(eventOptions.user_id);\n    }\n    if (eventOptions?.device_id) {\n      this.setDeviceId(eventOptions.device_id);\n    }\n    return super.identify(identify, eventOptions);\n  }\n\n  groupIdentify(groupType: string, groupName: string | string[], identify: IIdentify, eventOptions?: EventOptions) {\n    if (isInstanceProxy(identify)) {\n      const queue = identify._q;\n      identify._q = [];\n      identify = convertProxyObjectToRealObject(new Identify(), queue);\n    }\n    return super.groupIdentify(groupType, groupName, identify, eventOptions);\n  }\n\n  revenue(revenue: IRevenue, eventOptions?: EventOptions) {\n    if (isInstanceProxy(revenue)) {\n      const queue = revenue._q;\n      revenue._q = [];\n      revenue = convertProxyObjectToRealObject(new Revenue(), queue);\n    }\n    return super.revenue(revenue, eventOptions);\n  }\n\n  async process(event: Event) {\n    const currentTime = Date.now();\n    const lastEventTime = this.config.lastEventTime || Date.now();\n    const timeSinceLastEvent = currentTime - lastEventTime;\n\n    if (\n      event.event_type !== DEFAULT_SESSION_START_EVENT &&\n      event.event_type !== DEFAULT_SESSION_END_EVENT &&\n      (!event.session_id || event.session_id === this.getSessionId()) &&\n      timeSinceLastEvent > this.config.sessionTimeout\n    ) {\n      this.setSessionId(currentTime);\n    }\n\n    return super.process(event);\n  }\n}\n","import { BrowserClient, PluginType, Event, EnrichmentPlugin } from '@amplitude/analytics-types';\nimport { DEFAULT_FILE_DOWNLOAD_EVENT, FILE_EXTENSION, FILE_NAME, LINK_ID, LINK_TEXT, LINK_URL } from '../constants';\nimport { BrowserConfig } from '../config';\n\ninterface EventListener {\n  element: Element;\n  type: 'click';\n  handler: () => void;\n}\n\nexport const fileDownloadTracking = (): EnrichmentPlugin => {\n  let observer: MutationObserver | undefined;\n  let eventListeners: EventListener[] = [];\n  const addEventListener = (element: Element, type: 'click', handler: () => void) => {\n    element.addEventListener(type, handler);\n    eventListeners.push({\n      element,\n      type,\n      handler,\n    });\n  };\n  const removeClickListeners = () => {\n    eventListeners.forEach(({ element, type, handler }) => {\n      /* istanbul ignore next */\n      element?.removeEventListener(type, handler);\n    });\n    eventListeners = [];\n  };\n\n  const name = '@amplitude/plugin-file-download-tracking-browser';\n  const type = PluginType.ENRICHMENT;\n  const setup = async (config: BrowserConfig, amplitude?: BrowserClient) => {\n    /* istanbul ignore if */\n    if (!amplitude) {\n      // TODO: Add required minimum version of @amplitude/analytics-browser\n      config.loggerProvider.warn(\n        'File download tracking requires a later version of @amplitude/analytics-browser. File download events are not tracked.',\n      );\n      return;\n    }\n\n    /* istanbul ignore if */\n    if (typeof document === 'undefined') {\n      return;\n    }\n\n    const addFileDownloadListener = (a: HTMLAnchorElement) => {\n      let url: URL;\n      try {\n        // eslint-disable-next-line no-restricted-globals\n        url = new URL(a.href, window.location.href);\n      } catch {\n        /* istanbul ignore next */\n        return;\n      }\n      const result = ext.exec(url.href);\n      const fileExtension = result?.[1];\n\n      if (fileExtension) {\n        addEventListener(a, 'click', () => {\n          if (fileExtension) {\n            amplitude.track(DEFAULT_FILE_DOWNLOAD_EVENT, {\n              [FILE_EXTENSION]: fileExtension,\n              [FILE_NAME]: url.pathname,\n              [LINK_ID]: a.id,\n              [LINK_TEXT]: a.text,\n              [LINK_URL]: a.href,\n            });\n          }\n        });\n      }\n    };\n\n    const ext =\n      /\\.(pdf|xlsx?|docx?|txt|rtf|csv|exe|key|pp(s|t|tx)|7z|pkg|rar|gz|zip|avi|mov|mp4|mpe?g|wmv|midi?|mp3|wav|wma)$/;\n\n    // Adds listener to existing anchor tags\n    const links = Array.from(document.getElementsByTagName('a'));\n    links.forEach(addFileDownloadListener);\n\n    // Adds listener to anchor tags added after initial load\n    /* istanbul ignore else */\n    if (typeof MutationObserver !== 'undefined') {\n      observer = new MutationObserver((mutations) => {\n        mutations.forEach((mutation) => {\n          mutation.addedNodes.forEach((node) => {\n            if (node.nodeName === 'A') {\n              addFileDownloadListener(node as HTMLAnchorElement);\n            }\n            if ('querySelectorAll' in node && typeof node.querySelectorAll === 'function') {\n              Array.from(node.querySelectorAll('a') as HTMLAnchorElement[]).map(addFileDownloadListener);\n            }\n          });\n        });\n      });\n\n      observer.observe(document.body, {\n        subtree: true,\n        childList: true,\n      });\n    }\n  };\n  const execute = async (event: Event) => event;\n  const teardown = async () => {\n    observer?.disconnect();\n    removeClickListeners();\n  };\n\n  return {\n    name,\n    type,\n    setup,\n    execute,\n    teardown,\n  };\n};\n","import { CampaignParser } from '@amplitude/analytics-client-common';\nimport {\n  BeforePlugin,\n  BrowserClient,\n  BrowserConfig,\n  Campaign,\n  Event,\n  PluginType,\n  Storage,\n} from '@amplitude/analytics-types';\nimport { createCampaignEvent, getStorageKey, isNewCampaign } from './helpers';\nimport { CreateWebAttributionPlugin, CreateWebAttributionPluginParameters, Options } from './typings/web-attribution';\n\nexport const webAttributionPlugin: CreateWebAttributionPlugin = function (\n  ...args: CreateWebAttributionPluginParameters\n) {\n  let amplitude: BrowserClient | undefined;\n  let options: Options = {};\n\n  const [clientOrOptions, configOrUndefined] = args;\n  if (clientOrOptions && 'init' in clientOrOptions) {\n    amplitude = clientOrOptions;\n    if (configOrUndefined) {\n      options = configOrUndefined;\n    }\n  } else if (clientOrOptions) {\n    options = clientOrOptions;\n  }\n\n  const excludeReferrers = options.excludeReferrers ?? [];\n  if (typeof location !== 'undefined') {\n    excludeReferrers.unshift(location.hostname);\n  }\n\n  options = {\n    disabled: false,\n    initialEmptyValue: 'EMPTY',\n    resetSessionOnNewCampaign: false,\n    ...options,\n    excludeReferrers,\n  };\n\n  const plugin: BeforePlugin = {\n    name: 'web-attribution',\n    type: PluginType.BEFORE,\n\n    setup: async function (config: BrowserConfig, client?: BrowserClient) {\n      amplitude = amplitude ?? client;\n      if (!amplitude) {\n        const receivedType = clientOrOptions ? 'Options' : 'undefined';\n        config.loggerProvider.error(\n          `Argument of type '${receivedType}' is not assignable to parameter of type 'BrowserClient'.`,\n        );\n        return;\n      }\n\n      if (options.disabled) {\n        config.loggerProvider.log('@amplitude/plugin-web-attribution-browser is disabled. Attribution is not tracked.');\n        return;\n      }\n\n      config.loggerProvider.log('Installing @amplitude/plugin-web-attribution-browser.');\n\n      if (!client && !config.attribution?.disabled) {\n        config.loggerProvider.warn(\n          '@amplitude/plugin-web-attribution-browser overrides web attribution behavior defined in @amplitude/analytics-browser. Resolve by disabling web attribution tracking in @amplitude/analytics-browser.',\n        );\n        config.attribution = {\n          disabled: true,\n        };\n      }\n\n      // Share cookie storage with user session storage\n      const storage = config.cookieStorage as unknown as Storage<Campaign>;\n      const storageKey = getStorageKey(config.apiKey, 'MKTG');\n\n      const [currentCampaign, previousCampaign] = await Promise.all([\n        new CampaignParser().parse(),\n        storage.get(storageKey),\n      ]);\n\n      // For Amplitude-internal functionality\n      // if pluginEnabledOverride === undefined then use plugin default logic\n      // if pluginEnabledOverride === true then track attribution\n      // if pluginEnabledOverride === false then do not track attribution\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment\n      const pluginEnabledOverride: boolean | undefined = (this as any).__pluginEnabledOverride;\n\n      if (pluginEnabledOverride ?? isNewCampaign(currentCampaign, previousCampaign, options)) {\n        if (options.resetSessionOnNewCampaign) {\n          amplitude.setSessionId(Date.now());\n          config.loggerProvider.log('Created a new session for new campaign.');\n        }\n        config.loggerProvider.log('Tracking attribution.');\n        const campaignEvent = createCampaignEvent(currentCampaign, options);\n        amplitude.track(campaignEvent);\n        void storage.set(storageKey, currentCampaign);\n      }\n    },\n\n    execute: async (event: Event) => event,\n  };\n\n  // For Amplitude-internal functionality\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  (plugin as any).__pluginEnabledOverride = undefined;\n\n  return plugin;\n};\n","import { debugWrapper, getClientLogConfig, getClientStates } from '@amplitude/analytics-core';\nimport { BrowserClient } from '@amplitude/analytics-types';\nimport { AmplitudeBrowser } from './browser-client';\n\nexport const createInstance = (): BrowserClient => {\n  const client = new AmplitudeBrowser();\n  return {\n    init: debugWrapper(\n      client.init.bind(client),\n      'init',\n      getClientLogConfig(client),\n      getClientStates(client, ['config']),\n    ),\n    add: debugWrapper(\n      client.add.bind(client),\n      'add',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.plugins']),\n    ),\n    remove: debugWrapper(\n      client.remove.bind(client),\n      'remove',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.plugins']),\n    ),\n    track: debugWrapper(\n      client.track.bind(client),\n      'track',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    logEvent: debugWrapper(\n      client.logEvent.bind(client),\n      'logEvent',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    identify: debugWrapper(\n      client.identify.bind(client),\n      'identify',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    groupIdentify: debugWrapper(\n      client.groupIdentify.bind(client),\n      'groupIdentify',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    setGroup: debugWrapper(\n      client.setGroup.bind(client),\n      'setGroup',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    revenue: debugWrapper(\n      client.revenue.bind(client),\n      'revenue',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    flush: debugWrapper(\n      client.flush.bind(client),\n      'flush',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    getUserId: debugWrapper(\n      client.getUserId.bind(client),\n      'getUserId',\n      getClientLogConfig(client),\n      getClientStates(client, ['config', 'config.userId']),\n    ),\n    setUserId: debugWrapper(\n      client.setUserId.bind(client),\n      'setUserId',\n      getClientLogConfig(client),\n      getClientStates(client, ['config', 'config.userId']),\n    ),\n    getDeviceId: debugWrapper(\n      client.getDeviceId.bind(client),\n      'getDeviceId',\n      getClientLogConfig(client),\n      getClientStates(client, ['config', 'config.deviceId']),\n    ),\n    setDeviceId: debugWrapper(\n      client.setDeviceId.bind(client),\n      'setDeviceId',\n      getClientLogConfig(client),\n      getClientStates(client, ['config', 'config.deviceId']),\n    ),\n    reset: debugWrapper(\n      client.reset.bind(client),\n      'reset',\n      getClientLogConfig(client),\n      getClientStates(client, ['config', 'config.userId', 'config.deviceId']),\n    ),\n    getSessionId: debugWrapper(\n      client.getSessionId.bind(client),\n      'getSessionId',\n      getClientLogConfig(client),\n      getClientStates(client, ['config']),\n    ),\n    setSessionId: debugWrapper(\n      client.setSessionId.bind(client),\n      'setSessionId',\n      getClientLogConfig(client),\n      getClientStates(client, ['config']),\n    ),\n    extendSession: debugWrapper(\n      client.extendSession.bind(client),\n      'extendSession',\n      getClientLogConfig(client),\n      getClientStates(client, ['config']),\n    ),\n    setOptOut: debugWrapper(\n      client.setOptOut.bind(client),\n      'setOptOut',\n      getClientLogConfig(client),\n      getClientStates(client, ['config']),\n    ),\n    setTransport: debugWrapper(\n      client.setTransport.bind(client),\n      'setTransport',\n      getClientLogConfig(client),\n      getClientStates(client, ['config']),\n    ),\n  };\n};\n\nexport default createInstance();\n","import Notifications, { CallbackType } from './notification';\nimport Registry from './registry';\n\nexport interface IOptions {\n  root?: HTMLElement;\n  rootMargin?: string;\n  threshold?: number | number[];\n  [key: string]: any;\n}\n\ntype StateForRoot = {\n  elements: [HTMLElement];\n  options: IOptions;\n  intersectionObserver: any;\n};\n\ntype PotentialRootEntry = {\n  [stringifiedOptions: string]: StateForRoot;\n};\n\nexport default class IntersectionObserverAdmin extends Notifications {\n  private elementRegistry: Registry;\n\n  constructor() {\n    super();\n    this.elementRegistry = new Registry();\n  }\n\n  /**\n   * Adds element to observe via IntersectionObserver and stores element + relevant callbacks and observer options in static\n   * administrator for lookup in the future\n   *\n   * @method observe\n   * @param {HTMLElement | Window} element\n   * @param {Object} options\n   * @public\n   */\n  public observe(element: HTMLElement, options: IOptions = {}): void {\n    if (!element) {\n      return;\n    }\n\n    this.elementRegistry.addElement(element, { ...options });\n\n    this.setupObserver(element, { ...options });\n  }\n\n  /**\n   * Unobserve target element and remove element from static admin\n   *\n   * @method unobserve\n   * @param {HTMLElement|Window} target\n   * @param {Object} options\n   * @public\n   */\n  public unobserve(target: HTMLElement, options: IOptions): void {\n    const matchingRootEntry:\n      | StateForRoot\n      | undefined = this.findMatchingRootEntry(options);\n\n    if (matchingRootEntry) {\n      const { intersectionObserver } = matchingRootEntry;\n      intersectionObserver.unobserve(target);\n    }\n  }\n\n  /**\n   * register event to handle when intersection observer detects enter\n   *\n   * @method addEnterCallback\n   * @public\n   */\n  public addEnterCallback(\n    element: HTMLElement | Window,\n    callback: (data?: any) => void\n  ) {\n    this.addCallback(CallbackType.enter, element, callback);\n  }\n\n  /**\n   * register event to handle when intersection observer detects exit\n   *\n   * @method addExitCallback\n   * @public\n   */\n  public addExitCallback(\n    element: HTMLElement | Window,\n    callback: (data?: any) => void\n  ) {\n    this.addCallback(CallbackType.exit, element, callback);\n  }\n\n  /**\n   * retrieve registered callback and call with data\n   *\n   * @method dispatchEnterCallback\n   * @public\n   */\n  public dispatchEnterCallback(element: HTMLElement | Window, entry: any) {\n    this.dispatchCallback(CallbackType.enter, element, entry);\n  }\n\n  /**\n   * retrieve registered callback and call with data on exit\n   *\n   * @method dispatchExitCallback\n   * @public\n   */\n  public dispatchExitCallback(element: HTMLElement | Window, entry: any) {\n    this.dispatchCallback(CallbackType.exit, element, entry);\n  }\n\n  /**\n   * cleanup data structures and unobserve elements\n   *\n   * @method destroy\n   * @public\n   */\n  public destroy(): void {\n    this.elementRegistry.destroyRegistry();\n  }\n\n  /**\n   * use function composition to curry options\n   *\n   * @method setupOnIntersection\n   * @param {Object} options\n   */\n  protected setupOnIntersection(options: IOptions): Function {\n    return (ioEntries: any) => {\n      return this.onIntersection(options, ioEntries);\n    };\n  }\n\n  protected setupObserver(element: HTMLElement, options: IOptions): void {\n    const { root = window } = options;\n\n    // First - find shared root element (window or target HTMLElement)\n    // this root is responsible for coordinating it's set of elements\n    const potentialRootMatch:\n      | PotentialRootEntry\n      | null\n      | undefined = this.findRootFromRegistry(root);\n\n    // Second - if there is a matching root, see if an existing entry with the same options\n    // regardless of sort order. This is a bit of work\n    let matchingEntryForRoot;\n    if (potentialRootMatch) {\n      matchingEntryForRoot = this.determineMatchingElements(\n        options,\n        potentialRootMatch\n      );\n    }\n\n    // next add found entry to elements and call observer if applicable\n    if (matchingEntryForRoot) {\n      const { elements, intersectionObserver } = matchingEntryForRoot;\n      elements.push(element);\n      if (intersectionObserver) {\n        intersectionObserver.observe(element);\n      }\n    } else {\n      // otherwise start observing this element if applicable\n      // watcher is an instance that has an observe method\n      const intersectionObserver = this.newObserver(element, options);\n\n      const observerEntry: StateForRoot = {\n        elements: [element],\n        intersectionObserver,\n        options\n      };\n\n      // and add entry to WeakMap under a root element\n      // with watcher so we can use it later on\n      const stringifiedOptions: string = this.stringifyOptions(options);\n      if (potentialRootMatch) {\n        // if share same root and need to add new entry to root match\n        // not functional but :shrug\n        potentialRootMatch[stringifiedOptions] = observerEntry;\n      } else {\n        // no root exists, so add to WeakMap\n        this.elementRegistry.addElement(root, {\n          [stringifiedOptions]: observerEntry\n        });\n      }\n    }\n  }\n\n  private newObserver(\n    element: HTMLElement,\n    options: IOptions\n  ): IntersectionObserver {\n    // No matching entry for root in static admin, thus create new IntersectionObserver instance\n    const { root, rootMargin, threshold } = options;\n\n    const newIO = new IntersectionObserver(\n      this.setupOnIntersection(options).bind(this),\n      { root, rootMargin, threshold }\n    );\n    newIO.observe(element);\n\n    return newIO;\n  }\n\n  /**\n   * IntersectionObserver callback when element is intersecting viewport\n   * either when `isIntersecting` changes or `intersectionRadio` crosses on of the\n   * configured `threshold`s.\n   * Exit callback occurs eagerly (when element is initially out of scope)\n   * See https://stackoverflow.com/questions/53214116/intersectionobserver-callback-firing-immediately-on-page-load/53385264#53385264\n   *\n   * @method onIntersection\n   * @param {Object} options\n   * @param {Array} ioEntries\n   * @private\n   */\n  private onIntersection(options: IOptions, ioEntries: Array<any>): void {\n    ioEntries.forEach(entry => {\n      const { isIntersecting, intersectionRatio } = entry;\n      let threshold = options.threshold || 0;\n      if (Array.isArray(threshold)) {\n        threshold = threshold[threshold.length - 1];\n      }\n\n      // then find entry's callback in static administration\n      const matchingRootEntry:\n        | StateForRoot\n        | undefined = this.findMatchingRootEntry(options);\n\n      // first determine if entry intersecting\n      if (isIntersecting || intersectionRatio > threshold) {\n        if (matchingRootEntry) {\n          matchingRootEntry.elements.some((element: HTMLElement) => {\n            if (element && element === entry.target) {\n              this.dispatchEnterCallback(element, entry);\n              return true;\n            }\n            return false;\n          });\n        }\n      } else {\n        if (matchingRootEntry) {\n          matchingRootEntry.elements.some((element: HTMLElement) => {\n            if (element && element === entry.target) {\n              this.dispatchExitCallback(element, entry);\n              return true;\n            }\n            return false;\n          });\n        }\n      }\n    });\n  }\n\n  /**\n   * { root: { stringifiedOptions: { observer, elements: []...] } }\n   * @method findRootFromRegistry\n   * @param {HTMLElement|Window} root\n   * @private\n   * @return {Object} of elements that share same root\n   */\n  private findRootFromRegistry(\n    root: HTMLElement | Window\n  ): PotentialRootEntry | null | undefined {\n    if (this.elementRegistry) {\n      return this.elementRegistry.getElement(root);\n    }\n  }\n\n  /**\n   * We don't care about options key order because we already added\n   * to the static administrator\n   *\n   * @method findMatchingRootEntry\n   * @param {Object} options\n   * @return {Object} entry with elements and other options\n   */\n  private findMatchingRootEntry(options: IOptions): StateForRoot | undefined {\n    const { root = window } = options;\n    const matchingRoot:\n      | PotentialRootEntry\n      | null\n      | undefined = this.findRootFromRegistry(root);\n\n    if (matchingRoot) {\n      const stringifiedOptions: string = this.stringifyOptions(options);\n      return matchingRoot[stringifiedOptions];\n    }\n  }\n\n  /**\n   * Determine if existing elements for a given root based on passed in options\n   * regardless of sort order of keys\n   *\n   * @method determineMatchingElements\n   * @param {Object} options\n   * @param {Object} potentialRootMatch e.g. { stringifiedOptions: { elements: [], ... }, stringifiedOptions: { elements: [], ... }}\n   * @private\n   * @return {Object} containing array of elements and other meta\n   */\n  private determineMatchingElements(\n    options: IOptions,\n    potentialRootMatch: PotentialRootEntry\n  ): StateForRoot | undefined {\n    const matchingStringifiedOptions = Object.keys(potentialRootMatch).filter(\n      key => {\n        const { options: comparableOptions } = potentialRootMatch[key];\n        return this.areOptionsSame(options, comparableOptions);\n      }\n    )[0];\n\n    return potentialRootMatch[matchingStringifiedOptions];\n  }\n\n  /**\n   * recursive method to test primitive string, number, null, etc and complex\n   * object equality.\n   *\n   * @method areOptionsSame\n   * @param {any} a\n   * @param {any} b\n   * @private\n   * @return {boolean}\n   */\n  private areOptionsSame(a: IOptions | any, b: IOptions | any): boolean {\n    if (a === b) {\n      return true;\n    }\n\n    // simple comparison\n    const type1 = Object.prototype.toString.call(a);\n    const type2 = Object.prototype.toString.call(b);\n    if (type1 !== type2) {\n      return false;\n    } else if (type1 !== '[object Object]' && type2 !== '[object Object]') {\n      return a === b;\n    }\n\n    if (a && b && typeof a === 'object' && typeof b === 'object') {\n      // complex comparison for only type of [object Object]\n      for (const key in a) {\n        if (Object.prototype.hasOwnProperty.call(a, key)) {\n          // recursion to check nested\n          if (this.areOptionsSame(a[key], b[key]) === false) {\n            return false;\n          }\n        }\n      }\n    }\n\n    // if nothing failed\n    return true;\n  }\n\n  /**\n   * Stringify options for use as a key.\n   * Excludes options.root so that the resulting key is stable\n   *\n   * @param {Object} options\n   * @private\n   * @return {String}\n   */\n  private stringifyOptions(options: IOptions): string {\n    const { root } = options;\n\n    const replacer = (key: string, value: string): string => {\n      if (key === 'root' && root) {\n        const classList = Array.prototype.slice.call(root.classList);\n\n        const classToken = classList.reduce((acc, item) => {\n          return (acc += item);\n        }, '');\n\n        const id: string = root.id;\n\n        return `${id}-${classToken}`;\n      }\n\n      return value;\n    };\n\n    return JSON.stringify(options, replacer);\n  }\n}\n","/////////////////////////////////////////////////////////////////////////////////\n/* UAParser.js v0.7.33\n   Copyright © 2012-2021 Faisal Salman <f@faisalman.com>\n   MIT License */ /*\n   Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n   Supports browser & node.js environment.\n   Demo   : https://faisalman.github.io/ua-parser-js\n   Source : https://github.com/faisalman/ua-parser-js */\n/////////////////////////////////////////////////////////////////////////////////\n\n(function (window, undefined) {\n  \"use strict\";\n\n  //////////////\n  // Constants\n  /////////////\n\n  var LIBVERSION = \"0.7.33\",\n    EMPTY = \"\",\n    UNKNOWN = \"?\",\n    FUNC_TYPE = \"function\",\n    UNDEF_TYPE = \"undefined\",\n    OBJ_TYPE = \"object\",\n    STR_TYPE = \"string\",\n    MAJOR = \"major\",\n    MODEL = \"model\",\n    NAME = \"name\",\n    TYPE = \"type\",\n    VENDOR = \"vendor\",\n    VERSION = \"version\",\n    ARCHITECTURE = \"architecture\",\n    CONSOLE = \"console\",\n    MOBILE = \"mobile\",\n    TABLET = \"tablet\",\n    SMARTTV = \"smarttv\",\n    WEARABLE = \"wearable\",\n    EMBEDDED = \"embedded\",\n    UA_MAX_LENGTH = 350;\n\n  var AMAZON = \"Amazon\",\n    APPLE = \"Apple\",\n    ASUS = \"ASUS\",\n    BLACKBERRY = \"BlackBerry\",\n    BROWSER = \"Browser\",\n    CHROME = \"Chrome\",\n    EDGE = \"Edge\",\n    FIREFOX = \"Firefox\",\n    GOOGLE = \"Google\",\n    HUAWEI = \"Huawei\",\n    LG = \"LG\",\n    MICROSOFT = \"Microsoft\",\n    MOTOROLA = \"Motorola\",\n    OPERA = \"Opera\",\n    SAMSUNG = \"Samsung\",\n    SHARP = \"Sharp\",\n    SONY = \"Sony\",\n    XIAOMI = \"Xiaomi\",\n    ZEBRA = \"Zebra\",\n    FACEBOOK = \"Facebook\";\n\n  ///////////\n  // Helper\n  //////////\n\n  var extend = function (regexes, extensions) {\n      var mergedRegexes = {};\n      for (var i in regexes) {\n        if (extensions[i] && extensions[i].length % 2 === 0) {\n          mergedRegexes[i] = extensions[i].concat(regexes[i]);\n        } else {\n          mergedRegexes[i] = regexes[i];\n        }\n      }\n      return mergedRegexes;\n    },\n    enumerize = function (arr) {\n      var enums = {};\n      for (var i = 0; i < arr.length; i++) {\n        enums[arr[i].toUpperCase()] = arr[i];\n      }\n      return enums;\n    },\n    has = function (str1, str2) {\n      return typeof str1 === STR_TYPE ? lowerize(str2).indexOf(lowerize(str1)) !== -1 : false;\n    },\n    lowerize = function (str) {\n      return str.toLowerCase();\n    },\n    majorize = function (version) {\n      return typeof version === STR_TYPE ? version.replace(/[^\\d\\.]/g, EMPTY).split(\".\")[0] : undefined;\n    },\n    trim = function (str, len) {\n      if (typeof str === STR_TYPE) {\n        str = str.replace(/^\\s\\s*/, EMPTY);\n        return typeof len === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);\n      }\n    };\n\n  ///////////////\n  // Map helper\n  //////////////\n\n  var rgxMapper = function (ua, arrays) {\n      var i = 0,\n        j,\n        k,\n        p,\n        q,\n        matches,\n        match;\n\n      // loop through all regexes maps\n      while (i < arrays.length && !matches) {\n        var regex = arrays[i], // even sequence (0,2,4,..)\n          props = arrays[i + 1]; // odd sequence (1,3,5,..)\n        j = k = 0;\n\n        // try matching uastring with regexes\n        while (j < regex.length && !matches) {\n          matches = regex[j++].exec(ua);\n\n          if (!!matches) {\n            for (p = 0; p < props.length; p++) {\n              match = matches[++k];\n              q = props[p];\n              // check if given property is actually array\n              if (typeof q === OBJ_TYPE && q.length > 0) {\n                if (q.length === 2) {\n                  if (typeof q[1] == FUNC_TYPE) {\n                    // assign modified match\n                    this[q[0]] = q[1].call(this, match);\n                  } else {\n                    // assign given value, ignore regex match\n                    this[q[0]] = q[1];\n                  }\n                } else if (q.length === 3) {\n                  // check whether function or regex\n                  if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n                    // call function (usually string mapper)\n                    this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n                  } else {\n                    // sanitize match using given regex\n                    this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n                  }\n                } else if (q.length === 4) {\n                  this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n                }\n              } else {\n                this[q] = match ? match : undefined;\n              }\n            }\n          }\n        }\n        i += 2;\n      }\n    },\n    strMapper = function (str, map) {\n      for (var i in map) {\n        // check if current value is array\n        if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n          for (var j = 0; j < map[i].length; j++) {\n            if (has(map[i][j], str)) {\n              return i === UNKNOWN ? undefined : i;\n            }\n          }\n        } else if (has(map[i], str)) {\n          return i === UNKNOWN ? undefined : i;\n        }\n      }\n      return str;\n    };\n\n  ///////////////\n  // String map\n  //////////////\n\n  // Safari < 3.0\n  var oldSafariMap = {\n      \"1.0\": \"/8\",\n      1.2: \"/1\",\n      1.3: \"/3\",\n      \"2.0\": \"/412\",\n      \"2.0.2\": \"/416\",\n      \"2.0.3\": \"/417\",\n      \"2.0.4\": \"/419\",\n      \"?\": \"/\"\n    },\n    windowsVersionMap = {\n      ME: \"4.90\",\n      \"NT 3.11\": \"NT3.51\",\n      \"NT 4.0\": \"NT4.0\",\n      2000: \"NT 5.0\",\n      XP: [\"NT 5.1\", \"NT 5.2\"],\n      Vista: \"NT 6.0\",\n      7: \"NT 6.1\",\n      8: \"NT 6.2\",\n      8.1: \"NT 6.3\",\n      10: [\"NT 6.4\", \"NT 10.0\"],\n      RT: \"ARM\"\n    };\n\n  //////////////\n  // Regex map\n  /////////////\n\n  var regexes = {\n    browser: [\n      [\n        /\\b(?:crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n      ],\n      [VERSION, [NAME, \"Chrome\"]],\n      [\n        /edg(?:e|ios|a)?\\/([\\w\\.]+)/i // Microsoft Edge\n      ],\n      [VERSION, [NAME, \"Edge\"]],\n      [\n        // Presto based\n        /(opera mini)\\/([-\\w\\.]+)/i, // Opera Mini\n        /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i, // Opera Mobi/Tablet\n        /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i // Opera\n      ],\n      [NAME, VERSION],\n      [\n        /opios[\\/ ]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n      ],\n      [VERSION, [NAME, OPERA + \" Mini\"]],\n      [\n        /\\bopr\\/([\\w\\.]+)/i // Opera Webkit\n      ],\n      [VERSION, [NAME, OPERA]],\n      [\n        // Mixed\n        /(kindle)\\/([\\w\\.]+)/i, // Kindle\n        /(lunascape|maxthon|netfront|jasmine|blazer)[\\/ ]?([\\w\\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n        // Trident based\n        /(avant |iemobile|slim)(?:browser)?[\\/ ]?([\\w\\.]*)/i, // Avant/IEMobile/SlimBrowser\n        /(ba?idubrowser)[\\/ ]?([\\w\\.]+)/i, // Baidu Browser\n        /(?:ms|\\()(ie) ([\\w\\.]+)/i, // Internet Explorer\n\n        // Webkit/KHTML based                                               // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n        /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale|qqbrowserlite|qq|duckduckgo)\\/([-\\w\\.]+)/i,\n        // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ\n        /(weibo)__([\\d\\.]+)/i // Weibo\n      ],\n      [NAME, VERSION],\n      [\n        /(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i // UCBrowser\n      ],\n      [VERSION, [NAME, \"UC\" + BROWSER]],\n      [\n        /microm.+\\bqbcore\\/([\\w\\.]+)/i, // WeChat Desktop for Windows Built-in Browser\n        /\\bqbcore\\/([\\w\\.]+).+microm/i\n      ],\n      [VERSION, [NAME, \"WeChat(Win) Desktop\"]],\n      [\n        /micromessenger\\/([\\w\\.]+)/i // WeChat\n      ],\n      [VERSION, [NAME, \"WeChat\"]],\n      [\n        /konqueror\\/([\\w\\.]+)/i // Konqueror\n      ],\n      [VERSION, [NAME, \"Konqueror\"]],\n      [\n        /trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i // IE11\n      ],\n      [VERSION, [NAME, \"IE\"]],\n      [\n        /yabrowser\\/([\\w\\.]+)/i // Yandex\n      ],\n      [VERSION, [NAME, \"Yandex\"]],\n      [\n        /(avast|avg)\\/([\\w\\.]+)/i // Avast/AVG Secure Browser\n      ],\n      [[NAME, /(.+)/, \"$1 Secure \" + BROWSER], VERSION],\n      [\n        /\\bfocus\\/([\\w\\.]+)/i // Firefox Focus\n      ],\n      [VERSION, [NAME, FIREFOX + \" Focus\"]],\n      [\n        /\\bopt\\/([\\w\\.]+)/i // Opera Touch\n      ],\n      [VERSION, [NAME, OPERA + \" Touch\"]],\n      [\n        /coc_coc\\w+\\/([\\w\\.]+)/i // Coc Coc Browser\n      ],\n      [VERSION, [NAME, \"Coc Coc\"]],\n      [\n        /dolfin\\/([\\w\\.]+)/i // Dolphin\n      ],\n      [VERSION, [NAME, \"Dolphin\"]],\n      [\n        /coast\\/([\\w\\.]+)/i // Opera Coast\n      ],\n      [VERSION, [NAME, OPERA + \" Coast\"]],\n      [\n        /miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n      ],\n      [VERSION, [NAME, \"MIUI \" + BROWSER]],\n      [\n        /fxios\\/([-\\w\\.]+)/i // Firefox for iOS\n      ],\n      [VERSION, [NAME, FIREFOX]],\n      [\n        /\\bqihu|(qi?ho?o?|360)browser/i // 360\n      ],\n      [[NAME, \"360 \" + BROWSER]],\n      [/(oculus|samsung|sailfish|huawei)browser\\/([\\w\\.]+)/i],\n      [[NAME, /(.+)/, \"$1 \" + BROWSER], VERSION],\n      [\n        // Oculus/Samsung/Sailfish/Huawei Browser\n        /(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n      ],\n      [[NAME, /_/g, \" \"], VERSION],\n      [\n        /(electron)\\/([\\w\\.]+) safari/i, // Electron-based App\n        /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i, // Tesla\n        /m?(qqbrowser|baiduboxapp|2345Explorer)[\\/ ]?([\\w\\.]+)/i // QQBrowser/Baidu App/2345 Browser\n      ],\n      [NAME, VERSION],\n      [\n        /(metasr)[\\/ ]?([\\w\\.]+)/i, // SouGouBrowser\n        /(lbbrowser)/i, // LieBao Browser\n        /\\[(linkedin)app\\]/i // LinkedIn App for iOS & Android\n      ],\n      [NAME],\n      [\n        // WebView\n        /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i // Facebook App for iOS & Android\n      ],\n      [[NAME, FACEBOOK], VERSION],\n      [\n        /safari (line)\\/([\\w\\.]+)/i, // Line App for iOS\n        /\\b(line)\\/([\\w\\.]+)\\/iab/i, // Line App for Android\n        /(chromium|instagram)[\\/ ]([-\\w\\.]+)/i // Chromium/Instagram\n      ],\n      [NAME, VERSION],\n      [\n        /\\bgsa\\/([\\w\\.]+) .*safari\\//i // Google Search Appliance on iOS\n      ],\n      [VERSION, [NAME, \"GSA\"]],\n      [\n        /headlesschrome(?:\\/([\\w\\.]+)| )/i // Chrome Headless\n      ],\n      [VERSION, [NAME, CHROME + \" Headless\"]],\n      [\n        / wv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n      ],\n      [[NAME, CHROME + \" WebView\"], VERSION],\n      [\n        /droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i // Android Browser\n      ],\n      [VERSION, [NAME, \"Android \" + BROWSER]],\n      [\n        /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia\n      ],\n      [NAME, VERSION],\n      [\n        /version\\/([\\w\\.\\,]+) .*mobile\\/\\w+ (safari)/i // Mobile Safari\n      ],\n      [VERSION, [NAME, \"Mobile Safari\"]],\n      [\n        /version\\/([\\w(\\.|\\,)]+) .*(mobile ?safari|safari)/i // Safari & Safari Mobile\n      ],\n      [VERSION, NAME],\n      [\n        /webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n      ],\n      [NAME, [VERSION, strMapper, oldSafariMap]],\n      [/(webkit|khtml)\\/([\\w\\.]+)/i],\n      [NAME, VERSION],\n      [\n        // Gecko based\n        /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i // Netscape\n      ],\n      [[NAME, \"Netscape\"], VERSION],\n      [\n        /mobile vr; rv:([\\w\\.]+)\\).+firefox/i // Firefox Reality\n      ],\n      [VERSION, [NAME, FIREFOX + \" Reality\"]],\n      [\n        /ekiohf.+(flow)\\/([\\w\\.]+)/i, // Flow\n        /(swiftfox)/i, // Swiftfox\n        /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\\/ ]?([\\w\\.\\+]+)/i,\n        // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar\n        /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n        // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n        /(firefox)\\/([\\w\\.]+)/i, // Other Firefox-based\n        /(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i, // Mozilla\n\n        // Other\n        /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n        // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser\n        /(links) \\(([\\w\\.]+)/i // Links\n      ],\n      [NAME, VERSION],\n      [\n        /(cobalt)\\/([\\w\\.]+)/i // Cobalt\n      ],\n      [NAME, [VERSION, /master.|lts./, \"\"]]\n    ],\n\n    cpu: [\n      [\n        /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\\)]/i // AMD64 (x64)\n      ],\n      [[ARCHITECTURE, \"amd64\"]],\n      [\n        /(ia32(?=;))/i // IA32 (quicktime)\n      ],\n      [[ARCHITECTURE, lowerize]],\n      [\n        /((?:i[346]|x)86)[;\\)]/i // IA32 (x86)\n      ],\n      [[ARCHITECTURE, \"ia32\"]],\n      [\n        /\\b(aarch64|arm(v?8e?l?|_?64))\\b/i // ARM64\n      ],\n      [[ARCHITECTURE, \"arm64\"]],\n      [\n        /\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i // ARMHF\n      ],\n      [[ARCHITECTURE, \"armhf\"]],\n      [\n        // PocketPC mistakenly identified as PowerPC\n        /windows (ce|mobile); ppc;/i\n      ],\n      [[ARCHITECTURE, \"arm\"]],\n      [\n        /((?:ppc|powerpc)(?:64)?)(?: mac|;|\\))/i // PowerPC\n      ],\n      [[ARCHITECTURE, /ower/, EMPTY, lowerize]],\n      [\n        /(sun4\\w)[;\\)]/i // SPARC\n      ],\n      [[ARCHITECTURE, \"sparc\"]],\n      [\n        /((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i\n        // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n      ],\n      [[ARCHITECTURE, lowerize]]\n    ],\n\n    device: [\n      [\n        //////////////////////////\n        // MOBILES & TABLETS\n        // Ordered by popularity\n        /////////////////////////\n\n        // Samsung\n        /\\b(sch-i[89]0\\d|shw-m380s|sm-[ptx]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i\n      ],\n      [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]],\n      [\n        /\\b((?:s[cgp]h|gt|sm)-\\w+|galaxy nexus)/i,\n        /samsung[- ]([-\\w]+)/i,\n        /sec-(sgh\\w+)/i\n      ],\n      [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]],\n      [\n        // Apple\n        /((ipod|iphone)\\d+,\\d+)/i // iPod/iPhone model\n      ],\n      [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]],\n      [\n        /(ipad\\d+,\\d+)/i // iPad model\n      ],\n      [MODEL, [VENDOR, APPLE], [TYPE, TABLET]],\n      [\n        /\\((ip(?:hone|od)[\\w ]*);/i // iPod/iPhone\n      ],\n      [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]],\n      [\n        /\\((ipad);[-\\w\\),; ]+apple/i, // iPad\n        /applecoremedia\\/[\\w\\.]+ \\((ipad)/i,\n        /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i\n      ],\n      [MODEL, [VENDOR, APPLE], [TYPE, TABLET]],\n      [/(macintosh);/i],\n      [MODEL, [VENDOR, APPLE]],\n      [\n        // Huawei\n        /\\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\\d{2})\\b(?!.+d\\/s)/i\n      ],\n      [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]],\n      [\n        /(?:huawei|honor)([-\\w ]+)[;\\)]/i,\n        /\\b(nexus 6p|\\w{2,4}e?-[atu]?[ln][\\dx][012359c][adn]?)\\b(?!.+d\\/s)/i\n      ],\n      [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]],\n      [\n        // Xiaomi\n        /\\b(poco[\\w ]+)(?: bui|\\))/i, // Xiaomi POCO\n        /\\b; (\\w+) build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n        /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i, // Xiaomi Hongmi\n        /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i, // Xiaomi Redmi\n        /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\\))/i // Xiaomi Mi\n      ],\n      [\n        [MODEL, /_/g, \" \"],\n        [VENDOR, XIAOMI],\n        [TYPE, MOBILE]\n      ],\n      [\n        /\\b(mi[-_ ]?(?:pad)(?:[\\w_ ]+))(?: bui|\\))/i // Mi Pad tablets\n      ],\n      [\n        [MODEL, /_/g, \" \"],\n        [VENDOR, XIAOMI],\n        [TYPE, TABLET]\n      ],\n      [\n        // OPPO\n        /; (\\w+) bui.+ oppo/i,\n        /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i\n      ],\n      [MODEL, [VENDOR, \"OPPO\"], [TYPE, MOBILE]],\n      [\n        // Vivo\n        /vivo (\\w+)(?: bui|\\))/i,\n        /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i\n      ],\n      [MODEL, [VENDOR, \"Vivo\"], [TYPE, MOBILE]],\n      [\n        // Realme\n        /\\b(rmx[12]\\d{3})(?: bui|;|\\))/i\n      ],\n      [MODEL, [VENDOR, \"Realme\"], [TYPE, MOBILE]],\n      [\n        // Motorola\n        /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,\n        /\\bmot(?:orola)?[- ](\\w*)/i,\n        /((?:moto[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i\n      ],\n      [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]],\n      [/\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i],\n      [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]],\n      [\n        // LG\n        /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i\n      ],\n      [MODEL, [VENDOR, LG], [TYPE, TABLET]],\n      [\n        /(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,\n        /\\blg[-e;\\/ ]+((?!browser|netcast|android tv)\\w+)/i,\n        /\\blg-?([\\d\\w]+) bui/i\n      ],\n      [MODEL, [VENDOR, LG], [TYPE, MOBILE]],\n      [\n        // Lenovo\n        /(ideatab[-\\w ]+)/i,\n        /lenovo ?(s[56]000[-\\w]+|tab(?:[\\w ]+)|yt[-\\d\\w]{6}|tb[-\\d\\w]{6})/i\n      ],\n      [MODEL, [VENDOR, \"Lenovo\"], [TYPE, TABLET]],\n      [\n        // Nokia\n        /(?:maemo|nokia).*(n900|lumia \\d+)/i,\n        /nokia[-_ ]?([-\\w\\.]*)/i\n      ],\n      [\n        [MODEL, /_/g, \" \"],\n        [VENDOR, \"Nokia\"],\n        [TYPE, MOBILE]\n      ],\n      [\n        // Google\n        /(pixel c)\\b/i // Google Pixel C\n      ],\n      [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]],\n      [\n        /droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i // Google Pixel\n      ],\n      [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]],\n      [\n        // Sony\n        /droid.+ (a?\\d[0-2]{2}so|[c-g]\\d{4}|so[-gl]\\w+|xq-a\\w[4-7][12])(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n      ],\n      [MODEL, [VENDOR, SONY], [TYPE, MOBILE]],\n      [/sony tablet [ps]/i, /\\b(?:sony)?sgp\\w+(?: bui|\\))/i],\n      [\n        [MODEL, \"Xperia Tablet\"],\n        [VENDOR, SONY],\n        [TYPE, TABLET]\n      ],\n      [\n        // OnePlus\n        / (kb2005|in20[12]5|be20[12][59])\\b/i,\n        /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i\n      ],\n      [MODEL, [VENDOR, \"OnePlus\"], [TYPE, MOBILE]],\n      [\n        // Amazon\n        /(alexa)webm/i,\n        /(kf[a-z]{2}wi)( bui|\\))/i, // Kindle Fire without Silk\n        /(kf[a-z]+)( bui|\\)).+silk\\//i // Kindle Fire HD\n      ],\n      [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]],\n      [\n        /((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i // Fire Phone\n      ],\n      [\n        [MODEL, /(.+)/g, \"Fire Phone $1\"],\n        [VENDOR, AMAZON],\n        [TYPE, MOBILE]\n      ],\n      [\n        // BlackBerry\n        /(playbook);[-\\w\\),; ]+(rim)/i // BlackBerry PlayBook\n      ],\n      [MODEL, VENDOR, [TYPE, TABLET]],\n      [\n        /\\b((?:bb[a-f]|st[hv])100-\\d)/i,\n        /\\(bb10; (\\w+)/i // BlackBerry 10\n      ],\n      [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]],\n      [\n        // Asus\n        /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i\n      ],\n      [MODEL, [VENDOR, ASUS], [TYPE, TABLET]],\n      [/ (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i],\n      [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]],\n      [\n        // HTC\n        /(nexus 9)/i // HTC Nexus 9\n      ],\n      [MODEL, [VENDOR, \"HTC\"], [TYPE, TABLET]],\n      [\n        /(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i, // HTC\n\n        // ZTE\n        /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,\n        /(alcatel|geeksphone|nexian|panasonic|sony(?!-bra))[-_ ]?([-\\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n      ],\n      [VENDOR, [MODEL, /_/g, \" \"], [TYPE, MOBILE]],\n      [\n        // Acer\n        /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i\n      ],\n      [MODEL, [VENDOR, \"Acer\"], [TYPE, TABLET]],\n      [\n        // Meizu\n        /droid.+; (m[1-5] note) bui/i,\n        /\\bmz-([-\\w]{2,})/i\n      ],\n      [MODEL, [VENDOR, \"Meizu\"], [TYPE, MOBILE]],\n      [\n        // Sharp\n        /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i\n      ],\n      [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]],\n      [\n        // MIXED\n        /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\\w]*)/i,\n        // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n        /(hp) ([\\w ]+\\w)/i, // HP iPAQ\n        /(asus)-?(\\w+)/i, // Asus\n        /(microsoft); (lumia[\\w ]+)/i, // Microsoft Lumia\n        /(lenovo)[-_ ]?([-\\w]+)/i, // Lenovo\n        /(jolla)/i, // Jolla\n        /(oppo) ?([\\w ]+) bui/i // OPPO\n      ],\n      [VENDOR, MODEL, [TYPE, MOBILE]],\n      [\n        /(archos) (gamepad2?)/i, // Archos\n        /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad\n        /(kindle)\\/([\\w\\.]+)/i, // Kindle\n        /(nook)[\\w ]+build\\/(\\w+)/i, // Nook\n        /(dell) (strea[kpr\\d ]*[\\dko])/i, // Dell Streak\n        /(le[- ]+pan)[- ]+(\\w{1,9}) bui/i, // Le Pan Tablets\n        /(trinity)[- ]*(t\\d{3}) bui/i, // Trinity Tablets\n        /(gigaset)[- ]+(q\\w{1,9}) bui/i, // Gigaset Tablets\n        /(vodafone) ([\\w ]+)(?:\\)| bui)/i // Vodafone\n      ],\n      [VENDOR, MODEL, [TYPE, TABLET]],\n      [\n        /(surface duo)/i // Surface Duo\n      ],\n      [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]],\n      [\n        /droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i // Fairphone\n      ],\n      [MODEL, [VENDOR, \"Fairphone\"], [TYPE, MOBILE]],\n      [\n        /(u304aa)/i // AT&T\n      ],\n      [MODEL, [VENDOR, \"AT&T\"], [TYPE, MOBILE]],\n      [\n        /\\bsie-(\\w*)/i // Siemens\n      ],\n      [MODEL, [VENDOR, \"Siemens\"], [TYPE, MOBILE]],\n      [\n        /\\b(rct\\w+) b/i // RCA Tablets\n      ],\n      [MODEL, [VENDOR, \"RCA\"], [TYPE, TABLET]],\n      [\n        /\\b(venue[\\d ]{2,7}) b/i // Dell Venue Tablets\n      ],\n      [MODEL, [VENDOR, \"Dell\"], [TYPE, TABLET]],\n      [\n        /\\b(q(?:mv|ta)\\w+) b/i // Verizon Tablet\n      ],\n      [MODEL, [VENDOR, \"Verizon\"], [TYPE, TABLET]],\n      [\n        /\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i // Barnes & Noble Tablet\n      ],\n      [MODEL, [VENDOR, \"Barnes & Noble\"], [TYPE, TABLET]],\n      [/\\b(tm\\d{3}\\w+) b/i],\n      [MODEL, [VENDOR, \"NuVision\"], [TYPE, TABLET]],\n      [\n        /\\b(k88) b/i // ZTE K Series Tablet\n      ],\n      [MODEL, [VENDOR, \"ZTE\"], [TYPE, TABLET]],\n      [\n        /\\b(nx\\d{3}j) b/i // ZTE Nubia\n      ],\n      [MODEL, [VENDOR, \"ZTE\"], [TYPE, MOBILE]],\n      [\n        /\\b(gen\\d{3}) b.+49h/i // Swiss GEN Mobile\n      ],\n      [MODEL, [VENDOR, \"Swiss\"], [TYPE, MOBILE]],\n      [\n        /\\b(zur\\d{3}) b/i // Swiss ZUR Tablet\n      ],\n      [MODEL, [VENDOR, \"Swiss\"], [TYPE, TABLET]],\n      [\n        /\\b((zeki)?tb.*\\b) b/i // Zeki Tablets\n      ],\n      [MODEL, [VENDOR, \"Zeki\"], [TYPE, TABLET]],\n      [\n        /\\b([yr]\\d{2}) b/i,\n        /\\b(dragon[- ]+touch |dt)(\\w{5}) b/i // Dragon Touch Tablet\n      ],\n      [[VENDOR, \"Dragon Touch\"], MODEL, [TYPE, TABLET]],\n      [\n        /\\b(ns-?\\w{0,9}) b/i // Insignia Tablets\n      ],\n      [MODEL, [VENDOR, \"Insignia\"], [TYPE, TABLET]],\n      [\n        /\\b((nxa|next)-?\\w{0,9}) b/i // NextBook Tablets\n      ],\n      [MODEL, [VENDOR, \"NextBook\"], [TYPE, TABLET]],\n      [\n        /\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i // Voice Xtreme Phones\n      ],\n      [[VENDOR, \"Voice\"], MODEL, [TYPE, MOBILE]],\n      [\n        /\\b(lvtel\\-)?(v1[12]) b/i // LvTel Phones\n      ],\n      [[VENDOR, \"LvTel\"], MODEL, [TYPE, MOBILE]],\n      [\n        /\\b(ph-1) /i // Essential PH-1\n      ],\n      [MODEL, [VENDOR, \"Essential\"], [TYPE, MOBILE]],\n      [\n        /\\b(v(100md|700na|7011|917g).*\\b) b/i // Envizen Tablets\n      ],\n      [MODEL, [VENDOR, \"Envizen\"], [TYPE, TABLET]],\n      [\n        /\\b(trio[-\\w\\. ]+) b/i // MachSpeed Tablets\n      ],\n      [MODEL, [VENDOR, \"MachSpeed\"], [TYPE, TABLET]],\n      [\n        /\\btu_(1491) b/i // Rotor Tablets\n      ],\n      [MODEL, [VENDOR, \"Rotor\"], [TYPE, TABLET]],\n      [\n        /(shield[\\w ]+) b/i // Nvidia Shield Tablets\n      ],\n      [MODEL, [VENDOR, \"Nvidia\"], [TYPE, TABLET]],\n      [\n        /(sprint) (\\w+)/i // Sprint Phones\n      ],\n      [VENDOR, MODEL, [TYPE, MOBILE]],\n      [\n        /(kin\\.[onetw]{3})/i // Microsoft Kin\n      ],\n      [\n        [MODEL, /\\./g, \" \"],\n        [VENDOR, MICROSOFT],\n        [TYPE, MOBILE]\n      ],\n      [\n        /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i // Zebra\n      ],\n      [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]],\n      [/droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i],\n      [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]],\n      [\n        ///////////////////\n        // CONSOLES\n        ///////////////////\n\n        /(ouya)/i, // Ouya\n        /(nintendo) ([wids3utch]+)/i // Nintendo\n      ],\n      [VENDOR, MODEL, [TYPE, CONSOLE]],\n      [\n        /droid.+; (shield) bui/i // Nvidia\n      ],\n      [MODEL, [VENDOR, \"Nvidia\"], [TYPE, CONSOLE]],\n      [\n        /(playstation [345portablevi]+)/i // Playstation\n      ],\n      [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]],\n      [\n        /\\b(xbox(?: one)?(?!; xbox))[\\); ]/i // Microsoft Xbox\n      ],\n      [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]],\n      [\n        ///////////////////\n        // SMARTTVS\n        ///////////////////\n\n        /smart-tv.+(samsung)/i // Samsung\n      ],\n      [VENDOR, [TYPE, SMARTTV]],\n      [/hbbtv.+maple;(\\d+)/i],\n      [\n        [MODEL, /^/, \"SmartTV\"],\n        [VENDOR, SAMSUNG],\n        [TYPE, SMARTTV]\n      ],\n      [\n        /(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i // LG SmartTV\n      ],\n      [\n        [VENDOR, LG],\n        [TYPE, SMARTTV]\n      ],\n      [\n        /(apple) ?tv/i // Apple TV\n      ],\n      [VENDOR, [MODEL, APPLE + \" TV\"], [TYPE, SMARTTV]],\n      [\n        /crkey/i // Google Chromecast\n      ],\n      [\n        [MODEL, CHROME + \"cast\"],\n        [VENDOR, GOOGLE],\n        [TYPE, SMARTTV]\n      ],\n      [\n        /droid.+aft(\\w)( bui|\\))/i // Fire TV\n      ],\n      [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]],\n      [\n        /\\(dtv[\\);].+(aquos)/i,\n        /(aquos-tv[\\w ]+)\\)/i // Sharp\n      ],\n      [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],\n      [\n        /(bravia[\\w ]+)( bui|\\))/i // Sony\n      ],\n      [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]],\n      [\n        /(mitv-\\w{5}) bui/i // Xiaomi\n      ],\n      [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]],\n      [\n        /\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i, // Roku\n        /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w ]*; *(\\w[^;]*);([^;]*)/i // HbbTV devices\n      ],\n      [\n        [VENDOR, trim],\n        [MODEL, trim],\n        [TYPE, SMARTTV]\n      ],\n      [\n        /\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i // SmartTV from Unidentified Vendors\n      ],\n      [[TYPE, SMARTTV]],\n      [\n        ///////////////////\n        // WEARABLES\n        ///////////////////\n\n        /((pebble))app/i // Pebble\n      ],\n      [VENDOR, MODEL, [TYPE, WEARABLE]],\n      [\n        /droid.+; (glass) \\d/i // Google Glass\n      ],\n      [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]],\n      [/droid.+; (wt63?0{2,3})\\)/i],\n      [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]],\n      [\n        /(quest( 2)?)/i // Oculus Quest\n      ],\n      [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]],\n      [\n        ///////////////////\n        // EMBEDDED\n        ///////////////////\n\n        /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i // Tesla\n      ],\n      [VENDOR, [TYPE, EMBEDDED]],\n      [\n        ////////////////////\n        // MIXED (GENERIC)\n        ///////////////////\n\n        /droid .+?; ([^;]+?)(?: bui|\\) applew).+? mobile safari/i // Android Phones from Unidentified Vendors\n      ],\n      [MODEL, [TYPE, MOBILE]],\n      [\n        /droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors\n      ],\n      [MODEL, [TYPE, TABLET]],\n      [\n        /\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i // Unidentifiable Tablet\n      ],\n      [[TYPE, TABLET]],\n      [\n        /(phone|mobile(?:[;\\/]| [ \\w\\/\\.]*safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile\n      ],\n      [[TYPE, MOBILE]],\n      [\n        /(android[-\\w\\. ]{0,9});.+buil/i // Generic Android Device\n      ],\n      [MODEL, [VENDOR, \"Generic\"]]\n    ],\n\n    engine: [\n      [\n        /windows.+ edge\\/([\\w\\.]+)/i // EdgeHTML\n      ],\n      [VERSION, [NAME, EDGE + \"HTML\"]],\n      [\n        /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n      ],\n      [VERSION, [NAME, \"Blink\"]],\n      [\n        /(presto)\\/([\\w\\.]+)/i, // Presto\n        /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n        /ekioh(flow)\\/([\\w\\.]+)/i, // Flow\n        /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n        /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i // iCab\n      ],\n      [NAME, VERSION],\n      [\n        /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i // Gecko\n      ],\n      [VERSION, NAME]\n    ],\n\n    os: [\n      [\n        // Windows\n        /microsoft (windows) (vista|xp)/i // Windows (iTunes)\n      ],\n      [NAME, VERSION],\n      [\n        /(windows) nt 6\\.2; (arm)/i, // Windows RT\n        /(windows (?:phone(?: os)?|mobile))[\\/ ]?([\\d\\.\\w ]*)/i, // Windows Phone\n        /(windows)[\\/ ]?([ntce\\d\\. ]+\\w)(?!.+xbox)/i\n      ],\n      [NAME, [VERSION, strMapper, windowsVersionMap]],\n      [/(win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i],\n      [\n        [NAME, \"Windows\"],\n        [VERSION, strMapper, windowsVersionMap]\n      ],\n      [\n        // iOS/macOS\n        /ip[honead]{2,4}\\b(?:.*os ([\\w]+) like mac|; opera)/i, // iOS\n        /cfnetwork\\/.+darwin/i\n      ],\n      [\n        [VERSION, /_/g, \".\"],\n        [NAME, \"iOS\"]\n      ],\n      [\n        /(mac os x) ?([\\w\\. ]*)/i,\n        /(macintosh|mac_powerpc\\b)(?!.+haiku)/i // Mac OS\n      ],\n      [\n        [NAME, \"Mac OS\"],\n        [VERSION, /_/g, \".\"]\n      ],\n      [\n        // Mobile OSes\n        /droid ([\\w\\.]+)\\b.+(android[- ]x86|harmonyos)/i // Android-x86/HarmonyOS\n      ],\n      [VERSION, NAME],\n      [\n        // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS\n        /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\\/ ]?([\\w\\.]*)/i,\n        /(blackberry)\\w*\\/([\\w\\.]*)/i, // Blackberry\n        /(tizen|kaios)[\\/ ]([\\w\\.]+)/i, // Tizen/KaiOS\n        /\\((series40);/i // Series 40\n      ],\n      [NAME, VERSION],\n      [\n        /\\(bb(10);/i // BlackBerry 10\n      ],\n      [VERSION, [NAME, BLACKBERRY]],\n      [\n        /(?:symbian ?os|symbos|s60(?=;)|series60)[-\\/ ]?([\\w\\.]*)/i // Symbian\n      ],\n      [VERSION, [NAME, \"Symbian\"]],\n      [\n        /mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n      ],\n      [VERSION, [NAME, FIREFOX + \" OS\"]],\n      [\n        /web0s;.+rt(tv)/i,\n        /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i // WebOS\n      ],\n      [VERSION, [NAME, \"webOS\"]],\n      [\n        // Google Chromecast\n        /crkey\\/([\\d\\.]+)/i // Google Chromecast\n      ],\n      [VERSION, [NAME, CHROME + \"cast\"]],\n      [\n        /(cros) [\\w]+ ([\\w\\.]+\\w)/i // Chromium OS\n      ],\n      [[NAME, \"Chromium OS\"], VERSION],\n      [\n        // Console\n        /(nintendo|playstation) ([wids345portablevuch]+)/i, // Nintendo/Playstation\n        /(xbox); +xbox ([^\\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)\n\n        // Other\n        /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i, // Joli/Palm\n        /(mint)[\\/\\(\\) ]?(\\w*)/i, // Mint\n        /(mageia|vectorlinux)[; ]/i, // Mageia/VectorLinux\n        /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,\n        // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire\n        /(hurd|linux) ?([\\w\\.]*)/i, // Hurd/Linux\n        /(gnu) ?([\\w\\.]*)/i, // GNU\n        /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n        /(haiku) (\\w+)/i // Haiku\n      ],\n      [NAME, VERSION],\n      [\n        /(sunos) ?([\\w\\.\\d]*)/i // Solaris\n      ],\n      [[NAME, \"Solaris\"], VERSION],\n      [\n        /((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i, // Solaris\n        /(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i, // AIX\n        /\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux)/i, // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX\n        /(unix) ?([\\w\\.]*)/i // UNIX\n      ],\n      [NAME, VERSION]\n    ]\n  };\n\n  /////////////////\n  // Constructor\n  ////////////////\n\n  var UAParser = function (ua, extensions) {\n    if (typeof ua === OBJ_TYPE) {\n      extensions = ua;\n      ua = undefined;\n    }\n\n    if (!(this instanceof UAParser)) {\n      return new UAParser(ua, extensions).getResult();\n    }\n\n    var _ua =\n      ua ||\n      (typeof window !== UNDEF_TYPE &&\n      window.navigator &&\n      window.navigator.userAgent ? window.navigator.userAgent : EMPTY);\n    var _rgxmap = extensions ? extend(regexes, extensions) : regexes;\n\n    this.getBrowser = function () {\n      var _browser = {};\n      _browser[NAME] = undefined;\n      _browser[VERSION] = undefined;\n      rgxMapper.call(_browser, _ua, _rgxmap.browser);\n      _browser.major = majorize(_browser.version);\n      return _browser;\n    };\n    this.getCPU = function () {\n      var _cpu = {};\n      _cpu[ARCHITECTURE] = undefined;\n      rgxMapper.call(_cpu, _ua, _rgxmap.cpu);\n      return _cpu;\n    };\n    this.getDevice = function () {\n      var _device = {};\n      _device[VENDOR] = undefined;\n      _device[MODEL] = undefined;\n      _device[TYPE] = undefined;\n      rgxMapper.call(_device, _ua, _rgxmap.device);\n      return _device;\n    };\n    this.getEngine = function () {\n      var _engine = {};\n      _engine[NAME] = undefined;\n      _engine[VERSION] = undefined;\n      rgxMapper.call(_engine, _ua, _rgxmap.engine);\n      return _engine;\n    };\n    this.getOS = function () {\n      var _os = {};\n      _os[NAME] = undefined;\n      _os[VERSION] = undefined;\n      rgxMapper.call(_os, _ua, _rgxmap.os);\n      return _os;\n    };\n    this.getResult = function () {\n      return {\n        ua: this.getUA(),\n        browser: this.getBrowser(),\n        engine: this.getEngine(),\n        os: this.getOS(),\n        device: this.getDevice(),\n        cpu: this.getCPU()\n      };\n    };\n    this.getUA = function () {\n      return _ua;\n    };\n    this.setUA = function (ua) {\n      _ua =\n        typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH ? trim(ua, UA_MAX_LENGTH) : ua;\n      return this;\n    };\n    this.setUA(_ua);\n    return this;\n  };\n\n  UAParser.VERSION = LIBVERSION;\n  UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR]);\n  UAParser.CPU = enumerize([ARCHITECTURE]);\n  UAParser.DEVICE = enumerize([\n    MODEL,\n    VENDOR,\n    TYPE,\n    CONSOLE,\n    MOBILE,\n    SMARTTV,\n    TABLET,\n    WEARABLE,\n    EMBEDDED\n  ]);\n  UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n  ///////////\n  // Export\n  //////////\n\n  // check js environment\n  if (typeof exports !== UNDEF_TYPE) {\n    // nodejs env\n    if (typeof module !== UNDEF_TYPE && module.exports) {\n      exports = module.exports = UAParser;\n    }\n    exports.UAParser = UAParser;\n  } else {\n    // requirejs env (optional)\n    if (typeof define === FUNC_TYPE && define.amd) {\n      define(function () {\n        return UAParser;\n      });\n    } else if (typeof window !== UNDEF_TYPE) {\n      // browser env\n      window.UAParser = UAParser;\n    }\n  }\n\n  // jQuery/Zepto specific (optional)\n  // Note:\n  //   In AMD env the global scope should be kept clean, but jQuery is an exception.\n  //   jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n  //   and we should catch that.\n  var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto);\n  if ($ && !$.ua) {\n    var parser = new UAParser();\n    $.ua = parser.getResult();\n    $.ua.get = function () {\n      return parser.getUA();\n    };\n    $.ua.set = function (ua) {\n      parser.setUA(ua);\n      var result = parser.getResult();\n      for (var prop in result) {\n        $.ua[prop] = result[prop];\n      }\n    };\n  }\n})(typeof window === \"object\" ? window : this);\n","const {\n  hasOwnProperty,\n  setPrototypeOf,\n  isFrozen,\n  getPrototypeOf,\n  getOwnPropertyDescriptor,\n} = Object;\n\nlet { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports\nlet { apply, construct } = typeof Reflect !== 'undefined' && Reflect;\n\nif (!apply) {\n  apply = function (fun, thisValue, args) {\n    return fun.apply(thisValue, args);\n  };\n}\n\nif (!freeze) {\n  freeze = function (x) {\n    return x;\n  };\n}\n\nif (!seal) {\n  seal = function (x) {\n    return x;\n  };\n}\n\nif (!construct) {\n  construct = function (Func, args) {\n    return new Func(...args);\n  };\n}\n\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayIndexOf = unapply(Array.prototype.indexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySlice = unapply(Array.prototype.slice);\n\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);\n\nconst regExpTest = unapply(RegExp.prototype.test);\n\nconst typeErrorCreate = unconstruct(TypeError);\n\nexport function unapply(func) {\n  return (thisArg, ...args) => apply(func, thisArg, args);\n}\n\nexport function unconstruct(func) {\n  return (...args) => construct(func, args);\n}\n\n/* Add properties to a lookup table */\nexport function addToSet(set, array, transformCaseFunc) {\n  transformCaseFunc = transformCaseFunc ?? 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\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\n        element = lcElement;\n      }\n    }\n\n    set[element] = true;\n  }\n\n  return set;\n}\n\n/* Shallow clone an object */\nexport function clone(object) {\n  const newObject = create(null);\n\n  let property;\n  for (property in object) {\n    if (apply(hasOwnProperty, object, [property]) === true) {\n      newObject[property] = object[property];\n    }\n  }\n\n  return newObject;\n}\n\n/* IE10 doesn't support __lookupGetter__ so lets'\n * simulate it. It also automatically checks\n * if the prop is function or getter and behaves\n * accordingly. */\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\n      if (typeof desc.value === 'function') {\n        return unapply(desc.value);\n      }\n    }\n\n    object = getPrototypeOf(object);\n  }\n\n  function fallbackValue(element) {\n    console.warn('fallback value for', element);\n    return null;\n  }\n\n  return fallbackValue;\n}\n\nexport {\n  // Array\n  arrayForEach,\n  arrayIndexOf,\n  arrayPop,\n  arrayPush,\n  arraySlice,\n  // Object\n  freeze,\n  getPrototypeOf,\n  getOwnPropertyDescriptor,\n  hasOwnProperty,\n  isFrozen,\n  setPrototypeOf,\n  seal,\n  // RegExp\n  regExpTest,\n  // String\n  stringIndexOf,\n  stringMatch,\n  stringReplace,\n  stringToLowerCase,\n  stringToString,\n  stringTrim,\n  // Errors\n  typeErrorCreate,\n  // Other\n  lookupGetter,\n};\n","import { freeze } from './utils.js';\n\nexport const html = freeze([\n  'a',\n  'abbr',\n  'acronym',\n  'address',\n  'area',\n  'article',\n  'aside',\n  'audio',\n  'b',\n  'bdi',\n  'bdo',\n  'big',\n  'blink',\n  'blockquote',\n  'body',\n  'br',\n  'button',\n  'canvas',\n  'caption',\n  'center',\n  'cite',\n  'code',\n  'col',\n  'colgroup',\n  'content',\n  'data',\n  'datalist',\n  'dd',\n  'decorator',\n  'del',\n  'details',\n  'dfn',\n  'dialog',\n  'dir',\n  'div',\n  'dl',\n  'dt',\n  'element',\n  'em',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'font',\n  'footer',\n  'form',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'head',\n  'header',\n  'hgroup',\n  'hr',\n  'html',\n  'i',\n  'img',\n  'input',\n  'ins',\n  'kbd',\n  'label',\n  'legend',\n  'li',\n  'main',\n  'map',\n  'mark',\n  'marquee',\n  'menu',\n  'menuitem',\n  'meter',\n  'nav',\n  'nobr',\n  'ol',\n  'optgroup',\n  'option',\n  'output',\n  'p',\n  'picture',\n  'pre',\n  'progress',\n  'q',\n  'rp',\n  'rt',\n  'ruby',\n  's',\n  'samp',\n  'section',\n  'select',\n  'shadow',\n  'small',\n  'source',\n  'spacer',\n  'span',\n  'strike',\n  'strong',\n  'style',\n  'sub',\n  'summary',\n  'sup',\n  'table',\n  'tbody',\n  'td',\n  'template',\n  'textarea',\n  'tfoot',\n  'th',\n  'thead',\n  'time',\n  'tr',\n  'track',\n  'tt',\n  'u',\n  'ul',\n  'var',\n  'video',\n  'wbr',\n]);\n\n// SVG\nexport const svg = freeze([\n  'svg',\n  'a',\n  'altglyph',\n  'altglyphdef',\n  'altglyphitem',\n  'animatecolor',\n  'animatemotion',\n  'animatetransform',\n  'circle',\n  'clippath',\n  'defs',\n  'desc',\n  'ellipse',\n  'filter',\n  'font',\n  'g',\n  'glyph',\n  'glyphref',\n  'hkern',\n  'image',\n  'line',\n  'lineargradient',\n  'marker',\n  'mask',\n  'metadata',\n  'mpath',\n  'path',\n  'pattern',\n  'polygon',\n  'polyline',\n  'radialgradient',\n  'rect',\n  'stop',\n  'style',\n  'switch',\n  'symbol',\n  'text',\n  'textpath',\n  'title',\n  'tref',\n  'tspan',\n  'view',\n  'vkern',\n]);\n\nexport const svgFilters = freeze([\n  'feBlend',\n  'feColorMatrix',\n  'feComponentTransfer',\n  'feComposite',\n  'feConvolveMatrix',\n  'feDiffuseLighting',\n  'feDisplacementMap',\n  'feDistantLight',\n  'feFlood',\n  'feFuncA',\n  'feFuncB',\n  'feFuncG',\n  'feFuncR',\n  'feGaussianBlur',\n  'feImage',\n  'feMerge',\n  'feMergeNode',\n  'feMorphology',\n  'feOffset',\n  'fePointLight',\n  'feSpecularLighting',\n  'feSpotLight',\n  'feTile',\n  'feTurbulence',\n]);\n\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.\nexport const svgDisallowed = freeze([\n  'animate',\n  'color-profile',\n  'cursor',\n  'discard',\n  'fedropshadow',\n  'font-face',\n  'font-face-format',\n  'font-face-name',\n  'font-face-src',\n  'font-face-uri',\n  'foreignobject',\n  'hatch',\n  'hatchpath',\n  'mesh',\n  'meshgradient',\n  'meshpatch',\n  'meshrow',\n  'missing-glyph',\n  'script',\n  'set',\n  'solidcolor',\n  'unknown',\n  'use',\n]);\n\nexport const mathMl = freeze([\n  'math',\n  'menclose',\n  'merror',\n  'mfenced',\n  'mfrac',\n  'mglyph',\n  'mi',\n  'mlabeledtr',\n  'mmultiscripts',\n  'mn',\n  'mo',\n  'mover',\n  'mpadded',\n  'mphantom',\n  'mroot',\n  'mrow',\n  'ms',\n  'mspace',\n  'msqrt',\n  'mstyle',\n  'msub',\n  'msup',\n  'msubsup',\n  'mtable',\n  'mtd',\n  'mtext',\n  'mtr',\n  'munder',\n  'munderover',\n]);\n\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nexport const mathMlDisallowed = freeze([\n  'maction',\n  'maligngroup',\n  'malignmark',\n  'mlongdiv',\n  'mscarries',\n  'mscarry',\n  'msgroup',\n  'mstack',\n  'msline',\n  'msrow',\n  'semantics',\n  'annotation',\n  'annotation-xml',\n  'mprescripts',\n  'none',\n]);\n\nexport const text = freeze(['#text']);\n","import { freeze } from './utils.js';\n\nexport const html = freeze([\n  'accept',\n  'action',\n  'align',\n  'alt',\n  'autocapitalize',\n  'autocomplete',\n  'autopictureinpicture',\n  'autoplay',\n  'background',\n  'bgcolor',\n  'border',\n  'capture',\n  'cellpadding',\n  'cellspacing',\n  'checked',\n  'cite',\n  'class',\n  'clear',\n  'color',\n  'cols',\n  'colspan',\n  'controls',\n  'controlslist',\n  'coords',\n  'crossorigin',\n  'datetime',\n  'decoding',\n  'default',\n  'dir',\n  'disabled',\n  'disablepictureinpicture',\n  'disableremoteplayback',\n  'download',\n  'draggable',\n  'enctype',\n  'enterkeyhint',\n  'face',\n  'for',\n  'headers',\n  'height',\n  'hidden',\n  'high',\n  'href',\n  'hreflang',\n  'id',\n  'inputmode',\n  'integrity',\n  'ismap',\n  'kind',\n  'label',\n  'lang',\n  'list',\n  'loading',\n  'loop',\n  'low',\n  'max',\n  'maxlength',\n  'media',\n  'method',\n  'min',\n  'minlength',\n  'multiple',\n  'muted',\n  'name',\n  'nonce',\n  'noshade',\n  'novalidate',\n  'nowrap',\n  'open',\n  'optimum',\n  'pattern',\n  'placeholder',\n  'playsinline',\n  'poster',\n  'preload',\n  'pubdate',\n  'radiogroup',\n  'readonly',\n  'rel',\n  'required',\n  'rev',\n  'reversed',\n  'role',\n  'rows',\n  'rowspan',\n  'spellcheck',\n  'scope',\n  'selected',\n  'shape',\n  'size',\n  'sizes',\n  'span',\n  'srclang',\n  'start',\n  'src',\n  'srcset',\n  'step',\n  'style',\n  'summary',\n  'tabindex',\n  'title',\n  'translate',\n  'type',\n  'usemap',\n  'valign',\n  'value',\n  'width',\n  'xmlns',\n  'slot',\n]);\n\nexport const svg = freeze([\n  'accent-height',\n  'accumulate',\n  'additive',\n  'alignment-baseline',\n  'ascent',\n  'attributename',\n  'attributetype',\n  'azimuth',\n  'basefrequency',\n  'baseline-shift',\n  'begin',\n  'bias',\n  'by',\n  'class',\n  'clip',\n  'clippathunits',\n  'clip-path',\n  'clip-rule',\n  'color',\n  'color-interpolation',\n  'color-interpolation-filters',\n  'color-profile',\n  'color-rendering',\n  'cx',\n  'cy',\n  'd',\n  'dx',\n  'dy',\n  'diffuseconstant',\n  'direction',\n  'display',\n  'divisor',\n  'dur',\n  'edgemode',\n  'elevation',\n  'end',\n  'fill',\n  'fill-opacity',\n  'fill-rule',\n  'filter',\n  'filterunits',\n  'flood-color',\n  'flood-opacity',\n  'font-family',\n  'font-size',\n  'font-size-adjust',\n  'font-stretch',\n  'font-style',\n  'font-variant',\n  'font-weight',\n  'fx',\n  'fy',\n  'g1',\n  'g2',\n  'glyph-name',\n  'glyphref',\n  'gradientunits',\n  'gradienttransform',\n  'height',\n  'href',\n  'id',\n  'image-rendering',\n  'in',\n  'in2',\n  'k',\n  'k1',\n  'k2',\n  'k3',\n  'k4',\n  'kerning',\n  'keypoints',\n  'keysplines',\n  'keytimes',\n  'lang',\n  'lengthadjust',\n  'letter-spacing',\n  'kernelmatrix',\n  'kernelunitlength',\n  'lighting-color',\n  'local',\n  'marker-end',\n  'marker-mid',\n  'marker-start',\n  'markerheight',\n  'markerunits',\n  'markerwidth',\n  'maskcontentunits',\n  'maskunits',\n  'max',\n  'mask',\n  'media',\n  'method',\n  'mode',\n  'min',\n  'name',\n  'numoctaves',\n  'offset',\n  'operator',\n  'opacity',\n  'order',\n  'orient',\n  'orientation',\n  'origin',\n  'overflow',\n  'paint-order',\n  'path',\n  'pathlength',\n  'patterncontentunits',\n  'patterntransform',\n  'patternunits',\n  'points',\n  'preservealpha',\n  'preserveaspectratio',\n  'primitiveunits',\n  'r',\n  'rx',\n  'ry',\n  'radius',\n  'refx',\n  'refy',\n  'repeatcount',\n  'repeatdur',\n  'restart',\n  'result',\n  'rotate',\n  'scale',\n  'seed',\n  'shape-rendering',\n  'specularconstant',\n  'specularexponent',\n  'spreadmethod',\n  'startoffset',\n  'stddeviation',\n  'stitchtiles',\n  'stop-color',\n  'stop-opacity',\n  'stroke-dasharray',\n  'stroke-dashoffset',\n  'stroke-linecap',\n  'stroke-linejoin',\n  'stroke-miterlimit',\n  'stroke-opacity',\n  'stroke',\n  'stroke-width',\n  'style',\n  'surfacescale',\n  'systemlanguage',\n  'tabindex',\n  'targetx',\n  'targety',\n  'transform',\n  'transform-origin',\n  'text-anchor',\n  'text-decoration',\n  'text-rendering',\n  'textlength',\n  'type',\n  'u1',\n  'u2',\n  'unicode',\n  'values',\n  'viewbox',\n  'visibility',\n  'version',\n  'vert-adv-y',\n  'vert-origin-x',\n  'vert-origin-y',\n  'width',\n  'word-spacing',\n  'wrap',\n  'writing-mode',\n  'xchannelselector',\n  'ychannelselector',\n  'x',\n  'x1',\n  'x2',\n  'xmlns',\n  'y',\n  'y1',\n  'y2',\n  'z',\n  'zoomandpan',\n]);\n\nexport const mathMl = freeze([\n  'accent',\n  'accentunder',\n  'align',\n  'bevelled',\n  'close',\n  'columnsalign',\n  'columnlines',\n  'columnspan',\n  'denomalign',\n  'depth',\n  'dir',\n  'display',\n  'displaystyle',\n  'encoding',\n  'fence',\n  'frame',\n  'height',\n  'href',\n  'id',\n  'largeop',\n  'length',\n  'linethickness',\n  'lspace',\n  'lquote',\n  'mathbackground',\n  'mathcolor',\n  'mathsize',\n  'mathvariant',\n  'maxsize',\n  'minsize',\n  'movablelimits',\n  'notation',\n  'numalign',\n  'open',\n  'rowalign',\n  'rowlines',\n  'rowspacing',\n  'rowspan',\n  'rspace',\n  'rquote',\n  'scriptlevel',\n  'scriptminsize',\n  'scriptsizemultiplier',\n  'selection',\n  'separator',\n  'separators',\n  'stretchy',\n  'subscriptshift',\n  'supscriptshift',\n  'symmetric',\n  'voffset',\n  'width',\n  'xmlns',\n]);\n\nexport const xml = freeze([\n  'xlink:href',\n  'xml:id',\n  'xlink:title',\n  'xml:space',\n  'xmlns:xlink',\n]);\n","import { seal } from './utils.js';\n\n// eslint-disable-next-line unicorn/better-regex\nexport const MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nexport const ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nexport const TMPLIT_EXPR = seal(/\\${[\\w\\W]*}/gm);\nexport const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nexport const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nexport const IS_ALLOWED_URI = seal(\n  /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nexport const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nexport const ATTR_WHITESPACE = seal(\n  /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nexport const DOCTYPE_NAME = seal(/^html$/i);\nexport const CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n","import * as TAGS from './tags.js';\nimport * as ATTRS from './attrs.js';\nimport * as EXPRESSIONS from './regexp.js';\nimport {\n  addToSet,\n  clone,\n  freeze,\n  arrayForEach,\n  arrayPop,\n  arrayPush,\n  stringMatch,\n  stringReplace,\n  stringToLowerCase,\n  stringToString,\n  stringIndexOf,\n  stringTrim,\n  regExpTest,\n  typeErrorCreate,\n  lookupGetter,\n} from './utils.js';\n\nconst getGlobal = () => (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 {?TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {Document} document The document object (to determine policy name suffix)\n * @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported).\n */\nconst _createTrustedTypesPolicy = function (trustedTypes, document) {\n  if (\n    typeof trustedTypes !== 'object' ||\n    typeof trustedTypes.createPolicy !== 'function'\n  ) {\n    return null;\n  }\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 (\n    document.currentScript &&\n    document.currentScript.hasAttribute(ATTR_NAME)\n  ) {\n    suffix = document.currentScript.getAttribute(ATTR_NAME);\n  }\n\n  const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\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(\n      'TrustedTypes policy ' + policyName + ' could not be created.'\n    );\n    return null;\n  }\n};\n\nfunction createDOMPurify(window = getGlobal()) {\n  const DOMPurify = (root) => createDOMPurify(root);\n\n  /**\n   * Version label, exposed for easier checks\n   * if DOMPurify is up to date or not\n   */\n  DOMPurify.version = VERSION;\n\n  /**\n   * Array of elements that DOMPurify removed during sanitation.\n   * Empty if nothing was removed.\n   */\n  DOMPurify.removed = [];\n\n  if (!window || !window.document || window.document.nodeType !== 9) {\n    // Not running in a browser, provide a factory function\n    // so that you can pass your own Window\n    DOMPurify.isSupported = false;\n\n    return DOMPurify;\n  }\n\n  const originalDocument = window.document;\n\n  let { document } = window;\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\n  const ElementPrototype = Element.prototype;\n\n  const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n  const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n  const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n  const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\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\n  const trustedTypesPolicy = _createTrustedTypesPolicy(\n    trustedTypes,\n    originalDocument\n  );\n  const emptyHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML('') : '';\n\n  const {\n    implementation,\n    createNodeIterator,\n    createDocumentFragment,\n    getElementsByTagName,\n  } = document;\n  const { importNode } = originalDocument;\n\n  let documentMode = {};\n  try {\n    documentMode = clone(document).documentMode ? document.documentMode : {};\n  } catch (_) {}\n\n  let hooks = {};\n\n  /**\n   * Expose whether this browser supports running the full DOMPurify.\n   */\n  DOMPurify.isSupported =\n    typeof getParentNode === 'function' &&\n    implementation &&\n    implementation.createHTMLDocument !== undefined &&\n    documentMode !== 9;\n\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\n  let { IS_ALLOWED_URI } = EXPRESSIONS;\n\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\n  /* allowed element names */\n  let ALLOWED_TAGS = null;\n  const DEFAULT_ALLOWED_TAGS = addToSet({}, [\n    ...TAGS.html,\n    ...TAGS.svg,\n    ...TAGS.svgFilters,\n    ...TAGS.mathMl,\n    ...TAGS.text,\n  ]);\n\n  /* Allowed attribute names */\n  let ALLOWED_ATTR = null;\n  const DEFAULT_ALLOWED_ATTR = addToSet({}, [\n    ...ATTRS.html,\n    ...ATTRS.svg,\n    ...ATTRS.mathMl,\n    ...ATTRS.xml,\n  ]);\n\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(\n    Object.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  );\n\n  /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n  let FORBID_TAGS = null;\n\n  /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n  let FORBID_ATTR = null;\n\n  /* Decide if ARIA attributes are okay */\n  let ALLOW_ARIA_ATTR = true;\n\n  /* Decide if custom data attributes are okay */\n  let ALLOW_DATA_ATTR = true;\n\n  /* Decide if unknown protocols are okay */\n  let ALLOW_UNKNOWN_PROTOCOLS = false;\n\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\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\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\n  /* Decide if document with <html>... should be returned */\n  let WHOLE_DOCUMENT = false;\n\n  /* Track whether config is already set on this instance of DOMPurify. */\n  let SET_CONFIG = false;\n\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\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\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\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\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\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\n  /* Keep element content when removing element? */\n  let KEEP_CONTENT = true;\n\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\n  /* Allow usage of profiles like html, svg and mathMl */\n  let USE_PROFILES = {};\n\n  /* Tags to ignore content of when KEEP_CONTENT is true */\n  let FORBID_CONTENTS = null;\n  const DEFAULT_FORBID_CONTENTS = addToSet({}, [\n    'annotation-xml',\n    'audio',\n    'colgroup',\n    'desc',\n    'foreignobject',\n    'head',\n    'iframe',\n    'math',\n    'mi',\n    'mn',\n    'mo',\n    'ms',\n    'mtext',\n    'noembed',\n    'noframes',\n    'noscript',\n    'plaintext',\n    'script',\n    'style',\n    'svg',\n    'template',\n    'thead',\n    'title',\n    'video',\n    'xmp',\n  ]);\n\n  /* Tags that are safe for data: URIs */\n  let DATA_URI_TAGS = null;\n  const DEFAULT_DATA_URI_TAGS = addToSet({}, [\n    'audio',\n    'video',\n    'img',\n    'source',\n    'image',\n    'track',\n  ]);\n\n  /* Attributes safe for values like \"javascript:\" */\n  let URI_SAFE_ATTRIBUTES = null;\n  const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n    'alt',\n    'class',\n    'for',\n    'id',\n    'label',\n    'name',\n    'pattern',\n    'placeholder',\n    'role',\n    'summary',\n    'title',\n    'value',\n    'style',\n    'xmlns',\n  ]);\n\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\n  /* Allowed XHTML+XML namespaces */\n  let ALLOWED_NAMESPACES = null;\n  const DEFAULT_ALLOWED_NAMESPACES = addToSet(\n    {},\n    [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE],\n    stringToString\n  );\n\n  /* Parsing of strict XHTML documents */\n  let PARSER_MEDIA_TYPE;\n  const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n  const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n  let transformCaseFunc;\n\n  /* Keep a reference to config to pass to hooks */\n  let CONFIG = null;\n\n  /* Ideally, do not touch anything below this line */\n  /* ______________________________________________ */\n\n  const formElement = document.createElement('form');\n\n  const isRegexOrFunction = function (testValue) {\n    return testValue instanceof RegExp || testValue instanceof Function;\n  };\n\n  /**\n   * _parseConfig\n   *\n   * @param  {Object} cfg optional config literal\n   */\n  // eslint-disable-next-line complexity\n  const _parseConfig = function (cfg) {\n    if (CONFIG && CONFIG === cfg) {\n      return;\n    }\n\n    /* Shield configuration object from tampering */\n    if (!cfg || typeof cfg !== 'object') {\n      cfg = {};\n    }\n\n    /* Shield configuration object from prototype pollution */\n    cfg = clone(cfg);\n\n    PARSER_MEDIA_TYPE =\n      // eslint-disable-next-line unicorn/prefer-includes\n      SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1\n        ? (PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE)\n        : (PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE);\n\n    // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n    transformCaseFunc =\n      PARSER_MEDIA_TYPE === 'application/xhtml+xml'\n        ? stringToString\n        : stringToLowerCase;\n\n    /* Set configuration parameters */\n    ALLOWED_TAGS =\n      'ALLOWED_TAGS' in cfg\n        ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc)\n        : DEFAULT_ALLOWED_TAGS;\n    ALLOWED_ATTR =\n      'ALLOWED_ATTR' in cfg\n        ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc)\n        : DEFAULT_ALLOWED_ATTR;\n    ALLOWED_NAMESPACES =\n      'ALLOWED_NAMESPACES' in cfg\n        ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString)\n        : DEFAULT_ALLOWED_NAMESPACES;\n    URI_SAFE_ATTRIBUTES =\n      'ADD_URI_SAFE_ATTR' in cfg\n        ? addToSet(\n            clone(DEFAULT_URI_SAFE_ATTRIBUTES), // eslint-disable-line indent\n            cfg.ADD_URI_SAFE_ATTR, // eslint-disable-line indent\n            transformCaseFunc // eslint-disable-line indent\n          ) // eslint-disable-line indent\n        : DEFAULT_URI_SAFE_ATTRIBUTES;\n    DATA_URI_TAGS =\n      'ADD_DATA_URI_TAGS' in cfg\n        ? addToSet(\n            clone(DEFAULT_DATA_URI_TAGS), // eslint-disable-line indent\n            cfg.ADD_DATA_URI_TAGS, // eslint-disable-line indent\n            transformCaseFunc // eslint-disable-line indent\n          ) // eslint-disable-line indent\n        : DEFAULT_DATA_URI_TAGS;\n    FORBID_CONTENTS =\n      'FORBID_CONTENTS' in cfg\n        ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc)\n        : DEFAULT_FORBID_CONTENTS;\n    FORBID_TAGS =\n      'FORBID_TAGS' in cfg\n        ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc)\n        : {};\n    FORBID_ATTR =\n      'FORBID_ATTR' in cfg\n        ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc)\n        : {};\n    USE_PROFILES = 'USE_PROFILES' in cfg ? 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 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n    NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n    CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n    if (\n      cfg.CUSTOM_ELEMENT_HANDLING &&\n      isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)\n    ) {\n      CUSTOM_ELEMENT_HANDLING.tagNameCheck =\n        cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n    }\n\n    if (\n      cfg.CUSTOM_ELEMENT_HANDLING &&\n      isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)\n    ) {\n      CUSTOM_ELEMENT_HANDLING.attributeNameCheck =\n        cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n    }\n\n    if (\n      cfg.CUSTOM_ELEMENT_HANDLING &&\n      typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements ===\n        'boolean'\n    ) {\n      CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements =\n        cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n    }\n\n    if (SAFE_FOR_TEMPLATES) {\n      ALLOW_DATA_ATTR = false;\n    }\n\n    if (RETURN_DOM_FRAGMENT) {\n      RETURN_DOM = true;\n    }\n\n    /* Parse profile info */\n    if (USE_PROFILES) {\n      ALLOWED_TAGS = addToSet({}, [...TAGS.text]);\n      ALLOWED_ATTR = [];\n      if (USE_PROFILES.html === true) {\n        addToSet(ALLOWED_TAGS, TAGS.html);\n        addToSet(ALLOWED_ATTR, ATTRS.html);\n      }\n\n      if (USE_PROFILES.svg === true) {\n        addToSet(ALLOWED_TAGS, TAGS.svg);\n        addToSet(ALLOWED_ATTR, ATTRS.svg);\n        addToSet(ALLOWED_ATTR, ATTRS.xml);\n      }\n\n      if (USE_PROFILES.svgFilters === true) {\n        addToSet(ALLOWED_TAGS, TAGS.svgFilters);\n        addToSet(ALLOWED_ATTR, ATTRS.svg);\n        addToSet(ALLOWED_ATTR, ATTRS.xml);\n      }\n\n      if (USE_PROFILES.mathMl === true) {\n        addToSet(ALLOWED_TAGS, TAGS.mathMl);\n        addToSet(ALLOWED_ATTR, ATTRS.mathMl);\n        addToSet(ALLOWED_ATTR, ATTRS.xml);\n      }\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\n      addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n    }\n\n    if (cfg.ADD_ATTR) {\n      if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n        ALLOWED_ATTR = clone(ALLOWED_ATTR);\n      }\n\n      addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n    }\n\n    if (cfg.ADD_URI_SAFE_ATTR) {\n      addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n    }\n\n    if (cfg.FORBID_CONTENTS) {\n      if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n        FORBID_CONTENTS = clone(FORBID_CONTENTS);\n      }\n\n      addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n    }\n\n    /* Add #text in case KEEP_CONTENT is set to true */\n    if (KEEP_CONTENT) {\n      ALLOWED_TAGS['#text'] = true;\n    }\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\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\n    // Prevent further manipulation of configuration.\n    // Not available in IE8, Safari 5, etc.\n    if (freeze) {\n      freeze(cfg);\n    }\n\n    CONFIG = cfg;\n  };\n\n  const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [\n    'mi',\n    'mo',\n    'mn',\n    'ms',\n    'mtext',\n  ]);\n\n  const HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n\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({}, [\n    'title',\n    'style',\n    'font',\n    'a',\n    'script',\n  ]);\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({}, TAGS.svg);\n  addToSet(ALL_SVG_TAGS, TAGS.svgFilters);\n  addToSet(ALL_SVG_TAGS, TAGS.svgDisallowed);\n\n  const ALL_MATHML_TAGS = addToSet({}, TAGS.mathMl);\n  addToSet(ALL_MATHML_TAGS, TAGS.mathMlDisallowed);\n\n  /**\n   *\n   *\n   * @param  {Element} element a DOM element whose namespace is being checked\n   * @returns {boolean} 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 (element) {\n    let parent = getParentNode(element);\n\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\n    const tagName = stringToLowerCase(element.tagName);\n    const parentTagName = stringToLowerCase(parent.tagName);\n\n    if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n      return false;\n    }\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\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 (\n          tagName === 'svg' &&\n          (parentTagName === 'annotation-xml' ||\n            MATHML_TEXT_INTEGRATION_POINTS[parentTagName])\n        );\n      }\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\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\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\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\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 (\n        parent.namespaceURI === SVG_NAMESPACE &&\n        !HTML_INTEGRATION_POINTS[parentTagName]\n      ) {\n        return false;\n      }\n\n      if (\n        parent.namespaceURI === MATHML_NAMESPACE &&\n        !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]\n      ) {\n        return false;\n      }\n\n      // We disallow tags that are specific for MathML\n      // or SVG and should never appear in HTML namespace\n      return (\n        !ALL_MATHML_TAGS[tagName] &&\n        (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName])\n      );\n    }\n\n    // For XHTML and XML documents that support custom namespaces\n    if (\n      PARSER_MEDIA_TYPE === 'application/xhtml+xml' &&\n      ALLOWED_NAMESPACES[element.namespaceURI]\n    ) {\n      return true;\n    }\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  /**\n   * _forceRemove\n   *\n   * @param  {Node} node a DOM node\n   */\n  const _forceRemove = function (node) {\n    arrayPush(DOMPurify.removed, { element: node });\n    try {\n      // eslint-disable-next-line unicorn/prefer-dom-node-remove\n      node.parentNode.removeChild(node);\n    } catch (_) {\n      try {\n        node.outerHTML = emptyHTML;\n      } catch (_) {\n        node.remove();\n      }\n    }\n  };\n\n  /**\n   * _removeAttribute\n   *\n   * @param  {String} name an Attribute name\n   * @param  {Node} node a DOM node\n   */\n  const _removeAttribute = function (name, node) {\n    try {\n      arrayPush(DOMPurify.removed, {\n        attribute: node.getAttributeNode(name),\n        from: node,\n      });\n    } catch (_) {\n      arrayPush(DOMPurify.removed, {\n        attribute: null,\n        from: node,\n      });\n    }\n\n    node.removeAttribute(name);\n\n    // We void attribute values for unremovable \"is\"\" attributes\n    if (name === 'is' && !ALLOWED_ATTR[name]) {\n      if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n        try {\n          _forceRemove(node);\n        } catch (_) {}\n      } else {\n        try {\n          node.setAttribute(name, '');\n        } catch (_) {}\n      }\n    }\n  };\n\n  /**\n   * _initDocument\n   *\n   * @param  {String} dirty a string of dirty markup\n   * @return {Document} a DOM, filled with the dirty markup\n   */\n  const _initDocument = function (dirty) {\n    /* Create a HTML document */\n    let doc;\n    let leadingWhitespace;\n\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\n    if (\n      PARSER_MEDIA_TYPE === 'application/xhtml+xml' &&\n      NAMESPACE === HTML_NAMESPACE\n    ) {\n      // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n      dirty =\n        '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' +\n        dirty +\n        '</body></html>';\n    }\n\n    const dirtyPayload = trustedTypesPolicy\n      ? trustedTypesPolicy.createHTML(dirty)\n      : 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\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\n          ? emptyHTML\n          : dirtyPayload;\n      } catch (_) {\n        // Syntax error if dirtyPayload is invalid xml\n      }\n    }\n\n    const body = doc.body || doc.documentElement;\n\n    if (dirty && leadingWhitespace) {\n      body.insertBefore(\n        document.createTextNode(leadingWhitespace),\n        body.childNodes[0] || null\n      );\n    }\n\n    /* Work on whole document or just its body */\n    if (NAMESPACE === HTML_NAMESPACE) {\n      return getElementsByTagName.call(\n        doc,\n        WHOLE_DOCUMENT ? 'html' : 'body'\n      )[0];\n    }\n\n    return WHOLE_DOCUMENT ? doc.documentElement : body;\n  };\n\n  /**\n   * _createIterator\n   *\n   * @param  {Document} root document/fragment to create iterator for\n   * @return {Iterator} iterator instance\n   */\n  const _createIterator = function (root) {\n    return createNodeIterator.call(\n      root.ownerDocument || root,\n      root,\n      // eslint-disable-next-line no-bitwise\n      NodeFilter.SHOW_ELEMENT |\n        NodeFilter.SHOW_COMMENT |\n        NodeFilter.SHOW_TEXT |\n        NodeFilter.SHOW_PROCESSING_INSTRUCTION |\n        NodeFilter.SHOW_CDATA_SECTION,\n      null,\n      false\n    );\n  };\n\n  /**\n   * _isClobbered\n   *\n   * @param  {Node} elm element to check for clobbering attacks\n   * @return {Boolean} true if clobbered, false if safe\n   */\n  const _isClobbered = function (elm) {\n    return (\n      elm instanceof HTMLFormElement &&\n      (typeof elm.nodeName !== 'string' ||\n        typeof elm.textContent !== 'string' ||\n        typeof elm.removeChild !== 'function' ||\n        !(elm.attributes instanceof NamedNodeMap) ||\n        typeof elm.removeAttribute !== 'function' ||\n        typeof elm.setAttribute !== 'function' ||\n        typeof elm.namespaceURI !== 'string' ||\n        typeof elm.insertBefore !== 'function' ||\n        typeof elm.hasChildNodes !== 'function')\n    );\n  };\n\n  /**\n   * _isNode\n   *\n   * @param  {Node} obj object to check whether it's a DOM node\n   * @return {Boolean} true is object is a DOM node\n   */\n  const _isNode = function (object) {\n    return typeof Node === 'object'\n      ? object instanceof Node\n      : object &&\n          typeof object === 'object' &&\n          typeof object.nodeType === 'number' &&\n          typeof object.nodeName === 'string';\n  };\n\n  /**\n   * _executeHook\n   * Execute user configurable hooks\n   *\n   * @param  {String} entryPoint  Name of the hook's entry point\n   * @param  {Node} currentNode node to work on with the hook\n   * @param  {Object} data additional hook parameters\n   */\n  const _executeHook = function (entryPoint, currentNode, data) {\n    if (!hooks[entryPoint]) {\n      return;\n    }\n\n    arrayForEach(hooks[entryPoint], (hook) => {\n      hook.call(DOMPurify, currentNode, data, CONFIG);\n    });\n  };\n\n  /**\n   * _sanitizeElements\n   *\n   * @protect nodeName\n   * @protect textContent\n   * @protect removeChild\n   *\n   * @param   {Node} currentNode to check for permission to exist\n   * @return  {Boolean} true if node was killed, false if left alive\n   */\n  const _sanitizeElements = function (currentNode) {\n    let content;\n\n    /* Execute a hook if present */\n    _executeHook('beforeSanitizeElements', currentNode, null);\n\n    /* Check if element is clobbered or can clobber */\n    if (_isClobbered(currentNode)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Check if tagname contains Unicode */\n    if (regExpTest(/[\\u0080-\\uFFFF]/, currentNode.nodeName)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Now let's check the element's type and name */\n    const tagName = transformCaseFunc(currentNode.nodeName);\n\n    /* Execute a hook if present */\n    _executeHook('uponSanitizeElement', currentNode, {\n      tagName,\n      allowedTags: ALLOWED_TAGS,\n    });\n\n    /* Detect mXSS attempts abusing namespace confusion */\n    if (\n      currentNode.hasChildNodes() &&\n      !_isNode(currentNode.firstElementChild) &&\n      (!_isNode(currentNode.content) ||\n        !_isNode(currentNode.content.firstElementChild)) &&\n      regExpTest(/<[/\\w]/g, currentNode.innerHTML) &&\n      regExpTest(/<[/\\w]/g, currentNode.textContent)\n    ) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Mitigate a problem with templates inside select */\n    if (\n      tagName === 'select' &&\n      regExpTest(/<template/i, currentNode.innerHTML)\n    ) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Remove any ocurrence of processing instructions */\n    if (currentNode.nodeType === 7) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Remove any kind of possibly harmful comments */\n    if (\n      SAFE_FOR_XML &&\n      currentNode.nodeType === 8 &&\n      regExpTest(/<[/\\w]/g, currentNode.data)\n    ) {\n      _forceRemove(currentNode);\n      return true;\n    }\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] && _basicCustomElementTest(tagName)) {\n        if (\n          CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n          regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)\n        )\n          return false;\n        if (\n          CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n          CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)\n        )\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\n        if (childNodes && parentNode) {\n          const childCount = childNodes.length;\n\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\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Check whether element has a valid namespace */\n    if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Make sure that older browsers don't get fallback-tag mXSS */\n    if (\n      (tagName === 'noscript' ||\n        tagName === 'noembed' ||\n        tagName === 'noframes') &&\n      regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)\n    ) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Sanitize element content to be template-safe */\n    if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {\n      /* Get the element's text content */\n      content = currentNode.textContent;\n      content = stringReplace(content, MUSTACHE_EXPR, ' ');\n      content = stringReplace(content, ERB_EXPR, ' ');\n      content = stringReplace(content, TMPLIT_EXPR, ' ');\n      if (currentNode.textContent !== content) {\n        arrayPush(DOMPurify.removed, { element: currentNode.cloneNode() });\n        currentNode.textContent = content;\n      }\n    }\n\n    /* Execute a hook if present */\n    _executeHook('afterSanitizeElements', currentNode, null);\n\n    return false;\n  };\n\n  /**\n   * _isValidAttribute\n   *\n   * @param  {string} lcTag Lowercase tag name of containing element.\n   * @param  {string} lcName Lowercase attribute name.\n   * @param  {string} value Attribute value.\n   * @return {Boolean} Returns true if `value` is valid, otherwise false.\n   */\n  // eslint-disable-next-line complexity\n  const _isValidAttribute = function (lcTag, lcName, value) {\n    /* Make sure attribute cannot clobber */\n    if (\n      SANITIZE_DOM &&\n      (lcName === 'id' || lcName === 'name') &&\n      (value in document || value in formElement)\n    ) {\n      return false;\n    }\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 (\n      ALLOW_DATA_ATTR &&\n      !FORBID_ATTR[lcName] &&\n      regExpTest(DATA_ATTR, lcName)\n    ) {\n      // This attribute is safe\n    } else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) {\n      // This attribute is safe\n      /* Otherwise, check the name is permitted */\n    } 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        (_basicCustomElementTest(lcTag) &&\n          ((CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n            regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag)) ||\n            (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n              CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag))) &&\n          ((CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp &&\n            regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName)) ||\n            (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function &&\n              CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)))) ||\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' &&\n          CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements &&\n          ((CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n            regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value)) ||\n            (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n              CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))))\n      ) {\n        // If user has supplied a regexp or function in CUSTOM_ELEMENT_HANDLING.tagNameCheck, we need to also allow derived custom elements using the same tagName test.\n        // Additionally, we need to allow attributes passing the CUSTOM_ELEMENT_HANDLING.attributeNameCheck user has configured, as custom elements can define these at their own discretion.\n      } 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]) {\n      // This attribute is safe\n      /* Check no script, data or unknown possibly unsafe URI\n        unless we know URI values are safe for that attribute */\n    } else if (\n      regExpTest(IS_ALLOWED_URI, stringReplace(value, ATTR_WHITESPACE, ''))\n    ) {\n      // This attribute is safe\n      /* Keep image data URIs alive if src/xlink:href is allowed */\n      /* Further prevent gadget XSS for dynamically built script tags */\n    } else if (\n      (lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') &&\n      lcTag !== 'script' &&\n      stringIndexOf(value, 'data:') === 0 &&\n      DATA_URI_TAGS[lcTag]\n    ) {\n      // This attribute is safe\n      /* Allow unknown protocols: This provides support for links that\n        are handled by protocol handlers which may be unknown ahead of\n        time, e.g. fb:, spotify: */\n    } else if (\n      ALLOW_UNKNOWN_PROTOCOLS &&\n      !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))\n    ) {\n      // This attribute is safe\n      /* Check for binary attributes */\n    } else if (value) {\n      return false;\n    } else {\n      // Binary attributes are safe at this point\n      /* Anything else, presume unsafe, do not add it back */\n    }\n\n    return true;\n  };\n\n  /**\n   * _basicCustomElementCheck\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   * @param {string} tagName name of the tag of the node to sanitize\n   */\n  const _basicCustomElementTest = function (tagName) {\n    return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n  };\n\n  /**\n   * _sanitizeAttributes\n   *\n   * @protect attributes\n   * @protect nodeName\n   * @protect removeAttribute\n   * @protect setAttribute\n   *\n   * @param  {Node} currentNode to sanitize\n   */\n  const _sanitizeAttributes = function (currentNode) {\n    let attr;\n    let value;\n    let lcName;\n    let l;\n    /* Execute a hook if present */\n    _executeHook('beforeSanitizeAttributes', currentNode, null);\n\n    const { attributes } = currentNode;\n\n    /* Check if we have attributes; if not we might have a text node */\n    if (!attributes || _isClobbered(currentNode)) {\n      return;\n    }\n\n    const hookEvent = {\n      attrName: '',\n      attrValue: '',\n      keepAttr: true,\n      allowedAttributes: ALLOWED_ATTR,\n    };\n    l = attributes.length;\n\n    /* Go backwards over all attributes; safely remove bad ones */\n    while (l--) {\n      attr = attributes[l];\n      const { name, namespaceURI } = attr;\n      value = name === 'value' ? attr.value : stringTrim(attr.value);\n      lcName = transformCaseFunc(name);\n\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      _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n      value = hookEvent.attrValue;\n\n      /* Did the hooks approve of the attribute? */\n      if (hookEvent.forceKeepAttr) {\n        continue;\n      }\n\n      /* Remove attribute */\n      _removeAttribute(name, currentNode);\n\n      /* Did the hooks approve of the attribute? */\n      if (!hookEvent.keepAttr) {\n        continue;\n      }\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\n      /* Sanitize attribute content to be template-safe */\n      if (SAFE_FOR_TEMPLATES) {\n        value = stringReplace(value, MUSTACHE_EXPR, ' ');\n        value = stringReplace(value, ERB_EXPR, ' ');\n        value = stringReplace(value, TMPLIT_EXPR, ' ');\n      }\n\n      /* Is `value` valid for this attribute? */\n      const lcTag = transformCaseFunc(currentNode.nodeName);\n      if (!_isValidAttribute(lcTag, lcName, value)) {\n        continue;\n      }\n\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\n        // Prefix the value and later re-create the attribute with the sanitized value\n        value = SANITIZE_NAMED_PROPS_PREFIX + value;\n      }\n\n      /* Work around a security issue with comments inside attributes */\n      if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title)/i, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n\n      /* Handle attributes that require Trusted Types */\n      if (\n        trustedTypesPolicy &&\n        typeof trustedTypes === 'object' &&\n        typeof trustedTypes.getAttributeType === 'function'\n      ) {\n        if (namespaceURI) {\n          /* Namespaces are not yet supported, see https://bugs.chromium.org/p/chromium/issues/detail?id=1305293 */\n        } else {\n          switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n            case 'TrustedHTML': {\n              value = trustedTypesPolicy.createHTML(value);\n              break;\n            }\n\n            case 'TrustedScriptURL': {\n              value = trustedTypesPolicy.createScriptURL(value);\n              break;\n            }\n\n            default: {\n              break;\n            }\n          }\n        }\n      }\n\n      /* Handle invalid data-* attribute set by try-catching it */\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\n        if (_isClobbered(currentNode)) {\n          _forceRemove(currentNode);\n        } else {\n          arrayPop(DOMPurify.removed);\n        }\n      } catch (_) {}\n    }\n\n    /* Execute a hook if present */\n    _executeHook('afterSanitizeAttributes', currentNode, null);\n  };\n\n  /**\n   * _sanitizeShadowDOM\n   *\n   * @param  {DocumentFragment} fragment to iterate over recursively\n   */\n  const _sanitizeShadowDOM = function (fragment) {\n    let shadowNode;\n    const shadowIterator = _createIterator(fragment);\n\n    /* Execute a hook if present */\n    _executeHook('beforeSanitizeShadowDOM', fragment, null);\n\n    while ((shadowNode = shadowIterator.nextNode())) {\n      /* Execute a hook if present */\n      _executeHook('uponSanitizeShadowNode', shadowNode, null);\n      /* Sanitize tags and elements */\n      _sanitizeElements(shadowNode);\n\n      /* Check attributes next */\n      _sanitizeAttributes(shadowNode);\n\n      /* Deep shadow DOM detected */\n      if (shadowNode.content instanceof DocumentFragment) {\n        _sanitizeShadowDOM(shadowNode.content);\n      }\n    }\n\n    /* Execute a hook if present */\n    _executeHook('afterSanitizeShadowDOM', fragment, null);\n  };\n\n  /**\n   * Sanitize\n   * Public method providing core sanitation functionality\n   *\n   * @param {String|Node} dirty string or DOM node\n   * @param {Object} configuration object\n   */\n  // eslint-disable-next-line complexity\n  DOMPurify.sanitize = function (dirty, cfg = {}) {\n    let body;\n    let importedNode;\n    let currentNode;\n    let oldNode;\n    let returnNode;\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\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\n    /* Check we can run. Otherwise fall back or ignore */\n    if (!DOMPurify.isSupported) {\n      if (\n        typeof window.toStaticHTML === 'object' ||\n        typeof window.toStaticHTML === 'function'\n      ) {\n        if (typeof dirty === 'string') {\n          return window.toStaticHTML(dirty);\n        }\n\n        if (_isNode(dirty)) {\n          return window.toStaticHTML(dirty.outerHTML);\n        }\n      }\n\n      return dirty;\n    }\n\n    /* Assign config vars */\n    if (!SET_CONFIG) {\n      _parseConfig(cfg);\n    }\n\n    /* Clean up removed elements */\n    DOMPurify.removed = [];\n\n    /* Check if dirty is correctly typed for IN_PLACE */\n    if (typeof dirty === 'string') {\n      IN_PLACE = false;\n    }\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(\n            'root node is forbidden and cannot be sanitized in-place'\n          );\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 === 1 && 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 (\n        !RETURN_DOM &&\n        !SAFE_FOR_TEMPLATES &&\n        !WHOLE_DOCUMENT &&\n        // eslint-disable-next-line unicorn/prefer-includes\n        dirty.indexOf('<') === -1\n      ) {\n        return trustedTypesPolicy && RETURN_TRUSTED_TYPE\n          ? trustedTypesPolicy.createHTML(dirty)\n          : dirty;\n      }\n\n      /* Initialize the document to work on */\n      body = _initDocument(dirty);\n\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\n    /* Remove first element node (ours) if FORCE_BODY is set */\n    if (body && FORCE_BODY) {\n      _forceRemove(body.firstChild);\n    }\n\n    /* Get node iterator */\n    const nodeIterator = _createIterator(IN_PLACE ? dirty : body);\n\n    /* Now start iterating over the created document */\n    while ((currentNode = nodeIterator.nextNode())) {\n      /* Fix IE's strange behavior with manipulated textNodes #89 */\n      if (currentNode.nodeType === 3 && currentNode === oldNode) {\n        continue;\n      }\n\n      /* Sanitize tags and elements */\n      _sanitizeElements(currentNode);\n\n      /* Check attributes next */\n      _sanitizeAttributes(currentNode);\n\n      /* Shadow DOM detected, sanitize it */\n      if (currentNode.content instanceof DocumentFragment) {\n        _sanitizeShadowDOM(currentNode.content);\n      }\n\n      oldNode = currentNode;\n    }\n\n    oldNode = null;\n\n    /* If we sanitized `dirty` in-place, return it. */\n    if (IN_PLACE) {\n      return dirty;\n    }\n\n    /* Return sanitized string or DOM */\n    if (RETURN_DOM) {\n      if (RETURN_DOM_FRAGMENT) {\n        returnNode = createDocumentFragment.call(body.ownerDocument);\n\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\n      if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmod) {\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\n      return returnNode;\n    }\n\n    let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n    /* Serialize doctype if allowed */\n    if (\n      WHOLE_DOCUMENT &&\n      ALLOWED_TAGS['!doctype'] &&\n      body.ownerDocument &&\n      body.ownerDocument.doctype &&\n      body.ownerDocument.doctype.name &&\n      regExpTest(EXPRESSIONS.DOCTYPE_NAME, body.ownerDocument.doctype.name)\n    ) {\n      serializedHTML =\n        '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n    }\n\n    /* Sanitize final string template-safe */\n    if (SAFE_FOR_TEMPLATES) {\n      serializedHTML = stringReplace(serializedHTML, MUSTACHE_EXPR, ' ');\n      serializedHTML = stringReplace(serializedHTML, ERB_EXPR, ' ');\n      serializedHTML = stringReplace(serializedHTML, TMPLIT_EXPR, ' ');\n    }\n\n    return trustedTypesPolicy && RETURN_TRUSTED_TYPE\n      ? trustedTypesPolicy.createHTML(serializedHTML)\n      : serializedHTML;\n  };\n\n  /**\n   * Public method to set the configuration once\n   * setConfig\n   *\n   * @param {Object} cfg configuration object\n   */\n  DOMPurify.setConfig = function (cfg) {\n    _parseConfig(cfg);\n    SET_CONFIG = true;\n  };\n\n  /**\n   * Public method to remove the configuration\n   * clearConfig\n   *\n   */\n  DOMPurify.clearConfig = function () {\n    CONFIG = null;\n    SET_CONFIG = false;\n  };\n\n  /**\n   * Public method to check if an attribute value is valid.\n   * Uses last set config, if any. Otherwise, uses config defaults.\n   * isValidAttribute\n   *\n   * @param  {string} tag Tag name of containing element.\n   * @param  {string} attr Attribute name.\n   * @param  {string} value Attribute value.\n   * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n   */\n  DOMPurify.isValidAttribute = function (tag, attr, value) {\n    /* Initialize shared config vars if necessary. */\n    if (!CONFIG) {\n      _parseConfig({});\n    }\n\n    const lcTag = transformCaseFunc(tag);\n    const lcName = transformCaseFunc(attr);\n    return _isValidAttribute(lcTag, lcName, value);\n  };\n\n  /**\n   * AddHook\n   * Public method to add DOMPurify hooks\n   *\n   * @param {String} entryPoint entry point for the hook to add\n   * @param {Function} hookFunction function to execute\n   */\n  DOMPurify.addHook = function (entryPoint, hookFunction) {\n    if (typeof hookFunction !== 'function') {\n      return;\n    }\n\n    hooks[entryPoint] = hooks[entryPoint] || [];\n    arrayPush(hooks[entryPoint], hookFunction);\n  };\n\n  /**\n   * RemoveHook\n   * Public method to remove a DOMPurify hook at a given entryPoint\n   * (pops it from the stack of hooks if more are present)\n   *\n   * @param {String} entryPoint entry point for the hook to remove\n   * @return {Function} removed(popped) hook\n   */\n  DOMPurify.removeHook = function (entryPoint) {\n    if (hooks[entryPoint]) {\n      return arrayPop(hooks[entryPoint]);\n    }\n  };\n\n  /**\n   * RemoveHooks\n   * Public method to remove all DOMPurify hooks at a given entryPoint\n   *\n   * @param  {String} entryPoint entry point for the hooks to remove\n   */\n  DOMPurify.removeHooks = function (entryPoint) {\n    if (hooks[entryPoint]) {\n      hooks[entryPoint] = [];\n    }\n  };\n\n  /**\n   * RemoveAllHooks\n   * Public method to remove all DOMPurify hooks\n   *\n   */\n  DOMPurify.removeAllHooks = function () {\n    hooks = {};\n  };\n\n  return DOMPurify;\n}\n\nexport default createDOMPurify();\n","/* eslint-disable ember/no-get, ember/no-new-mixins, prettier/prettier */\nimport Mixin from '@ember/object/mixin';\n\n/**\n * Wraps the native drop events to make your components droppable.\n *\n * @mixin Droppable\n */\n\nvar Droppable = Mixin.create({\n  _currentDrag: null,\n  classNameBindings: [\n    'accepts-drag',\n    'self-drop'\n  ],\n\n  /**\n   * Read-only className property that is set to true when the component is\n   * receiving a valid drag event. You can style your element with\n   * `.accepts-drag`.\n   *\n   * @property accepts-drag\n   * @private\n   */\n\n  'accepts-drag': false,\n\n  /**\n   * Will be true when the component is dragged over itself. Can use\n   * `.self-drop` in your css to style (or more common, unstyle) the component.\n   *\n   * @property self-drop\n   * @private\n   */\n\n  'self-drop': false,\n\n /**\n   * Validates drag events. Override this to restrict which data types your\n   * component accepts.\n   *\n   * Example:\n   *\n   * ```js\n   * validateDragEvent(event) {\n   *   return event.dataTransfer.types.contains('text/x-foo');\n   * }\n   * ```\n   *\n   * @method validateDragEvent\n   * @public\n   */\n\n  validateDragEvent() {\n    return true;\n  },\n\n  /**\n   * Called when a valid drag event is dropped on the component. Override to\n   * actually make something happen.\n   *\n   * ```js\n   * acceptDrop: function(event) {\n   *   var data = event.dataTransfer.getData('text/plain');\n   *   doSomethingWith(data);\n   * }\n   * ```\n   *\n   * @method acceptDrop\n   * @public\n   */\n\n  acceptDrop() {},\n\n  handleDragOver() {},\n  handleDragOut() {},\n\n  /**\n   * @method dragOver\n   * @private\n   */\n\n  dragOver(event) {\n    if (this._droppableIsDraggable(event)) {\n      this.set('self-drop', true);\n    }\n    if (this.get('accepts-drag')) {\n      return this._allowDrop(event);\n    }\n    if (this.validateDragEvent(event)) {\n      this.set('accepts-drag', true);\n      this._allowDrop(event);\n    } else {\n      this._resetDroppability();\n    }\n  },\n\n  /**\n   * @method dragEnter\n   * @private\n   */\n\n  dragEnter() {\n    return false;\n  },\n\n  /**\n   * @method drop\n   * @private\n   */\n\n  drop(event) {\n    // have to validate on drop because you may have nested sortables the\n    // parent allows the drop but the child receives it, revalidating allows\n    // the event to bubble up to the parent to handle it\n    if (!this.validateDragEvent(event)) {\n      return;\n    }\n    this.acceptDrop(event);\n    this._resetDroppability();\n    // TODO: might not need this? I can't remember why its here\n    event.stopPropagation();\n    return false;\n  },\n\n  /**\n   * Tells the browser we have an acceptable drag event.\n   *\n   * @method _allowDrop\n   * @private\n   */\n\n  _allowDrop(event) {\n    this.handleDragOver(event);\n    event.stopPropagation();\n    event.preventDefault();\n    return false;\n  },\n\n  /**\n   * We want to be able to know if the current drop target is the original\n   * element being dragged or a child of it.\n   *\n   * @method _droppableIsDraggable\n   * @private\n   */\n\n  _droppableIsDraggable(event) {\n    return Droppable._currentDrag && (\n      Droppable._currentDrag === event.target ||\n      Droppable._currentDrag.contains(event.target)\n    );\n  },\n\n  /**\n   * @method _resetDroppability\n   * @private\n   */\n\n  _resetDroppability(event) {\n    this.handleDragOut(event);\n    this.set('accepts-drag', false);\n    this.set('self-drop', false);\n  },\n\n  dragLeave() {\n   this._resetDroppability();\n  },\n\n  // Need to track this so we can determine `self-drop`.\n  // It's on `Droppable` so we can test :\\\n  dragStart(event) {\n    this.set('_currentDrag', event.target);\n  }\n\n});\n\nexport default Droppable;\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if @enableClicking}}\\n  <a href=\\\"#\\\" {{fn this.acceptForDrop}}>\\n    {{yield}}\\n  </a>\\n{{else}}\\n  {{yield}}\\n{{/if}}\\n\")","/* eslint-disable ember/no-actions-hash, ember/no-classic-classes, ember/no-classic-components, ember/no-component-lifecycle-hooks, ember/no-get, ember/no-mixins, ember/require-tagless-components, prettier/prettier */\nimport { getOwner } from '@ember/application';\nimport Component from '@ember/component';\nimport Droppable from '../mixins/droppable.js';\n\nexport default Component.extend(Droppable, {\n  classNameBindings: ['overrideClass'],\n  overrideClass: 'draggable-object-target',\n  isOver: false,\n\n  // idea taken from https://github.com/emberjs/rfcs/blob/master/text/0680-implicit-injection-deprecation.md#stage-1\n  get coordinator() {\n    if (this._coordinator === undefined) {\n      this._coordinator = getOwner(this).lookup('drag:coordinator');\n    }\n\n    return this._coordinator;\n  },\n  set coordinator(value) {\n    this._coordinator = value;\n  },\n\n  handlePayload(payload, event) {\n    let obj = this.get('coordinator').getObject(payload,{target: this});\n    this.get('action')(obj, { target: this, event: event });\n  },\n\n  handleDrop(event) {\n    let dataTransfer = event.dataTransfer;\n    let payload = dataTransfer.getData(\"Text\");\n    if (payload === '') { return; }\n    this.handlePayload(payload, event);\n  },\n\n  acceptDrop(event) {\n    this.handleDrop(event);\n    //Firefox is navigating to a url on drop sometimes, this prevents that from happening\n    event.preventDefault();\n  },\n\n  handleDragOver(event) {\n    if (!this.get('isOver')) {\n      //only send once per hover event\n      this.set('isOver', true);\n      if(this.get('dragOverAction')) {\n        this.get('dragOverAction')(event);\n      }\n    }\n  },\n\n  handleDragOut(event) {\n    this.set('isOver', false);\n    if(this.get('dragOutAction')) {\n      this.get('dragOutAction')(event);\n    }\n  },\n\n  click(e) {\n    let onClick = this.get('onClick');\n    if (onClick) {\n      onClick(e);\n    }\n  },\n\n  mouseDown(e) {\n    let mouseDown = this.get('onMouseDown');\n    if (mouseDown) {\n      mouseDown(e);\n    }\n  },\n\n  handleMouseEnter(e) {\n    let mouseEnter = this.get('onMouseEnter');\n    if (mouseEnter) {\n      mouseEnter(e);\n    }\n  },\n\n  didInsertElement() {\n      this._super(...arguments);\n      this.element.addEventListener('mouseenter', this.boundHandleMouseEnter);\n  },\n\n  willDestroyElement() {\n      this._super(...arguments);\n      this.element.removeEventListener('mouseenter', this.boundHandleMouseEnter);\n  },\n\n  actions: {\n    acceptForDrop() {\n      let hashId = this.get('coordinator.clickedId');\n      this.handlePayload(hashId);\n    }\n  },\n\n  init() {\n    this._super(...arguments);\n\n    this.set('boundHandleMouseEnter', this.handleMouseEnter.bind(this));\n  }\n});\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if @enableClicking}}\\n  <a href=\\\"#\\\" {{fn this.selectForDrag}}>\\n    {{yield}}\\n  </a>\\n{{else}}\\n  {{yield}}\\n{{/if}}\")","/* eslint-disable ember/no-actions-hash, ember/no-classic-classes, ember/no-classic-components, ember/no-component-lifecycle-hooks, ember/no-get, ember/no-incorrect-calls-with-inline-anonymous-functions, ember/require-super-in-lifecycle-hooks, ember/require-tagless-components, import/extensions, prettier/prettier */\nimport { getOwner } from '@ember/application';\nimport Component from '@ember/component';\nimport { inject as service} from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { computed } from '@ember/object';\nimport { scheduleOnce, next } from '@ember/runloop';\nimport { set } from '@ember/object';\nimport { wrapper } from '../utils/proxy-unproxy-objects';\n\nexport default Component.extend({\n  dragCoordinator: service('drag-coordinator'),\n  overrideClass: 'draggable-object',\n  classNameBindings: [':js-draggableObject','isDraggingObject:is-dragging-object:', 'overrideClass'],\n  attributeBindings: ['dragReady:draggable'],\n  isDraggable: true,\n  dragReady: true,\n  isSortable: false,\n  sortingScope: 'drag-objects',\n  title: alias('content.title'),\n\n  // idea taken from https://github.com/emberjs/rfcs/blob/master/text/0680-implicit-injection-deprecation.md#stage-1\n  get coordinator() {\n    if (this._coordinator === undefined) {\n      this._coordinator = getOwner(this).lookup('drag:coordinator');\n    }\n\n    return this._coordinator;\n  },\n  set coordinator(value) {\n    this._coordinator = value;\n  },\n\n  draggable: computed('isDraggable', function() {\n    let isDraggable = this.get('isDraggable');\n\n    return isDraggable || null;\n  }),\n\n  proxyContent: computed('content', function() {\n    return wrapper(this.get('content'));\n  }),\n\n\n  init() {\n    this._super(...arguments);\n    if (this.get('dragHandle')) {\n      this.set('dragReady', false);\n    }\n\n    this.mouseOverHandler = function() {\n      this.set('dragReady', true);\n    }.bind(this);\n    this.mouseOutHandler = function() {\n      this.set('dragReady', false);\n    }.bind(this);\n\n  },\n\n  didInsertElement() {\n    scheduleOnce('afterRender', () => {\n      //if there is a drag handle watch the mouse up and down events to trigger if drag is allowed\n      let dragHandle = this.get('dragHandle');\n      if (dragHandle) {\n        //only start when drag handle is activated\n        if (this.element.querySelector(dragHandle)) {\n          this.element.querySelector(dragHandle).addEventListener('mouseover', this.mouseOverHandler);\n          this.element.querySelector(dragHandle).addEventListener('mouseout', this.mouseOutHandler);\n        }\n      }\n    });\n  },\n\n  willDestroyElement(){\n    let dragHandle = this.get('dragHandle');\n    if (this.element.querySelector(dragHandle)) {\n      this.element.querySelector(dragHandle).removeEventListener('mouseover', this.mouseOverHandler);\n      this.element.querySelector(dragHandle).removeEventListener('mouseout', this.mouseOutHandler);\n    }\n  },\n\n\n  dragStart(event) {\n    if (!this.get('isDraggable') || !this.get('dragReady')) {\n      event.preventDefault();\n      return;\n    }\n\n    let dataTransfer = event.dataTransfer;\n\n    let obj = this.get('proxyContent');\n    let id = null;\n    let coordinator = this.get('coordinator');\n    if (coordinator) {\n       id = coordinator.setObject(obj, { source: this });\n    }\n\n    dataTransfer.setData('Text', id);\n\n    if (obj && typeof obj === 'object') {\n      set(obj, 'isDraggingObject', true);\n    }\n    this.set('isDraggingObject', true);\n    if (!this.get('dragCoordinator.enableSort') && this.get('dragCoordinator.sortComponentController')) {\n      //disable drag if sorting is disabled this is not used for regular\n      event.preventDefault();\n      return;\n    } else {\n      next(()=> {\n        this.dragStartHook(event);\n      });\n      this.get('dragCoordinator').dragStarted(obj, event, this);\n    }\n\n    if( this.get('dragStartAction')) {\n      this.get('dragStartAction')(obj, event);\n    }\n\n    if (this.get('isSortable') && this.get('draggingSortItem')) {\n      this.get('draggingSortItem')(obj, event);\n    }\n  },\n\n  dragEnd(event) {\n    if (!this.get('isDraggingObject')) {\n      return;\n    }\n\n    let obj = this.get('proxyContent');\n\n    if (obj && typeof obj === 'object') {\n      set(obj, 'isDraggingObject', false);\n    }\n    this.set('isDraggingObject', false);\n    this.dragEndHook(event);\n    this.get('dragCoordinator').dragEnded();\n    if(this.get('dragEndAction')) {\n      this.get('dragEndAction')(obj, event);\n    }\n    if (this.get('dragHandle')) {\n      this.set('dragReady', false);\n    }\n  },\n\n  drag(event) {\n    if(this.get('dragMoveAction')) {\n      this.get('dragMoveAction')(event);\n    }\n  },\n\n  dragOver(event) {\n   if (this.get('isSortable')) {\n     this.get('dragCoordinator').draggingOver(event, this);\n   }\n    return false;\n  },\n\n  dragStartHook(event) {\n    event.target.style.opacity = '0.5';\n  },\n\n  dragEndHook(event) {\n    event.target.style.opacity = '1';\n  },\n\n  drop(event) {\n    //Firefox is navigating to a url on drop, this prevents that from happening\n    event.preventDefault();\n  },\n\n  actions: {\n    selectForDrag() {\n      let obj = this.get('proxyContent');\n      let hashId = this.get('coordinator').setObject(obj, { source: this });\n      this.set('coordinator.clickedId', hashId);\n    }\n  }\n});\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{! template-lint-disable no-yield-only }}\\n{{yield}}\")","/* eslint-disable ember/no-classic-classes, ember/no-classic-components, ember/no-component-lifecycle-hooks, ember/no-get, ember/require-super-in-lifecycle-hooks, ember/require-tagless-components, prettier/prettier */\nimport Component from '@ember/component';\nimport { inject as service } from '@ember/service';\nimport { A } from '@ember/array';\n\nexport default Component.extend( {\n  dragCoordinator: service('drag-coordinator'),\n  overrideClass: 'sortable-objects',\n  classNameBindings: ['overrideClass'],\n  enableSort: true,\n  useSwap: true,\n  inPlace: false,\n  sortingScope: 'drag-objects',\n  sortableObjectList: A(),\n\n  init() {\n    this._super(...arguments);\n    if (this.get('enableSort')) {\n      this.get('dragCoordinator').pushSortComponent(this);\n    }\n  },\n\n  willDestroyElement() {\n    if (this.get('enableSort')) {\n      this.get('dragCoordinator').removeSortComponent(this);\n    }\n  },\n\n  dragStart(event) {\n    event.stopPropagation();\n    if (!this.get('enableSort')) {\n      return false;\n    }\n    this.set('dragCoordinator.sortComponentController', this);\n  },\n\n  dragEnter(event) {\n    //needed so drop event will fire\n    event.stopPropagation();\n    return false;\n  },\n\n  dragOver(event) {\n    //needed so drop event will fire\n    event.stopPropagation();\n    return false;\n  },\n\n  drop(event) {\n    event.stopPropagation();\n    event.preventDefault();\n    this.set('dragCoordinator.sortComponentController', undefined);\n    if (this.get('enableSort') && this.get('sortEndAction')) {\n      this.get('sortEndAction')(event);\n    }\n  }\n});\n","/* eslint-disable ember/no-classic-classes, ember/no-get, prettier/prettier */\nimport EmberObject from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { A } from '@ember/array';\n\nexport default EmberObject.extend({\n  contentLength: 0,\n  length: alias('contentLength'),\n\n  init: function() {\n    this._super();\n    this.content = {};\n  },\n\n  add: function(obj) {\n    var id = this.generateId();\n    this.get('content')[id] = obj;\n    this.incrementProperty(\"contentLength\");\n    return id;\n  },\n\n  getObj: function(key) {\n    var res = this.get('content')[key];\n    if (!res) {\n      throw new Error(\"no obj for key \"+key);\n    }\n    return res;\n  },\n\n  generateId: function() {\n    var num = Math.random() * 1000000000000.0;\n    num = parseInt(num);\n    num = \"\"+num;\n    return num;\n  },\n\n  keys: function() {\n    var res = [];\n    for (var key in this.get('content')) {\n      res.push(key);\n    }\n    return A(res);\n  },\n});\n","/* eslint-disable ember/no-classic-classes, ember/no-get, import/extensions, prettier/prettier */\nimport EmberObject from '@ember/object';\nimport Evented from '@ember/object/evented';\nimport { computed } from '@ember/object';\nimport ObjHash from './obj-hash';\nimport { unwrapper } from '../utils/proxy-unproxy-objects';\n\nexport default EmberObject.extend(Evented, {\n  objectMap: computed(function() {\n    return ObjHash.create();\n  }),\n\n  getObject: function(id,ops) {\n    ops = ops || {};\n    var payload = this.get('objectMap').getObj(id);\n\n    if (payload.ops.source && !payload.ops.source.isDestroying && !payload.ops.source.isDestroyed) {\n      const action = payload.ops.source['action'];\n      // Support when action is a function\n      if (typeof action === 'function') {\n        action(payload.obj)\n      }\n\n      // Support when action is a string\n      if (typeof action === 'string' && typeof payload.ops.source.target[action] === 'function') {\n        payload.ops.source.target[action](payload.obj);\n      }\n    }\n\n    if (payload.ops.target && !payload.ops.target.isDestroying && !payload.ops.target.isDestroyed) {\n      const action = payload.ops.target['action'];\n      // Support when action is a function\n      if (typeof action === 'function') {\n        action(payload.obj)\n      }\n\n      // Support when action is a string\n      if (typeof action === 'string' && typeof payload.ops.target.source[action] === 'function') {\n        payload.ops.target.source[action](payload.obj);\n      }\n    }\n\n    this.trigger(\"objectMoved\", {obj: unwrapper(payload.obj), source: payload.ops.source, target: ops.target});\n\n    return unwrapper(payload.obj);\n  },\n\n  setObject: function(obj,ops) {\n    ops = ops || {};\n    return this.get('objectMap').add({obj: obj, ops: ops});\n  }\n});\n","/* eslint-disable prettier/prettier */\nimport Coordinator from '../models/coordinator.js';\n\nexport default {\n  name: \"setup coordinator\",\n\n  initialize: function() {\n    let app = arguments[1] || arguments[0];\n    app.register(\"drag:coordinator\",Coordinator);\n  }\n};\n","/* eslint-disable ember/no-classic-classes, ember/no-get, prettier/prettier */\nimport Service from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { A } from '@ember/array';\nimport { isEqual } from '@ember/utils';\n\n\nfunction indexOf(items, a) {\n  return items.findIndex(function (element) {\n    return isEqual(element, a);\n  });\n}\n\nfunction swapInPlace(items, a, b) {\n  const aPos = indexOf(items, a);\n  const bPos = indexOf(items, b);\n\n  items.replace(aPos, 1, [ b ]);\n  items.replace(bPos, 1, [ a ]);\n}\n\nfunction shiftInPlace(items, a, b) {\n  const aPos = indexOf(items, a);\n  const bPos = indexOf(items, b);\n\n  items.removeAt(aPos);\n  items.insertAt(bPos, a);\n}\n\nexport default Service.extend({\n  sortComponentController: null,\n  currentDragObject: null,\n  currentDragEvent: null,\n  currentDragItem: null,\n  currentOffsetItem: null,\n  isMoving: false,\n  lastEvent: null,\n\n  init() {\n    this._super(...arguments);\n    // Use object for sortComponents so that we can scope per sortingScope\n    this.set('sortComponents', {});\n  },\n\n  arrayList: alias('sortComponentController.sortableObjectList'),\n  enableSort: alias('sortComponentController.enableSort'),\n  useSwap: alias('sortComponentController.useSwap'),\n  inPlace: alias('sortComponentController.inPlace'),\n\n  pushSortComponent(component) {\n    const sortingScope = component.get('sortingScope');\n    if (!this.get('sortComponents')[sortingScope]) {\n      this.get('sortComponents')[sortingScope] = A();\n    }\n    this.get('sortComponents')[sortingScope].pushObject(component);\n  },\n\n  removeSortComponent(component) {\n    const sortingScope = component.get('sortingScope');\n    this.get('sortComponents')[sortingScope].removeObject(component);\n  },\n\n  dragStarted(object, event, emberObject) {\n    this.set('currentDragObject', object);\n    this.set('currentDragEvent', event);\n    this.set('currentDragItem', emberObject);\n    event.dataTransfer.effectAllowed = 'move';\n  },\n\n  dragEnded() {\n    this.set('currentDragObject', null);\n    this.set('currentDragEvent', null);\n    this.set('currentDragItem', null);\n    this.set('currentOffsetItem', null);\n  },\n\n  draggingOver(event, emberObject) {\n    const currentOffsetItem = this.get('currentOffsetItem');\n    const pos = this.relativeClientPosition(emberObject.element, event);\n    const hasSameSortingScope = this.get('currentDragItem.sortingScope') === emberObject.get('sortingScope');\n    let moveDirections = [];\n\n    if (!this.get('lastEvent')) {\n      this.set('lastEvent', event);\n    }\n\n    if (event.clientY < this.get('lastEvent').clientY) {\n      moveDirections.push('up');\n    }\n\n    if (event.clientY > this.get('lastEvent').clientY) {\n      moveDirections.push('down');\n    }\n\n    if (event.clientX < this.get('lastEvent').clientX) {\n      moveDirections.push('left');\n    }\n\n    if (event.clientX > this.get('lastEvent').clientX) {\n      moveDirections.push('right');\n    }\n\n    this.set('lastEvent', event);\n\n    if (!this.get('isMoving') && this.get('currentDragEvent')) {\n      if (event.target !== this.get('currentDragEvent').target && hasSameSortingScope) { //if not dragging over self\n        if (currentOffsetItem !== emberObject) {\n          if (pos.py < 0.67 && moveDirections.indexOf('up') >= 0 ||\n              pos.py > 0.33 && moveDirections.indexOf('down') >= 0 ||\n              pos.px < 0.67 && moveDirections.indexOf('left') >= 0 ||\n              pos.px > 0.33 && moveDirections.indexOf('right') >= 0) {\n\n            this.moveElements(emberObject);\n            this.set('currentOffsetItem', emberObject);\n          }\n        }\n      } else {\n        //reset because the node moved under the mouse with a move\n        this.set('currentOffsetItem', null);\n      }\n    }\n  },\n\n  moveObjectPositions(a, b, sortComponents) {\n    const aSortable = sortComponents.find((component) => {\n      return component.get('sortableObjectList').find((sortable) => {\n        return isEqual(sortable, a);\n      });\n    });\n    const bSortable = sortComponents.find((component) => {\n      return component.get('sortableObjectList').find((sortable) => {\n        return isEqual(sortable, b);\n      });\n    });\n    const swap = aSortable === bSortable;\n\n    if (swap) {\n\n      let list = aSortable.get('sortableObjectList');\n      if (!this.get('inPlace')) {\n        list = A(list.toArray ? list.toArray() : list.slice());\n      }\n\n      if (this.get('useSwap')) {\n        swapInPlace(list, a, b);\n      } else {\n        shiftInPlace(list, a, b);\n      }\n\n      if (!this.get('inPlace')) {\n        aSortable.set('sortableObjectList', list);\n      }\n\n    } else {\n      // Move if items are in different sortable-objects component\n      const aList = aSortable.get('sortableObjectList');\n      const bList = bSortable.get('sortableObjectList');\n\n      // Remove from aList and insert into bList\n      aList.removeObject(a);\n      bList.insertAt(indexOf(bList, b), a);\n    }\n  },\n\n  moveElements(overElement) {\n    const isEnabled = Object.keys(this.get('sortComponents')).length;\n    const draggingItem = this.get('currentDragItem');\n    const sortComponents = this.get('sortComponents')[draggingItem.get('sortingScope')];\n\n    if (!isEnabled) {\n      return;\n    }\n\n    this.moveObjectPositions(draggingItem.get('content'), overElement.get('content'), sortComponents);\n\n    sortComponents.forEach((component) => {\n      component.rerender();\n    });\n  },\n\n  relativeClientPosition(el, event) {\n    const rect = el.getBoundingClientRect();\n    const x = event.clientX - rect.left;\n    const y = event.clientY - rect.top;\n\n    return {\n      x: x,\n      y: y,\n      px: x / rect.width,\n      py: y / rect.height\n    };\n  }\n});\n","/* eslint-disable prettier/prettier */\nimport { isNone } from '@ember/utils';\nimport { guidFor } from '@ember/object/internals';\n\n/**\n * On drag action we need to provide a property `isDraggingObject` to the UI.\n * This utility is used to create a wrapper object around the object passed to the proxy function.\n * We use this wrapper to prevent the `draggable-object` from mutating the original object by appending\n * `isDraggingObject` to the content.\n * \n * This unexpected mutation causes problems when the targeted content is not prepared to handle\n * the additional property, and potentially leaks local state onto an object that likely holds state\n * for the route or application more generally.\n */\n\n/**\n * @access public\n * Returns the passed object wrapped within new object.\n * Used to proxy draggable objects.\n * @param objectToProxy Object to proxy.\n * @returns {Object} Proxy object.\n */\nexport function wrapper(objectToProxy) {\n  // If we do not have any content for the object to proxy, \n  // we do not wish to render that item.\n  if (!isNone(objectToProxy)) {\n    const guidKey = guidFor(objectToProxy);\n    return {\n      [guidKey]: objectToProxy,\n      unwrappingKey: guidKey,\n      id: objectToProxy.id\n    };\n  }\n  return null;\n}\n\n/**\n * @access public\n * Returns the content of the passed object.\n * Used to un-proxy draggable objects.\n * @param objectToUnproxy Object to un-proxy.\n * @returns {Object} Content of the proxy object.\n */\nexport function unwrapper(objectToUnproxy) {\n  if (!isNone(objectToUnproxy)) {\n    return objectToUnproxy[objectToUnproxy.unwrappingKey];\n  }\n  return null;\n}\n","'use strict';\n\nvar isArray = Array.isArray;\nvar keyList = Object.keys;\nvar hasProp = Object.prototype.hasOwnProperty;\n\nmodule.exports = function equal(a, b) {\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    var arrA = isArray(a)\n      , arrB = isArray(b)\n      , i\n      , length\n      , key;\n\n    if (arrA && arrB) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n    if (arrA != arrB) return false;\n\n    var dateA = a instanceof Date\n      , dateB = b instanceof Date;\n    if (dateA != dateB) return false;\n    if (dateA && dateB) return a.getTime() == b.getTime();\n\n    var regexpA = a instanceof RegExp\n      , regexpB = b instanceof RegExp;\n    if (regexpA != regexpB) return false;\n    if (regexpA && regexpB) return a.toString() == b.toString();\n\n    var keys = keyList(a);\n    length = keys.length;\n\n    if (length !== keyList(b).length)\n      return false;\n\n    for (i = length; i-- !== 0;)\n      if (!hasProp.call(b, keys[i])) return false;\n\n    for (i = length; i-- !== 0;) {\n      key = keys[i];\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  }\n\n  return a!==a && b!==b;\n};\n","//\n// Main\n//\n\nfunction memoize (fn, options) {\n  var cache = options && options.cache\n    ? options.cache\n    : cacheDefault\n\n  var serializer = options && options.serializer\n    ? options.serializer\n    : serializerDefault\n\n  var strategy = options && options.strategy\n    ? options.strategy\n    : strategyDefault\n\n  return strategy(fn, {\n    cache: cache,\n    serializer: serializer\n  })\n}\n\n//\n// Strategy\n//\n\nfunction isPrimitive (value) {\n  return value == null || typeof value === 'number' || typeof value === 'boolean' // || typeof value === \"string\" 'unsafe' primitive for our needs\n}\n\nfunction monadic (fn, cache, serializer, arg) {\n  var cacheKey = isPrimitive(arg) ? arg : serializer(arg)\n\n  var computedValue = cache.get(cacheKey)\n  if (typeof computedValue === 'undefined') {\n    computedValue = fn.call(this, arg)\n    cache.set(cacheKey, computedValue)\n  }\n\n  return computedValue\n}\n\nfunction variadic (fn, cache, serializer) {\n  var args = Array.prototype.slice.call(arguments, 3)\n  var cacheKey = serializer(args)\n\n  var computedValue = cache.get(cacheKey)\n  if (typeof computedValue === 'undefined') {\n    computedValue = fn.apply(this, args)\n    cache.set(cacheKey, computedValue)\n  }\n\n  return computedValue\n}\n\nfunction assemble (fn, context, strategy, cache, serialize) {\n  return strategy.bind(\n    context,\n    fn,\n    cache,\n    serialize\n  )\n}\n\nfunction strategyDefault (fn, options) {\n  var strategy = fn.length === 1 ? monadic : variadic\n\n  return assemble(\n    fn,\n    this,\n    strategy,\n    options.cache.create(),\n    options.serializer\n  )\n}\n\nfunction strategyVariadic (fn, options) {\n  var strategy = variadic\n\n  return assemble(\n    fn,\n    this,\n    strategy,\n    options.cache.create(),\n    options.serializer\n  )\n}\n\nfunction strategyMonadic (fn, options) {\n  var strategy = monadic\n\n  return assemble(\n    fn,\n    this,\n    strategy,\n    options.cache.create(),\n    options.serializer\n  )\n}\n\n//\n// Serializer\n//\n\nfunction serializerDefault () {\n  return JSON.stringify(arguments)\n}\n\n//\n// Cache\n//\n\nfunction ObjectWithoutPrototypeCache () {\n  this.cache = Object.create(null)\n}\n\nObjectWithoutPrototypeCache.prototype.has = function (key) {\n  return (key in this.cache)\n}\n\nObjectWithoutPrototypeCache.prototype.get = function (key) {\n  return this.cache[key]\n}\n\nObjectWithoutPrototypeCache.prototype.set = function (key, value) {\n  this.cache[key] = value\n}\n\nvar cacheDefault = {\n  create: function create () {\n    return new ObjectWithoutPrototypeCache()\n  }\n}\n\n//\n// API\n//\n\nmodule.exports = memoize\nmodule.exports.strategies = {\n  variadic: strategyVariadic,\n  monadic: strategyMonadic\n}\n","// fix by importing IOptions\nexport interface IOptions {\n  [key: string]: any;\n}\n\nexport default class Registry {\n  public registry: WeakMap<HTMLElement | Window, IOptions>;\n\n  constructor() {\n    this.registry = new WeakMap();\n  }\n\n  public elementExists(elem: HTMLElement | Window): boolean | null {\n    return this.registry.has(elem);\n  }\n\n  public getElement(elem: HTMLElement | Window): any {\n    return this.registry.get(elem);\n  }\n\n  /**\n   * administrator for lookup in the future\n   *\n   * @method add\n   * @param {HTMLElement | Window} element - the item to add to root element registry\n   * @param {IOption} options\n   * @param {IOption.root} [root] - contains optional root e.g. window, container div, etc\n   * @param {IOption.watcher} [observer] - optional\n   * @public\n   */\n  public addElement(element: HTMLElement | Window, options?: IOptions): void {\n    if (!element) {\n      return;\n    }\n\n    this.registry.set(element, options || {});\n  }\n\n  /**\n   * @method remove\n   * @param {HTMLElement|Window} target\n   * @public\n   */\n  public removeElement(target: HTMLElement | Window): void {\n    this.registry.delete(target);\n  }\n\n  /**\n   * reset weak map\n   *\n   * @method destroy\n   * @public\n   */\n  public destroyRegistry(): void {\n    this.registry = new WeakMap();\n  }\n}\n","import Registry from './registry';\n\nconst noop = () => {};\n\nexport enum CallbackType {\n  enter = 'enter',\n  exit = 'exit'\n}\n\nexport default abstract class Notifications {\n  private registry: Registry;\n\n  constructor() {\n    this.registry = new Registry();\n  }\n\n  /**\n   * Adds an EventListener as a callback for an event key.\n   * @param type 'enter' or 'exit'\n   * @param key The key of the event\n   * @param callback The callback function to invoke when the event occurs\n   */\n  public addCallback(\n    type: CallbackType,\n    element: HTMLElement | Window,\n    callback: (data?: any) => void\n  ): void {\n    let entry;\n    if (type === CallbackType.enter) {\n      entry = { [CallbackType.enter]: callback };\n    } else {\n      entry = { [CallbackType.exit]: callback };\n    }\n\n    this.registry.addElement(\n      element,\n      Object.assign({}, this.registry.getElement(element), entry)\n    );\n  }\n\n  /**\n   * @hidden\n   * Executes registered callbacks for key.\n   * @param type\n   * @param element\n   * @param data\n   */\n  public dispatchCallback(\n    type: CallbackType,\n    element: HTMLElement | Window,\n    data?: any\n  ): void {\n    if (type === CallbackType.enter) {\n      const { enter = noop } = this.registry.getElement(element);\n      enter(data);\n    } else {\n      // no element in WeakMap possible because element may be removed from DOM by the time we get here\n      const found = this.registry.getElement(element);\n      if (found && found.exit) {\n        found.exit(data);\n      }\n    }\n  }\n}\n","export var TYPE;\n(function (TYPE) {\n    /**\n     * Raw text\n     */\n    TYPE[TYPE[\"literal\"] = 0] = \"literal\";\n    /**\n     * Variable w/o any format, e.g `var` in `this is a {var}`\n     */\n    TYPE[TYPE[\"argument\"] = 1] = \"argument\";\n    /**\n     * Variable w/ number format\n     */\n    TYPE[TYPE[\"number\"] = 2] = \"number\";\n    /**\n     * Variable w/ date format\n     */\n    TYPE[TYPE[\"date\"] = 3] = \"date\";\n    /**\n     * Variable w/ time format\n     */\n    TYPE[TYPE[\"time\"] = 4] = \"time\";\n    /**\n     * Variable w/ select format\n     */\n    TYPE[TYPE[\"select\"] = 5] = \"select\";\n    /**\n     * Variable w/ plural format\n     */\n    TYPE[TYPE[\"plural\"] = 6] = \"plural\";\n    /**\n     * Only possible within plural argument.\n     * This is the `#` symbol that will be substituted with the count.\n     */\n    TYPE[TYPE[\"pound\"] = 7] = \"pound\";\n    /**\n     * XML-like tag\n     */\n    TYPE[TYPE[\"tag\"] = 8] = \"tag\";\n})(TYPE || (TYPE = {}));\nexport var SKELETON_TYPE;\n(function (SKELETON_TYPE) {\n    SKELETON_TYPE[SKELETON_TYPE[\"number\"] = 0] = \"number\";\n    SKELETON_TYPE[SKELETON_TYPE[\"dateTime\"] = 1] = \"dateTime\";\n})(SKELETON_TYPE || (SKELETON_TYPE = {}));\n/**\n * Type Guards\n */\nexport function isLiteralElement(el) {\n    return el.type === TYPE.literal;\n}\nexport function isArgumentElement(el) {\n    return el.type === TYPE.argument;\n}\nexport function isNumberElement(el) {\n    return el.type === TYPE.number;\n}\nexport function isDateElement(el) {\n    return el.type === TYPE.date;\n}\nexport function isTimeElement(el) {\n    return el.type === TYPE.time;\n}\nexport function isSelectElement(el) {\n    return el.type === TYPE.select;\n}\nexport function isPluralElement(el) {\n    return el.type === TYPE.plural;\n}\nexport function isPoundElement(el) {\n    return el.type === TYPE.pound;\n}\nexport function isTagElement(el) {\n    return el.type === TYPE.tag;\n}\nexport function isNumberSkeleton(el) {\n    return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.number);\n}\nexport function isDateTimeSkeleton(el) {\n    return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.dateTime);\n}\nexport function createLiteralElement(value) {\n    return {\n        type: TYPE.literal,\n        value: value,\n    };\n}\nexport function createNumberElement(value, style) {\n    return {\n        type: TYPE.number,\n        value: value,\n        style: style,\n    };\n}\n","import { __assign } from \"tslib\";\n/**\n * https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * Credit: https://github.com/caridy/intl-datetimeformat-pattern/blob/master/index.js\n * with some tweaks\n */\nvar DATE_TIME_REGEX = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;\n/**\n * Parse Date time skeleton into Intl.DateTimeFormatOptions\n * Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * @public\n * @param skeleton skeleton string\n */\nexport function parseDateTimeSkeleton(skeleton) {\n    var result = {};\n    skeleton.replace(DATE_TIME_REGEX, function (match) {\n        var len = match.length;\n        switch (match[0]) {\n            // Era\n            case 'G':\n                result.era = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';\n                break;\n            // Year\n            case 'y':\n                result.year = len === 2 ? '2-digit' : 'numeric';\n                break;\n            case 'Y':\n            case 'u':\n            case 'U':\n            case 'r':\n                throw new RangeError('`Y/u/U/r` (year) patterns are not supported, use `y` instead');\n            // Quarter\n            case 'q':\n            case 'Q':\n                throw new RangeError('`q/Q` (quarter) patterns are not supported');\n            // Month\n            case 'M':\n            case 'L':\n                result.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][len - 1];\n                break;\n            // Week\n            case 'w':\n            case 'W':\n                throw new RangeError('`w/W` (week) patterns are not supported');\n            case 'd':\n                result.day = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'D':\n            case 'F':\n            case 'g':\n                throw new RangeError('`D/F/g` (day) patterns are not supported, use `d` instead');\n            // Weekday\n            case 'E':\n                result.weekday = len === 4 ? 'short' : len === 5 ? 'narrow' : 'short';\n                break;\n            case 'e':\n                if (len < 4) {\n                    throw new RangeError('`e..eee` (weekday) patterns are not supported');\n                }\n                result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n                break;\n            case 'c':\n                if (len < 4) {\n                    throw new RangeError('`c..ccc` (weekday) patterns are not supported');\n                }\n                result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n                break;\n            // Period\n            case 'a': // AM, PM\n                result.hour12 = true;\n                break;\n            case 'b': // am, pm, noon, midnight\n            case 'B': // flexible day periods\n                throw new RangeError('`b/B` (period) patterns are not supported, use `a` instead');\n            // Hour\n            case 'h':\n                result.hourCycle = 'h12';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'H':\n                result.hourCycle = 'h23';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'K':\n                result.hourCycle = 'h11';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'k':\n                result.hourCycle = 'h24';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'j':\n            case 'J':\n            case 'C':\n                throw new RangeError('`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead');\n            // Minute\n            case 'm':\n                result.minute = ['numeric', '2-digit'][len - 1];\n                break;\n            // Second\n            case 's':\n                result.second = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'S':\n            case 'A':\n                throw new RangeError('`S/A` (second) patterns are not supported, use `s` instead');\n            // Zone\n            case 'z': // 1..3, 4: specific non-location format\n                result.timeZoneName = len < 4 ? 'short' : 'long';\n                break;\n            case 'Z': // 1..3, 4, 5: The ISO8601 varios formats\n            case 'O': // 1, 4: miliseconds in day short, long\n            case 'v': // 1, 4: generic non-location format\n            case 'V': // 1, 2, 3, 4: time zone ID or city\n            case 'X': // 1, 2, 3, 4: The ISO8601 varios formats\n            case 'x': // 1, 2, 3, 4: The ISO8601 varios formats\n                throw new RangeError('`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead');\n        }\n        return '';\n    });\n    return result;\n}\nfunction icuUnitToEcma(unit) {\n    return unit.replace(/^(.*?)-/, '');\n}\nvar FRACTION_PRECISION_REGEX = /^\\.(?:(0+)(\\*)?|(#+)|(0+)(#+))$/g;\nvar SIGNIFICANT_PRECISION_REGEX = /^(@+)?(\\+|#+)?$/g;\nvar INTEGER_WIDTH_REGEX = /(\\*)(0+)|(#+)(0+)|(0+)/g;\nvar CONCISE_INTEGER_WIDTH_REGEX = /^(0+)$/;\nfunction parseSignificantPrecision(str) {\n    var result = {};\n    str.replace(SIGNIFICANT_PRECISION_REGEX, function (_, g1, g2) {\n        // @@@ case\n        if (typeof g2 !== 'string') {\n            result.minimumSignificantDigits = g1.length;\n            result.maximumSignificantDigits = g1.length;\n        }\n        // @@@+ case\n        else if (g2 === '+') {\n            result.minimumSignificantDigits = g1.length;\n        }\n        // .### case\n        else if (g1[0] === '#') {\n            result.maximumSignificantDigits = g1.length;\n        }\n        // .@@## or .@@@ case\n        else {\n            result.minimumSignificantDigits = g1.length;\n            result.maximumSignificantDigits =\n                g1.length + (typeof g2 === 'string' ? g2.length : 0);\n        }\n        return '';\n    });\n    return result;\n}\nfunction parseSign(str) {\n    switch (str) {\n        case 'sign-auto':\n            return {\n                signDisplay: 'auto',\n            };\n        case 'sign-accounting':\n        case '()':\n            return {\n                currencySign: 'accounting',\n            };\n        case 'sign-always':\n        case '+!':\n            return {\n                signDisplay: 'always',\n            };\n        case 'sign-accounting-always':\n        case '()!':\n            return {\n                signDisplay: 'always',\n                currencySign: 'accounting',\n            };\n        case 'sign-except-zero':\n        case '+?':\n            return {\n                signDisplay: 'exceptZero',\n            };\n        case 'sign-accounting-except-zero':\n        case '()?':\n            return {\n                signDisplay: 'exceptZero',\n                currencySign: 'accounting',\n            };\n        case 'sign-never':\n        case '+_':\n            return {\n                signDisplay: 'never',\n            };\n    }\n}\nfunction parseConciseScientificAndEngineeringStem(stem) {\n    // Engineering\n    var result;\n    if (stem[0] === 'E' && stem[1] === 'E') {\n        result = {\n            notation: 'engineering',\n        };\n        stem = stem.slice(2);\n    }\n    else if (stem[0] === 'E') {\n        result = {\n            notation: 'scientific',\n        };\n        stem = stem.slice(1);\n    }\n    if (result) {\n        var signDisplay = stem.slice(0, 2);\n        if (signDisplay === '+!') {\n            result.signDisplay = 'always';\n            stem = stem.slice(2);\n        }\n        else if (signDisplay === '+?') {\n            result.signDisplay = 'exceptZero';\n            stem = stem.slice(2);\n        }\n        if (!CONCISE_INTEGER_WIDTH_REGEX.test(stem)) {\n            throw new Error('Malformed concise eng/scientific notation');\n        }\n        result.minimumIntegerDigits = stem.length;\n    }\n    return result;\n}\nfunction parseNotationOptions(opt) {\n    var result = {};\n    var signOpts = parseSign(opt);\n    if (signOpts) {\n        return signOpts;\n    }\n    return result;\n}\n/**\n * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options\n */\nexport function parseNumberSkeleton(tokens) {\n    var result = {};\n    for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n        var token = tokens_1[_i];\n        switch (token.stem) {\n            case 'percent':\n            case '%':\n                result.style = 'percent';\n                continue;\n            case '%x100':\n                result.style = 'percent';\n                result.scale = 100;\n                continue;\n            case 'currency':\n                result.style = 'currency';\n                result.currency = token.options[0];\n                continue;\n            case 'group-off':\n            case ',_':\n                result.useGrouping = false;\n                continue;\n            case 'precision-integer':\n            case '.':\n                result.maximumFractionDigits = 0;\n                continue;\n            case 'measure-unit':\n            case 'unit':\n                result.style = 'unit';\n                result.unit = icuUnitToEcma(token.options[0]);\n                continue;\n            case 'compact-short':\n            case 'K':\n                result.notation = 'compact';\n                result.compactDisplay = 'short';\n                continue;\n            case 'compact-long':\n            case 'KK':\n                result.notation = 'compact';\n                result.compactDisplay = 'long';\n                continue;\n            case 'scientific':\n                result = __assign(__assign(__assign({}, result), { notation: 'scientific' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n                continue;\n            case 'engineering':\n                result = __assign(__assign(__assign({}, result), { notation: 'engineering' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n                continue;\n            case 'notation-simple':\n                result.notation = 'standard';\n                continue;\n            // https://github.com/unicode-org/icu/blob/master/icu4c/source/i18n/unicode/unumberformatter.h\n            case 'unit-width-narrow':\n                result.currencyDisplay = 'narrowSymbol';\n                result.unitDisplay = 'narrow';\n                continue;\n            case 'unit-width-short':\n                result.currencyDisplay = 'code';\n                result.unitDisplay = 'short';\n                continue;\n            case 'unit-width-full-name':\n                result.currencyDisplay = 'name';\n                result.unitDisplay = 'long';\n                continue;\n            case 'unit-width-iso-code':\n                result.currencyDisplay = 'symbol';\n                continue;\n            case 'scale':\n                result.scale = parseFloat(token.options[0]);\n                continue;\n            // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n            case 'integer-width':\n                if (token.options.length > 1) {\n                    throw new RangeError('integer-width stems only accept a single optional option');\n                }\n                token.options[0].replace(INTEGER_WIDTH_REGEX, function (_, g1, g2, g3, g4, g5) {\n                    if (g1) {\n                        result.minimumIntegerDigits = g2.length;\n                    }\n                    else if (g3 && g4) {\n                        throw new Error('We currently do not support maximum integer digits');\n                    }\n                    else if (g5) {\n                        throw new Error('We currently do not support exact integer digits');\n                    }\n                    return '';\n                });\n                continue;\n        }\n        // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n        if (CONCISE_INTEGER_WIDTH_REGEX.test(token.stem)) {\n            result.minimumIntegerDigits = token.stem.length;\n            continue;\n        }\n        if (FRACTION_PRECISION_REGEX.test(token.stem)) {\n            // Precision\n            // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#fraction-precision\n            // precision-integer case\n            if (token.options.length > 1) {\n                throw new RangeError('Fraction-precision stems only accept a single optional option');\n            }\n            token.stem.replace(FRACTION_PRECISION_REGEX, function (_, g1, g2, g3, g4, g5) {\n                // .000* case (before ICU67 it was .000+)\n                if (g2 === '*') {\n                    result.minimumFractionDigits = g1.length;\n                }\n                // .### case\n                else if (g3 && g3[0] === '#') {\n                    result.maximumFractionDigits = g3.length;\n                }\n                // .00## case\n                else if (g4 && g5) {\n                    result.minimumFractionDigits = g4.length;\n                    result.maximumFractionDigits = g4.length + g5.length;\n                }\n                else {\n                    result.minimumFractionDigits = g1.length;\n                    result.maximumFractionDigits = g1.length;\n                }\n                return '';\n            });\n            if (token.options.length) {\n                result = __assign(__assign({}, result), parseSignificantPrecision(token.options[0]));\n            }\n            continue;\n        }\n        // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#significant-digits-precision\n        if (SIGNIFICANT_PRECISION_REGEX.test(token.stem)) {\n            result = __assign(__assign({}, result), parseSignificantPrecision(token.stem));\n            continue;\n        }\n        var signOpts = parseSign(token.stem);\n        if (signOpts) {\n            result = __assign(__assign({}, result), signOpts);\n        }\n        var conciseScientificAndEngineeringOpts = parseConciseScientificAndEngineeringStem(token.stem);\n        if (conciseScientificAndEngineeringOpts) {\n            result = __assign(__assign({}, result), conciseScientificAndEngineeringOpts);\n        }\n    }\n    return result;\n}\n","// @ts-nocheck\nimport { __assign, __extends } from \"tslib\";\n// @generated\nimport { SKELETON_TYPE, TYPE, } from './types';\nimport { parseDateTimeSkeleton, parseNumberSkeleton } from './skeleton';\nvar SyntaxError = /** @class */ (function (_super) {\n    __extends(SyntaxError, _super);\n    function SyntaxError(message, expected, found, location) {\n        var _this = _super.call(this) || this;\n        _this.message = message;\n        _this.expected = expected;\n        _this.found = found;\n        _this.location = location;\n        _this.name = \"SyntaxError\";\n        if (typeof Error.captureStackTrace === \"function\") {\n            Error.captureStackTrace(_this, SyntaxError);\n        }\n        return _this;\n    }\n    SyntaxError.buildMessage = function (expected, found) {\n        function hex(ch) {\n            return ch.charCodeAt(0).toString(16).toUpperCase();\n        }\n        function literalEscape(s) {\n            return s\n                .replace(/\\\\/g, \"\\\\\\\\\")\n                .replace(/\"/g, \"\\\\\\\"\")\n                .replace(/\\0/g, \"\\\\0\")\n                .replace(/\\t/g, \"\\\\t\")\n                .replace(/\\n/g, \"\\\\n\")\n                .replace(/\\r/g, \"\\\\r\")\n                .replace(/[\\x00-\\x0F]/g, function (ch) { return \"\\\\x0\" + hex(ch); })\n                .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) { return \"\\\\x\" + hex(ch); });\n        }\n        function classEscape(s) {\n            return s\n                .replace(/\\\\/g, \"\\\\\\\\\")\n                .replace(/\\]/g, \"\\\\]\")\n                .replace(/\\^/g, \"\\\\^\")\n                .replace(/-/g, \"\\\\-\")\n                .replace(/\\0/g, \"\\\\0\")\n                .replace(/\\t/g, \"\\\\t\")\n                .replace(/\\n/g, \"\\\\n\")\n                .replace(/\\r/g, \"\\\\r\")\n                .replace(/[\\x00-\\x0F]/g, function (ch) { return \"\\\\x0\" + hex(ch); })\n                .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) { return \"\\\\x\" + hex(ch); });\n        }\n        function describeExpectation(expectation) {\n            switch (expectation.type) {\n                case \"literal\":\n                    return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n                case \"class\":\n                    var escapedParts = expectation.parts.map(function (part) {\n                        return Array.isArray(part)\n                            ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n                            : classEscape(part);\n                    });\n                    return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts + \"]\";\n                case \"any\":\n                    return \"any character\";\n                case \"end\":\n                    return \"end of input\";\n                case \"other\":\n                    return expectation.description;\n            }\n        }\n        function describeExpected(expected1) {\n            var descriptions = expected1.map(describeExpectation);\n            var i;\n            var j;\n            descriptions.sort();\n            if (descriptions.length > 0) {\n                for (i = 1, j = 1; i < descriptions.length; i++) {\n                    if (descriptions[i - 1] !== descriptions[i]) {\n                        descriptions[j] = descriptions[i];\n                        j++;\n                    }\n                }\n                descriptions.length = j;\n            }\n            switch (descriptions.length) {\n                case 1:\n                    return descriptions[0];\n                case 2:\n                    return descriptions[0] + \" or \" + descriptions[1];\n                default:\n                    return descriptions.slice(0, -1).join(\", \")\n                        + \", or \"\n                        + descriptions[descriptions.length - 1];\n            }\n        }\n        function describeFound(found1) {\n            return found1 ? \"\\\"\" + literalEscape(found1) + \"\\\"\" : \"end of input\";\n        }\n        return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n    };\n    return SyntaxError;\n}(Error));\nexport { SyntaxError };\nfunction peg$parse(input, options) {\n    options = options !== undefined ? options : {};\n    var peg$FAILED = {};\n    var peg$startRuleFunctions = { start: peg$parsestart };\n    var peg$startRuleFunction = peg$parsestart;\n    var peg$c0 = function () { return !ignoreTag; };\n    var peg$c1 = function (x) { return x; };\n    var peg$c2 = function () { return ignoreTag; };\n    var peg$c3 = \"<\";\n    var peg$c4 = peg$literalExpectation(\"<\", false);\n    var peg$c5 = function (parts) {\n        return parts.join('');\n    };\n    var peg$c6 = function () { return '<'; };\n    var peg$c7 = function (messageText) {\n        return __assign({ type: TYPE.literal, value: messageText }, insertLocation());\n    };\n    var peg$c8 = \"#\";\n    var peg$c9 = peg$literalExpectation(\"#\", false);\n    var peg$c10 = function () {\n        return __assign({ type: TYPE.pound }, insertLocation());\n    };\n    var peg$c11 = peg$otherExpectation(\"tagElement\");\n    var peg$c12 = function (open, children, close) {\n        if (open !== close) {\n            error(\"Mismatch tag \\\"\" + open + \"\\\" !== \\\"\" + close + \"\\\"\", location());\n        }\n        return __assign({ type: TYPE.tag, value: open, children: children }, insertLocation());\n    };\n    var peg$c13 = \"/>\";\n    var peg$c14 = peg$literalExpectation(\"/>\", false);\n    var peg$c15 = function (value) {\n        return __assign({ type: TYPE.literal, value: value.join('') }, insertLocation());\n    };\n    var peg$c16 = \">\";\n    var peg$c17 = peg$literalExpectation(\">\", false);\n    var peg$c18 = function (tag) { return tag; };\n    var peg$c19 = \"</\";\n    var peg$c20 = peg$literalExpectation(\"</\", false);\n    var peg$c21 = peg$otherExpectation(\"argumentElement\");\n    var peg$c22 = \"{\";\n    var peg$c23 = peg$literalExpectation(\"{\", false);\n    var peg$c24 = \"}\";\n    var peg$c25 = peg$literalExpectation(\"}\", false);\n    var peg$c26 = function (value) {\n        return __assign({ type: TYPE.argument, value: value }, insertLocation());\n    };\n    var peg$c27 = peg$otherExpectation(\"numberSkeletonId\");\n    var peg$c28 = /^['\\/{}]/;\n    var peg$c29 = peg$classExpectation([\"'\", \"/\", \"{\", \"}\"], false, false);\n    var peg$c30 = peg$anyExpectation();\n    var peg$c31 = peg$otherExpectation(\"numberSkeletonTokenOption\");\n    var peg$c32 = \"/\";\n    var peg$c33 = peg$literalExpectation(\"/\", false);\n    var peg$c34 = function (option) { return option; };\n    var peg$c35 = peg$otherExpectation(\"numberSkeletonToken\");\n    var peg$c36 = function (stem, options) {\n        return { stem: stem, options: options };\n    };\n    var peg$c37 = function (tokens) {\n        return __assign({ type: SKELETON_TYPE.number, tokens: tokens, parsedOptions: shouldParseSkeleton ? parseNumberSkeleton(tokens) : {} }, insertLocation());\n    };\n    var peg$c38 = \"::\";\n    var peg$c39 = peg$literalExpectation(\"::\", false);\n    var peg$c40 = function (skeleton) { return skeleton; };\n    var peg$c41 = function () { messageCtx.push('numberArgStyle'); return true; };\n    var peg$c42 = function (style) {\n        messageCtx.pop();\n        return style.replace(/\\s*$/, '');\n    };\n    var peg$c43 = \",\";\n    var peg$c44 = peg$literalExpectation(\",\", false);\n    var peg$c45 = \"number\";\n    var peg$c46 = peg$literalExpectation(\"number\", false);\n    var peg$c47 = function (value, type, style) {\n        return __assign({ type: type === 'number' ? TYPE.number : type === 'date' ? TYPE.date : TYPE.time, style: style && style[2], value: value }, insertLocation());\n    };\n    var peg$c48 = \"'\";\n    var peg$c49 = peg$literalExpectation(\"'\", false);\n    var peg$c50 = /^[^']/;\n    var peg$c51 = peg$classExpectation([\"'\"], true, false);\n    var peg$c52 = /^[^a-zA-Z'{}]/;\n    var peg$c53 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], \"'\", \"{\", \"}\"], true, false);\n    var peg$c54 = /^[a-zA-Z]/;\n    var peg$c55 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"]], false, false);\n    var peg$c56 = function (pattern) {\n        return __assign({ type: SKELETON_TYPE.dateTime, pattern: pattern, parsedOptions: shouldParseSkeleton ? parseDateTimeSkeleton(pattern) : {} }, insertLocation());\n    };\n    var peg$c57 = function () { messageCtx.push('dateOrTimeArgStyle'); return true; };\n    var peg$c58 = \"date\";\n    var peg$c59 = peg$literalExpectation(\"date\", false);\n    var peg$c60 = \"time\";\n    var peg$c61 = peg$literalExpectation(\"time\", false);\n    var peg$c62 = \"plural\";\n    var peg$c63 = peg$literalExpectation(\"plural\", false);\n    var peg$c64 = \"selectordinal\";\n    var peg$c65 = peg$literalExpectation(\"selectordinal\", false);\n    var peg$c66 = \"offset:\";\n    var peg$c67 = peg$literalExpectation(\"offset:\", false);\n    var peg$c68 = function (value, pluralType, offset, options) {\n        return __assign({ type: TYPE.plural, pluralType: pluralType === 'plural' ? 'cardinal' : 'ordinal', value: value, offset: offset ? offset[2] : 0, options: options.reduce(function (all, _a) {\n                var id = _a.id, value = _a.value, optionLocation = _a.location;\n                if (id in all) {\n                    error(\"Duplicate option \\\"\" + id + \"\\\" in plural element: \\\"\" + text() + \"\\\"\", location());\n                }\n                all[id] = {\n                    value: value,\n                    location: optionLocation\n                };\n                return all;\n            }, {}) }, insertLocation());\n    };\n    var peg$c69 = \"select\";\n    var peg$c70 = peg$literalExpectation(\"select\", false);\n    var peg$c71 = function (value, options) {\n        return __assign({ type: TYPE.select, value: value, options: options.reduce(function (all, _a) {\n                var id = _a.id, value = _a.value, optionLocation = _a.location;\n                if (id in all) {\n                    error(\"Duplicate option \\\"\" + id + \"\\\" in select element: \\\"\" + text() + \"\\\"\", location());\n                }\n                all[id] = {\n                    value: value,\n                    location: optionLocation\n                };\n                return all;\n            }, {}) }, insertLocation());\n    };\n    var peg$c72 = \"=\";\n    var peg$c73 = peg$literalExpectation(\"=\", false);\n    var peg$c74 = function (id) { messageCtx.push('select'); return true; };\n    var peg$c75 = function (id, value) {\n        messageCtx.pop();\n        return __assign({ id: id,\n            value: value }, insertLocation());\n    };\n    var peg$c76 = function (id) { messageCtx.push('plural'); return true; };\n    var peg$c77 = function (id, value) {\n        messageCtx.pop();\n        return __assign({ id: id,\n            value: value }, insertLocation());\n    };\n    var peg$c78 = peg$otherExpectation(\"whitespace\");\n    var peg$c79 = /^[\\t-\\r \\x85\\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/;\n    var peg$c80 = peg$classExpectation([[\"\\t\", \"\\r\"], \" \", \"\\x85\", \"\\xA0\", \"\\u1680\", [\"\\u2000\", \"\\u200A\"], \"\\u2028\", \"\\u2029\", \"\\u202F\", \"\\u205F\", \"\\u3000\"], false, false);\n    var peg$c81 = peg$otherExpectation(\"syntax pattern\");\n    var peg$c82 = /^[!-\\/:-@[-\\^`{-~\\xA1-\\xA7\\xA9\\xAB\\xAC\\xAE\\xB0\\xB1\\xB6\\xBB\\xBF\\xD7\\xF7\\u2010-\\u2027\\u2030-\\u203E\\u2041-\\u2053\\u2055-\\u205E\\u2190-\\u245F\\u2500-\\u2775\\u2794-\\u2BFF\\u2E00-\\u2E7F\\u3001-\\u3003\\u3008-\\u3020\\u3030\\uFD3E\\uFD3F\\uFE45\\uFE46]/;\n    var peg$c83 = peg$classExpectation([[\"!\", \"/\"], [\":\", \"@\"], [\"[\", \"^\"], \"`\", [\"{\", \"~\"], [\"\\xA1\", \"\\xA7\"], \"\\xA9\", \"\\xAB\", \"\\xAC\", \"\\xAE\", \"\\xB0\", \"\\xB1\", \"\\xB6\", \"\\xBB\", \"\\xBF\", \"\\xD7\", \"\\xF7\", [\"\\u2010\", \"\\u2027\"], [\"\\u2030\", \"\\u203E\"], [\"\\u2041\", \"\\u2053\"], [\"\\u2055\", \"\\u205E\"], [\"\\u2190\", \"\\u245F\"], [\"\\u2500\", \"\\u2775\"], [\"\\u2794\", \"\\u2BFF\"], [\"\\u2E00\", \"\\u2E7F\"], [\"\\u3001\", \"\\u3003\"], [\"\\u3008\", \"\\u3020\"], \"\\u3030\", \"\\uFD3E\", \"\\uFD3F\", \"\\uFE45\", \"\\uFE46\"], false, false);\n    var peg$c84 = peg$otherExpectation(\"optional whitespace\");\n    var peg$c85 = peg$otherExpectation(\"number\");\n    var peg$c86 = \"-\";\n    var peg$c87 = peg$literalExpectation(\"-\", false);\n    var peg$c88 = function (negative, num) {\n        return num\n            ? negative\n                ? -num\n                : num\n            : 0;\n    };\n    var peg$c89 = peg$otherExpectation(\"apostrophe\");\n    var peg$c90 = peg$otherExpectation(\"double apostrophes\");\n    var peg$c91 = \"''\";\n    var peg$c92 = peg$literalExpectation(\"''\", false);\n    var peg$c93 = function () { return \"'\"; };\n    var peg$c94 = function (escapedChar, quotedChars) {\n        return escapedChar + quotedChars.replace(\"''\", \"'\");\n    };\n    var peg$c95 = function (x) {\n        return (x !== '<' &&\n            x !== '{' &&\n            !(isInPluralOption() && x === '#') &&\n            !(isNestedMessageText() && x === '}'));\n    };\n    var peg$c96 = \"\\n\";\n    var peg$c97 = peg$literalExpectation(\"\\n\", false);\n    var peg$c98 = function (x) {\n        return x === '<' || x === '>' || x === '{' || x === '}' || (isInPluralOption() && x === '#');\n    };\n    var peg$c99 = peg$otherExpectation(\"argNameOrNumber\");\n    var peg$c100 = peg$otherExpectation(\"validTag\");\n    var peg$c101 = peg$otherExpectation(\"argNumber\");\n    var peg$c102 = \"0\";\n    var peg$c103 = peg$literalExpectation(\"0\", false);\n    var peg$c104 = function () { return 0; };\n    var peg$c105 = /^[1-9]/;\n    var peg$c106 = peg$classExpectation([[\"1\", \"9\"]], false, false);\n    var peg$c107 = /^[0-9]/;\n    var peg$c108 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n    var peg$c109 = function (digits) {\n        return parseInt(digits.join(''), 10);\n    };\n    var peg$c110 = peg$otherExpectation(\"argName\");\n    var peg$c111 = peg$otherExpectation(\"tagName\");\n    var peg$currPos = 0;\n    var peg$savedPos = 0;\n    var peg$posDetailsCache = [{ line: 1, column: 1 }];\n    var peg$maxFailPos = 0;\n    var peg$maxFailExpected = [];\n    var peg$silentFails = 0;\n    var peg$result;\n    if (options.startRule !== undefined) {\n        if (!(options.startRule in peg$startRuleFunctions)) {\n            throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n        }\n        peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n    }\n    function text() {\n        return input.substring(peg$savedPos, peg$currPos);\n    }\n    function location() {\n        return peg$computeLocation(peg$savedPos, peg$currPos);\n    }\n    function expected(description, location1) {\n        location1 = location1 !== undefined\n            ? location1\n            : peg$computeLocation(peg$savedPos, peg$currPos);\n        throw peg$buildStructuredError([peg$otherExpectation(description)], input.substring(peg$savedPos, peg$currPos), location1);\n    }\n    function error(message, location1) {\n        location1 = location1 !== undefined\n            ? location1\n            : peg$computeLocation(peg$savedPos, peg$currPos);\n        throw peg$buildSimpleError(message, location1);\n    }\n    function peg$literalExpectation(text1, ignoreCase) {\n        return { type: \"literal\", text: text1, ignoreCase: ignoreCase };\n    }\n    function peg$classExpectation(parts, inverted, ignoreCase) {\n        return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n    }\n    function peg$anyExpectation() {\n        return { type: \"any\" };\n    }\n    function peg$endExpectation() {\n        return { type: \"end\" };\n    }\n    function peg$otherExpectation(description) {\n        return { type: \"other\", description: description };\n    }\n    function peg$computePosDetails(pos) {\n        var details = peg$posDetailsCache[pos];\n        var p;\n        if (details) {\n            return details;\n        }\n        else {\n            p = pos - 1;\n            while (!peg$posDetailsCache[p]) {\n                p--;\n            }\n            details = peg$posDetailsCache[p];\n            details = {\n                line: details.line,\n                column: details.column\n            };\n            while (p < pos) {\n                if (input.charCodeAt(p) === 10) {\n                    details.line++;\n                    details.column = 1;\n                }\n                else {\n                    details.column++;\n                }\n                p++;\n            }\n            peg$posDetailsCache[pos] = details;\n            return details;\n        }\n    }\n    function peg$computeLocation(startPos, endPos) {\n        var startPosDetails = peg$computePosDetails(startPos);\n        var endPosDetails = peg$computePosDetails(endPos);\n        return {\n            start: {\n                offset: startPos,\n                line: startPosDetails.line,\n                column: startPosDetails.column\n            },\n            end: {\n                offset: endPos,\n                line: endPosDetails.line,\n                column: endPosDetails.column\n            }\n        };\n    }\n    function peg$fail(expected1) {\n        if (peg$currPos < peg$maxFailPos) {\n            return;\n        }\n        if (peg$currPos > peg$maxFailPos) {\n            peg$maxFailPos = peg$currPos;\n            peg$maxFailExpected = [];\n        }\n        peg$maxFailExpected.push(expected1);\n    }\n    function peg$buildSimpleError(message, location1) {\n        return new SyntaxError(message, [], \"\", location1);\n    }\n    function peg$buildStructuredError(expected1, found, location1) {\n        return new SyntaxError(SyntaxError.buildMessage(expected1, found), expected1, found, location1);\n    }\n    function peg$parsestart() {\n        var s0;\n        s0 = peg$parsemessage();\n        return s0;\n    }\n    function peg$parsemessage() {\n        var s0, s1;\n        s0 = [];\n        s1 = peg$parsemessageElement();\n        while (s1 !== peg$FAILED) {\n            s0.push(s1);\n            s1 = peg$parsemessageElement();\n        }\n        return s0;\n    }\n    function peg$parsemessageElement() {\n        var s0, s1, s2;\n        s0 = peg$currPos;\n        peg$savedPos = peg$currPos;\n        s1 = peg$c0();\n        if (s1) {\n            s1 = undefined;\n        }\n        else {\n            s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parsetagElement();\n            if (s2 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c1(s2);\n                s0 = s1;\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n            s0 = peg$parseliteralElement();\n            if (s0 === peg$FAILED) {\n                s0 = peg$parseargumentElement();\n                if (s0 === peg$FAILED) {\n                    s0 = peg$parsesimpleFormatElement();\n                    if (s0 === peg$FAILED) {\n                        s0 = peg$parsepluralElement();\n                        if (s0 === peg$FAILED) {\n                            s0 = peg$parseselectElement();\n                            if (s0 === peg$FAILED) {\n                                s0 = peg$parsepoundElement();\n                            }\n                        }\n                    }\n                }\n            }\n        }\n        return s0;\n    }\n    function peg$parsemessageText() {\n        var s0, s1, s2, s3;\n        s0 = peg$currPos;\n        peg$savedPos = peg$currPos;\n        s1 = peg$c2();\n        if (s1) {\n            s1 = undefined;\n        }\n        else {\n            s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = [];\n            s3 = peg$parsedoubleApostrophes();\n            if (s3 === peg$FAILED) {\n                s3 = peg$parsequotedString();\n                if (s3 === peg$FAILED) {\n                    s3 = peg$parseunquotedString();\n                    if (s3 === peg$FAILED) {\n                        if (input.charCodeAt(peg$currPos) === 60) {\n                            s3 = peg$c3;\n                            peg$currPos++;\n                        }\n                        else {\n                            s3 = peg$FAILED;\n                            if (peg$silentFails === 0) {\n                                peg$fail(peg$c4);\n                            }\n                        }\n                    }\n                }\n            }\n            if (s3 !== peg$FAILED) {\n                while (s3 !== peg$FAILED) {\n                    s2.push(s3);\n                    s3 = peg$parsedoubleApostrophes();\n                    if (s3 === peg$FAILED) {\n                        s3 = peg$parsequotedString();\n                        if (s3 === peg$FAILED) {\n                            s3 = peg$parseunquotedString();\n                            if (s3 === peg$FAILED) {\n                                if (input.charCodeAt(peg$currPos) === 60) {\n                                    s3 = peg$c3;\n                                    peg$currPos++;\n                                }\n                                else {\n                                    s3 = peg$FAILED;\n                                    if (peg$silentFails === 0) {\n                                        peg$fail(peg$c4);\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n            else {\n                s2 = peg$FAILED;\n            }\n            if (s2 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c5(s2);\n                s0 = s1;\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            s1 = [];\n            s2 = peg$parsedoubleApostrophes();\n            if (s2 === peg$FAILED) {\n                s2 = peg$parsequotedString();\n                if (s2 === peg$FAILED) {\n                    s2 = peg$parseunquotedString();\n                    if (s2 === peg$FAILED) {\n                        s2 = peg$parsenonTagStartingAngleBracket();\n                    }\n                }\n            }\n            if (s2 !== peg$FAILED) {\n                while (s2 !== peg$FAILED) {\n                    s1.push(s2);\n                    s2 = peg$parsedoubleApostrophes();\n                    if (s2 === peg$FAILED) {\n                        s2 = peg$parsequotedString();\n                        if (s2 === peg$FAILED) {\n                            s2 = peg$parseunquotedString();\n                            if (s2 === peg$FAILED) {\n                                s2 = peg$parsenonTagStartingAngleBracket();\n                            }\n                        }\n                    }\n                }\n            }\n            else {\n                s1 = peg$FAILED;\n            }\n            if (s1 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c5(s1);\n            }\n            s0 = s1;\n        }\n        return s0;\n    }\n    function peg$parsenonTagStartingAngleBracket() {\n        var s0, s1, s2;\n        s0 = peg$currPos;\n        s1 = peg$currPos;\n        peg$silentFails++;\n        s2 = peg$parseopeningTag();\n        if (s2 === peg$FAILED) {\n            s2 = peg$parseclosingTag();\n            if (s2 === peg$FAILED) {\n                s2 = peg$parseselfClosingTag();\n            }\n        }\n        peg$silentFails--;\n        if (s2 === peg$FAILED) {\n            s1 = undefined;\n        }\n        else {\n            peg$currPos = s1;\n            s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 60) {\n                s2 = peg$c3;\n                peg$currPos++;\n            }\n            else {\n                s2 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c4);\n                }\n            }\n            if (s2 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c6();\n                s0 = s1;\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        return s0;\n    }\n    function peg$parseliteralElement() {\n        var s0, s1;\n        s0 = peg$currPos;\n        s1 = peg$parsemessageText();\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c7(s1);\n        }\n        s0 = s1;\n        return s0;\n    }\n    function peg$parsepoundElement() {\n        var s0, s1;\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 35) {\n            s1 = peg$c8;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c9);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c10();\n        }\n        s0 = s1;\n        return s0;\n    }\n    function peg$parsetagElement() {\n        var s0, s1, s2, s3;\n        peg$silentFails++;\n        s0 = peg$parseselfClosingTag();\n        if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            s1 = peg$parseopeningTag();\n            if (s1 !== peg$FAILED) {\n                s2 = peg$parsemessage();\n                if (s2 !== peg$FAILED) {\n                    s3 = peg$parseclosingTag();\n                    if (s3 !== peg$FAILED) {\n                        peg$savedPos = s0;\n                        s1 = peg$c12(s1, s2, s3);\n                        s0 = s1;\n                    }\n                    else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c11);\n            }\n        }\n        return s0;\n    }\n    function peg$parseselfClosingTag() {\n        var s0, s1, s2, s3, s4, s5;\n        s0 = peg$currPos;\n        s1 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 60) {\n            s2 = peg$c3;\n            peg$currPos++;\n        }\n        else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c4);\n            }\n        }\n        if (s2 !== peg$FAILED) {\n            s3 = peg$parsevalidTag();\n            if (s3 !== peg$FAILED) {\n                s4 = peg$parse_();\n                if (s4 !== peg$FAILED) {\n                    if (input.substr(peg$currPos, 2) === peg$c13) {\n                        s5 = peg$c13;\n                        peg$currPos += 2;\n                    }\n                    else {\n                        s5 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c14);\n                        }\n                    }\n                    if (s5 !== peg$FAILED) {\n                        s2 = [s2, s3, s4, s5];\n                        s1 = s2;\n                    }\n                    else {\n                        peg$currPos = s1;\n                        s1 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s1;\n                    s1 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s1;\n                s1 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s1;\n            s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c15(s1);\n        }\n        s0 = s1;\n        return s0;\n    }\n    function peg$parseopeningTag() {\n        var s0, s1, s2, s3;\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 60) {\n            s1 = peg$c3;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c4);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parsevalidTag();\n            if (s2 !== peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 62) {\n                    s3 = peg$c16;\n                    peg$currPos++;\n                }\n                else {\n                    s3 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c17);\n                    }\n                }\n                if (s3 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c18(s2);\n                    s0 = s1;\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        return s0;\n    }\n    function peg$parseclosingTag() {\n        var s0, s1, s2, s3;\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 2) === peg$c19) {\n            s1 = peg$c19;\n            peg$currPos += 2;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c20);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parsevalidTag();\n            if (s2 !== peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 62) {\n                    s3 = peg$c16;\n                    peg$currPos++;\n                }\n                else {\n                    s3 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c17);\n                    }\n                }\n                if (s3 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c18(s2);\n                    s0 = s1;\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        return s0;\n    }\n    function peg$parseargumentElement() {\n        var s0, s1, s2, s3, s4, s5;\n        peg$silentFails++;\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 123) {\n            s1 = peg$c22;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c23);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parse_();\n            if (s2 !== peg$FAILED) {\n                s3 = peg$parseargNameOrNumber();\n                if (s3 !== peg$FAILED) {\n                    s4 = peg$parse_();\n                    if (s4 !== peg$FAILED) {\n                        if (input.charCodeAt(peg$currPos) === 125) {\n                            s5 = peg$c24;\n                            peg$currPos++;\n                        }\n                        else {\n                            s5 = peg$FAILED;\n                            if (peg$silentFails === 0) {\n                                peg$fail(peg$c25);\n                            }\n                        }\n                        if (s5 !== peg$FAILED) {\n                            peg$savedPos = s0;\n                            s1 = peg$c26(s3);\n                            s0 = s1;\n                        }\n                        else {\n                            peg$currPos = s0;\n                            s0 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c21);\n            }\n        }\n        return s0;\n    }\n    function peg$parsenumberSkeletonId() {\n        var s0, s1, s2, s3, s4;\n        peg$silentFails++;\n        s0 = peg$currPos;\n        s1 = [];\n        s2 = peg$currPos;\n        s3 = peg$currPos;\n        peg$silentFails++;\n        s4 = peg$parsewhiteSpace();\n        if (s4 === peg$FAILED) {\n            if (peg$c28.test(input.charAt(peg$currPos))) {\n                s4 = input.charAt(peg$currPos);\n                peg$currPos++;\n            }\n            else {\n                s4 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c29);\n                }\n            }\n        }\n        peg$silentFails--;\n        if (s4 === peg$FAILED) {\n            s3 = undefined;\n        }\n        else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n        }\n        if (s3 !== peg$FAILED) {\n            if (input.length > peg$currPos) {\n                s4 = input.charAt(peg$currPos);\n                peg$currPos++;\n            }\n            else {\n                s4 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c30);\n                }\n            }\n            if (s4 !== peg$FAILED) {\n                s3 = [s3, s4];\n                s2 = s3;\n            }\n            else {\n                peg$currPos = s2;\n                s2 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s2;\n            s2 = peg$FAILED;\n        }\n        if (s2 !== peg$FAILED) {\n            while (s2 !== peg$FAILED) {\n                s1.push(s2);\n                s2 = peg$currPos;\n                s3 = peg$currPos;\n                peg$silentFails++;\n                s4 = peg$parsewhiteSpace();\n                if (s4 === peg$FAILED) {\n                    if (peg$c28.test(input.charAt(peg$currPos))) {\n                        s4 = input.charAt(peg$currPos);\n                        peg$currPos++;\n                    }\n                    else {\n                        s4 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c29);\n                        }\n                    }\n                }\n                peg$silentFails--;\n                if (s4 === peg$FAILED) {\n                    s3 = undefined;\n                }\n                else {\n                    peg$currPos = s3;\n                    s3 = peg$FAILED;\n                }\n                if (s3 !== peg$FAILED) {\n                    if (input.length > peg$currPos) {\n                        s4 = input.charAt(peg$currPos);\n                        peg$currPos++;\n                    }\n                    else {\n                        s4 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c30);\n                        }\n                    }\n                    if (s4 !== peg$FAILED) {\n                        s3 = [s3, s4];\n                        s2 = s3;\n                    }\n                    else {\n                        peg$currPos = s2;\n                        s2 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s2;\n                    s2 = peg$FAILED;\n                }\n            }\n        }\n        else {\n            s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n            s0 = input.substring(s0, peg$currPos);\n        }\n        else {\n            s0 = s1;\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c27);\n            }\n        }\n        return s0;\n    }\n    function peg$parsenumberSkeletonTokenOption() {\n        var s0, s1, s2;\n        peg$silentFails++;\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 47) {\n            s1 = peg$c32;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c33);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parsenumberSkeletonId();\n            if (s2 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c34(s2);\n                s0 = s1;\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c31);\n            }\n        }\n        return s0;\n    }\n    function peg$parsenumberSkeletonToken() {\n        var s0, s1, s2, s3, s4;\n        peg$silentFails++;\n        s0 = peg$currPos;\n        s1 = peg$parse_();\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parsenumberSkeletonId();\n            if (s2 !== peg$FAILED) {\n                s3 = [];\n                s4 = peg$parsenumberSkeletonTokenOption();\n                while (s4 !== peg$FAILED) {\n                    s3.push(s4);\n                    s4 = peg$parsenumberSkeletonTokenOption();\n                }\n                if (s3 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c36(s2, s3);\n                    s0 = s1;\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c35);\n            }\n        }\n        return s0;\n    }\n    function peg$parsenumberSkeleton() {\n        var s0, s1, s2;\n        s0 = peg$currPos;\n        s1 = [];\n        s2 = peg$parsenumberSkeletonToken();\n        if (s2 !== peg$FAILED) {\n            while (s2 !== peg$FAILED) {\n                s1.push(s2);\n                s2 = peg$parsenumberSkeletonToken();\n            }\n        }\n        else {\n            s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c37(s1);\n        }\n        s0 = s1;\n        return s0;\n    }\n    function peg$parsenumberArgStyle() {\n        var s0, s1, s2;\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 2) === peg$c38) {\n            s1 = peg$c38;\n            peg$currPos += 2;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c39);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parsenumberSkeleton();\n            if (s2 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c40(s2);\n                s0 = s1;\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            peg$savedPos = peg$currPos;\n            s1 = peg$c41();\n            if (s1) {\n                s1 = undefined;\n            }\n            else {\n                s1 = peg$FAILED;\n            }\n            if (s1 !== peg$FAILED) {\n                s2 = peg$parsemessageText();\n                if (s2 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c42(s2);\n                    s0 = s1;\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        return s0;\n    }\n    function peg$parsenumberFormatElement() {\n        var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 123) {\n            s1 = peg$c22;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c23);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parse_();\n            if (s2 !== peg$FAILED) {\n                s3 = peg$parseargNameOrNumber();\n                if (s3 !== peg$FAILED) {\n                    s4 = peg$parse_();\n                    if (s4 !== peg$FAILED) {\n                        if (input.charCodeAt(peg$currPos) === 44) {\n                            s5 = peg$c43;\n                            peg$currPos++;\n                        }\n                        else {\n                            s5 = peg$FAILED;\n                            if (peg$silentFails === 0) {\n                                peg$fail(peg$c44);\n                            }\n                        }\n                        if (s5 !== peg$FAILED) {\n                            s6 = peg$parse_();\n                            if (s6 !== peg$FAILED) {\n                                if (input.substr(peg$currPos, 6) === peg$c45) {\n                                    s7 = peg$c45;\n                                    peg$currPos += 6;\n                                }\n                                else {\n                                    s7 = peg$FAILED;\n                                    if (peg$silentFails === 0) {\n                                        peg$fail(peg$c46);\n                                    }\n                                }\n                                if (s7 !== peg$FAILED) {\n                                    s8 = peg$parse_();\n                                    if (s8 !== peg$FAILED) {\n                                        s9 = peg$currPos;\n                                        if (input.charCodeAt(peg$currPos) === 44) {\n                                            s10 = peg$c43;\n                                            peg$currPos++;\n                                        }\n                                        else {\n                                            s10 = peg$FAILED;\n                                            if (peg$silentFails === 0) {\n                                                peg$fail(peg$c44);\n                                            }\n                                        }\n                                        if (s10 !== peg$FAILED) {\n                                            s11 = peg$parse_();\n                                            if (s11 !== peg$FAILED) {\n                                                s12 = peg$parsenumberArgStyle();\n                                                if (s12 !== peg$FAILED) {\n                                                    s10 = [s10, s11, s12];\n                                                    s9 = s10;\n                                                }\n                                                else {\n                                                    peg$currPos = s9;\n                                                    s9 = peg$FAILED;\n                                                }\n                                            }\n                                            else {\n                                                peg$currPos = s9;\n                                                s9 = peg$FAILED;\n                                            }\n                                        }\n                                        else {\n                                            peg$currPos = s9;\n                                            s9 = peg$FAILED;\n                                        }\n                                        if (s9 === peg$FAILED) {\n                                            s9 = null;\n                                        }\n                                        if (s9 !== peg$FAILED) {\n                                            s10 = peg$parse_();\n                                            if (s10 !== peg$FAILED) {\n                                                if (input.charCodeAt(peg$currPos) === 125) {\n                                                    s11 = peg$c24;\n                                                    peg$currPos++;\n                                                }\n                                                else {\n                                                    s11 = peg$FAILED;\n                                                    if (peg$silentFails === 0) {\n                                                        peg$fail(peg$c25);\n                                                    }\n                                                }\n                                                if (s11 !== peg$FAILED) {\n                                                    peg$savedPos = s0;\n                                                    s1 = peg$c47(s3, s7, s9);\n                                                    s0 = s1;\n                                                }\n                                                else {\n                                                    peg$currPos = s0;\n                                                    s0 = peg$FAILED;\n                                                }\n                                            }\n                                            else {\n                                                peg$currPos = s0;\n                                                s0 = peg$FAILED;\n                                            }\n                                        }\n                                        else {\n                                            peg$currPos = s0;\n                                            s0 = peg$FAILED;\n                                        }\n                                    }\n                                    else {\n                                        peg$currPos = s0;\n                                        s0 = peg$FAILED;\n                                    }\n                                }\n                                else {\n                                    peg$currPos = s0;\n                                    s0 = peg$FAILED;\n                                }\n                            }\n                            else {\n                                peg$currPos = s0;\n                                s0 = peg$FAILED;\n                            }\n                        }\n                        else {\n                            peg$currPos = s0;\n                            s0 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        return s0;\n    }\n    function peg$parsedateTimeSkeletonLiteral() {\n        var s0, s1, s2, s3;\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 39) {\n            s1 = peg$c48;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c49);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = [];\n            s3 = peg$parsedoubleApostrophes();\n            if (s3 === peg$FAILED) {\n                if (peg$c50.test(input.charAt(peg$currPos))) {\n                    s3 = input.charAt(peg$currPos);\n                    peg$currPos++;\n                }\n                else {\n                    s3 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c51);\n                    }\n                }\n            }\n            if (s3 !== peg$FAILED) {\n                while (s3 !== peg$FAILED) {\n                    s2.push(s3);\n                    s3 = peg$parsedoubleApostrophes();\n                    if (s3 === peg$FAILED) {\n                        if (peg$c50.test(input.charAt(peg$currPos))) {\n                            s3 = input.charAt(peg$currPos);\n                            peg$currPos++;\n                        }\n                        else {\n                            s3 = peg$FAILED;\n                            if (peg$silentFails === 0) {\n                                peg$fail(peg$c51);\n                            }\n                        }\n                    }\n                }\n            }\n            else {\n                s2 = peg$FAILED;\n            }\n            if (s2 !== peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 39) {\n                    s3 = peg$c48;\n                    peg$currPos++;\n                }\n                else {\n                    s3 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c49);\n                    }\n                }\n                if (s3 !== peg$FAILED) {\n                    s1 = [s1, s2, s3];\n                    s0 = s1;\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n            s0 = [];\n            s1 = peg$parsedoubleApostrophes();\n            if (s1 === peg$FAILED) {\n                if (peg$c52.test(input.charAt(peg$currPos))) {\n                    s1 = input.charAt(peg$currPos);\n                    peg$currPos++;\n                }\n                else {\n                    s1 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c53);\n                    }\n                }\n            }\n            if (s1 !== peg$FAILED) {\n                while (s1 !== peg$FAILED) {\n                    s0.push(s1);\n                    s1 = peg$parsedoubleApostrophes();\n                    if (s1 === peg$FAILED) {\n                        if (peg$c52.test(input.charAt(peg$currPos))) {\n                            s1 = input.charAt(peg$currPos);\n                            peg$currPos++;\n                        }\n                        else {\n                            s1 = peg$FAILED;\n                            if (peg$silentFails === 0) {\n                                peg$fail(peg$c53);\n                            }\n                        }\n                    }\n                }\n            }\n            else {\n                s0 = peg$FAILED;\n            }\n        }\n        return s0;\n    }\n    function peg$parsedateTimeSkeletonPattern() {\n        var s0, s1;\n        s0 = [];\n        if (peg$c54.test(input.charAt(peg$currPos))) {\n            s1 = input.charAt(peg$currPos);\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c55);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            while (s1 !== peg$FAILED) {\n                s0.push(s1);\n                if (peg$c54.test(input.charAt(peg$currPos))) {\n                    s1 = input.charAt(peg$currPos);\n                    peg$currPos++;\n                }\n                else {\n                    s1 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c55);\n                    }\n                }\n            }\n        }\n        else {\n            s0 = peg$FAILED;\n        }\n        return s0;\n    }\n    function peg$parsedateTimeSkeleton() {\n        var s0, s1, s2, s3;\n        s0 = peg$currPos;\n        s1 = peg$currPos;\n        s2 = [];\n        s3 = peg$parsedateTimeSkeletonLiteral();\n        if (s3 === peg$FAILED) {\n            s3 = peg$parsedateTimeSkeletonPattern();\n        }\n        if (s3 !== peg$FAILED) {\n            while (s3 !== peg$FAILED) {\n                s2.push(s3);\n                s3 = peg$parsedateTimeSkeletonLiteral();\n                if (s3 === peg$FAILED) {\n                    s3 = peg$parsedateTimeSkeletonPattern();\n                }\n            }\n        }\n        else {\n            s2 = peg$FAILED;\n        }\n        if (s2 !== peg$FAILED) {\n            s1 = input.substring(s1, peg$currPos);\n        }\n        else {\n            s1 = s2;\n        }\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c56(s1);\n        }\n        s0 = s1;\n        return s0;\n    }\n    function peg$parsedateOrTimeArgStyle() {\n        var s0, s1, s2;\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 2) === peg$c38) {\n            s1 = peg$c38;\n            peg$currPos += 2;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c39);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parsedateTimeSkeleton();\n            if (s2 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c40(s2);\n                s0 = s1;\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            peg$savedPos = peg$currPos;\n            s1 = peg$c57();\n            if (s1) {\n                s1 = undefined;\n            }\n            else {\n                s1 = peg$FAILED;\n            }\n            if (s1 !== peg$FAILED) {\n                s2 = peg$parsemessageText();\n                if (s2 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c42(s2);\n                    s0 = s1;\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        return s0;\n    }\n    function peg$parsedateOrTimeFormatElement() {\n        var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 123) {\n            s1 = peg$c22;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c23);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parse_();\n            if (s2 !== peg$FAILED) {\n                s3 = peg$parseargNameOrNumber();\n                if (s3 !== peg$FAILED) {\n                    s4 = peg$parse_();\n                    if (s4 !== peg$FAILED) {\n                        if (input.charCodeAt(peg$currPos) === 44) {\n                            s5 = peg$c43;\n                            peg$currPos++;\n                        }\n                        else {\n                            s5 = peg$FAILED;\n                            if (peg$silentFails === 0) {\n                                peg$fail(peg$c44);\n                            }\n                        }\n                        if (s5 !== peg$FAILED) {\n                            s6 = peg$parse_();\n                            if (s6 !== peg$FAILED) {\n                                if (input.substr(peg$currPos, 4) === peg$c58) {\n                                    s7 = peg$c58;\n                                    peg$currPos += 4;\n                                }\n                                else {\n                                    s7 = peg$FAILED;\n                                    if (peg$silentFails === 0) {\n                                        peg$fail(peg$c59);\n                                    }\n                                }\n                                if (s7 === peg$FAILED) {\n                                    if (input.substr(peg$currPos, 4) === peg$c60) {\n                                        s7 = peg$c60;\n                                        peg$currPos += 4;\n                                    }\n                                    else {\n                                        s7 = peg$FAILED;\n                                        if (peg$silentFails === 0) {\n                                            peg$fail(peg$c61);\n                                        }\n                                    }\n                                }\n                                if (s7 !== peg$FAILED) {\n                                    s8 = peg$parse_();\n                                    if (s8 !== peg$FAILED) {\n                                        s9 = peg$currPos;\n                                        if (input.charCodeAt(peg$currPos) === 44) {\n                                            s10 = peg$c43;\n                                            peg$currPos++;\n                                        }\n                                        else {\n                                            s10 = peg$FAILED;\n                                            if (peg$silentFails === 0) {\n                                                peg$fail(peg$c44);\n                                            }\n                                        }\n                                        if (s10 !== peg$FAILED) {\n                                            s11 = peg$parse_();\n                                            if (s11 !== peg$FAILED) {\n                                                s12 = peg$parsedateOrTimeArgStyle();\n                                                if (s12 !== peg$FAILED) {\n                                                    s10 = [s10, s11, s12];\n                                                    s9 = s10;\n                                                }\n                                                else {\n                                                    peg$currPos = s9;\n                                                    s9 = peg$FAILED;\n                                                }\n                                            }\n                                            else {\n                                                peg$currPos = s9;\n                                                s9 = peg$FAILED;\n                                            }\n                                        }\n                                        else {\n                                            peg$currPos = s9;\n                                            s9 = peg$FAILED;\n                                        }\n                                        if (s9 === peg$FAILED) {\n                                            s9 = null;\n                                        }\n                                        if (s9 !== peg$FAILED) {\n                                            s10 = peg$parse_();\n                                            if (s10 !== peg$FAILED) {\n                                                if (input.charCodeAt(peg$currPos) === 125) {\n                                                    s11 = peg$c24;\n                                                    peg$currPos++;\n                                                }\n                                                else {\n                                                    s11 = peg$FAILED;\n                                                    if (peg$silentFails === 0) {\n                                                        peg$fail(peg$c25);\n                                                    }\n                                                }\n                                                if (s11 !== peg$FAILED) {\n                                                    peg$savedPos = s0;\n                                                    s1 = peg$c47(s3, s7, s9);\n                                                    s0 = s1;\n                                                }\n                                                else {\n                                                    peg$currPos = s0;\n                                                    s0 = peg$FAILED;\n                                                }\n                                            }\n                                            else {\n                                                peg$currPos = s0;\n                                                s0 = peg$FAILED;\n                                            }\n                                        }\n                                        else {\n                                            peg$currPos = s0;\n                                            s0 = peg$FAILED;\n                                        }\n                                    }\n                                    else {\n                                        peg$currPos = s0;\n                                        s0 = peg$FAILED;\n                                    }\n                                }\n                                else {\n                                    peg$currPos = s0;\n                                    s0 = peg$FAILED;\n                                }\n                            }\n                            else {\n                                peg$currPos = s0;\n                                s0 = peg$FAILED;\n                            }\n                        }\n                        else {\n                            peg$currPos = s0;\n                            s0 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        return s0;\n    }\n    function peg$parsesimpleFormatElement() {\n        var s0;\n        s0 = peg$parsenumberFormatElement();\n        if (s0 === peg$FAILED) {\n            s0 = peg$parsedateOrTimeFormatElement();\n        }\n        return s0;\n    }\n    function peg$parsepluralElement() {\n        var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15;\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 123) {\n            s1 = peg$c22;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c23);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parse_();\n            if (s2 !== peg$FAILED) {\n                s3 = peg$parseargNameOrNumber();\n                if (s3 !== peg$FAILED) {\n                    s4 = peg$parse_();\n                    if (s4 !== peg$FAILED) {\n                        if (input.charCodeAt(peg$currPos) === 44) {\n                            s5 = peg$c43;\n                            peg$currPos++;\n                        }\n                        else {\n                            s5 = peg$FAILED;\n                            if (peg$silentFails === 0) {\n                                peg$fail(peg$c44);\n                            }\n                        }\n                        if (s5 !== peg$FAILED) {\n                            s6 = peg$parse_();\n                            if (s6 !== peg$FAILED) {\n                                if (input.substr(peg$currPos, 6) === peg$c62) {\n                                    s7 = peg$c62;\n                                    peg$currPos += 6;\n                                }\n                                else {\n                                    s7 = peg$FAILED;\n                                    if (peg$silentFails === 0) {\n                                        peg$fail(peg$c63);\n                                    }\n                                }\n                                if (s7 === peg$FAILED) {\n                                    if (input.substr(peg$currPos, 13) === peg$c64) {\n                                        s7 = peg$c64;\n                                        peg$currPos += 13;\n                                    }\n                                    else {\n                                        s7 = peg$FAILED;\n                                        if (peg$silentFails === 0) {\n                                            peg$fail(peg$c65);\n                                        }\n                                    }\n                                }\n                                if (s7 !== peg$FAILED) {\n                                    s8 = peg$parse_();\n                                    if (s8 !== peg$FAILED) {\n                                        if (input.charCodeAt(peg$currPos) === 44) {\n                                            s9 = peg$c43;\n                                            peg$currPos++;\n                                        }\n                                        else {\n                                            s9 = peg$FAILED;\n                                            if (peg$silentFails === 0) {\n                                                peg$fail(peg$c44);\n                                            }\n                                        }\n                                        if (s9 !== peg$FAILED) {\n                                            s10 = peg$parse_();\n                                            if (s10 !== peg$FAILED) {\n                                                s11 = peg$currPos;\n                                                if (input.substr(peg$currPos, 7) === peg$c66) {\n                                                    s12 = peg$c66;\n                                                    peg$currPos += 7;\n                                                }\n                                                else {\n                                                    s12 = peg$FAILED;\n                                                    if (peg$silentFails === 0) {\n                                                        peg$fail(peg$c67);\n                                                    }\n                                                }\n                                                if (s12 !== peg$FAILED) {\n                                                    s13 = peg$parse_();\n                                                    if (s13 !== peg$FAILED) {\n                                                        s14 = peg$parsenumber();\n                                                        if (s14 !== peg$FAILED) {\n                                                            s12 = [s12, s13, s14];\n                                                            s11 = s12;\n                                                        }\n                                                        else {\n                                                            peg$currPos = s11;\n                                                            s11 = peg$FAILED;\n                                                        }\n                                                    }\n                                                    else {\n                                                        peg$currPos = s11;\n                                                        s11 = peg$FAILED;\n                                                    }\n                                                }\n                                                else {\n                                                    peg$currPos = s11;\n                                                    s11 = peg$FAILED;\n                                                }\n                                                if (s11 === peg$FAILED) {\n                                                    s11 = null;\n                                                }\n                                                if (s11 !== peg$FAILED) {\n                                                    s12 = peg$parse_();\n                                                    if (s12 !== peg$FAILED) {\n                                                        s13 = [];\n                                                        s14 = peg$parsepluralOption();\n                                                        if (s14 !== peg$FAILED) {\n                                                            while (s14 !== peg$FAILED) {\n                                                                s13.push(s14);\n                                                                s14 = peg$parsepluralOption();\n                                                            }\n                                                        }\n                                                        else {\n                                                            s13 = peg$FAILED;\n                                                        }\n                                                        if (s13 !== peg$FAILED) {\n                                                            s14 = peg$parse_();\n                                                            if (s14 !== peg$FAILED) {\n                                                                if (input.charCodeAt(peg$currPos) === 125) {\n                                                                    s15 = peg$c24;\n                                                                    peg$currPos++;\n                                                                }\n                                                                else {\n                                                                    s15 = peg$FAILED;\n                                                                    if (peg$silentFails === 0) {\n                                                                        peg$fail(peg$c25);\n                                                                    }\n                                                                }\n                                                                if (s15 !== peg$FAILED) {\n                                                                    peg$savedPos = s0;\n                                                                    s1 = peg$c68(s3, s7, s11, s13);\n                                                                    s0 = s1;\n                                                                }\n                                                                else {\n                                                                    peg$currPos = s0;\n                                                                    s0 = peg$FAILED;\n                                                                }\n                                                            }\n                                                            else {\n                                                                peg$currPos = s0;\n                                                                s0 = peg$FAILED;\n                                                            }\n                                                        }\n                                                        else {\n                                                            peg$currPos = s0;\n                                                            s0 = peg$FAILED;\n                                                        }\n                                                    }\n                                                    else {\n                                                        peg$currPos = s0;\n                                                        s0 = peg$FAILED;\n                                                    }\n                                                }\n                                                else {\n                                                    peg$currPos = s0;\n                                                    s0 = peg$FAILED;\n                                                }\n                                            }\n                                            else {\n                                                peg$currPos = s0;\n                                                s0 = peg$FAILED;\n                                            }\n                                        }\n                                        else {\n                                            peg$currPos = s0;\n                                            s0 = peg$FAILED;\n                                        }\n                                    }\n                                    else {\n                                        peg$currPos = s0;\n                                        s0 = peg$FAILED;\n                                    }\n                                }\n                                else {\n                                    peg$currPos = s0;\n                                    s0 = peg$FAILED;\n                                }\n                            }\n                            else {\n                                peg$currPos = s0;\n                                s0 = peg$FAILED;\n                            }\n                        }\n                        else {\n                            peg$currPos = s0;\n                            s0 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        return s0;\n    }\n    function peg$parseselectElement() {\n        var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13;\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 123) {\n            s1 = peg$c22;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c23);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parse_();\n            if (s2 !== peg$FAILED) {\n                s3 = peg$parseargNameOrNumber();\n                if (s3 !== peg$FAILED) {\n                    s4 = peg$parse_();\n                    if (s4 !== peg$FAILED) {\n                        if (input.charCodeAt(peg$currPos) === 44) {\n                            s5 = peg$c43;\n                            peg$currPos++;\n                        }\n                        else {\n                            s5 = peg$FAILED;\n                            if (peg$silentFails === 0) {\n                                peg$fail(peg$c44);\n                            }\n                        }\n                        if (s5 !== peg$FAILED) {\n                            s6 = peg$parse_();\n                            if (s6 !== peg$FAILED) {\n                                if (input.substr(peg$currPos, 6) === peg$c69) {\n                                    s7 = peg$c69;\n                                    peg$currPos += 6;\n                                }\n                                else {\n                                    s7 = peg$FAILED;\n                                    if (peg$silentFails === 0) {\n                                        peg$fail(peg$c70);\n                                    }\n                                }\n                                if (s7 !== peg$FAILED) {\n                                    s8 = peg$parse_();\n                                    if (s8 !== peg$FAILED) {\n                                        if (input.charCodeAt(peg$currPos) === 44) {\n                                            s9 = peg$c43;\n                                            peg$currPos++;\n                                        }\n                                        else {\n                                            s9 = peg$FAILED;\n                                            if (peg$silentFails === 0) {\n                                                peg$fail(peg$c44);\n                                            }\n                                        }\n                                        if (s9 !== peg$FAILED) {\n                                            s10 = peg$parse_();\n                                            if (s10 !== peg$FAILED) {\n                                                s11 = [];\n                                                s12 = peg$parseselectOption();\n                                                if (s12 !== peg$FAILED) {\n                                                    while (s12 !== peg$FAILED) {\n                                                        s11.push(s12);\n                                                        s12 = peg$parseselectOption();\n                                                    }\n                                                }\n                                                else {\n                                                    s11 = peg$FAILED;\n                                                }\n                                                if (s11 !== peg$FAILED) {\n                                                    s12 = peg$parse_();\n                                                    if (s12 !== peg$FAILED) {\n                                                        if (input.charCodeAt(peg$currPos) === 125) {\n                                                            s13 = peg$c24;\n                                                            peg$currPos++;\n                                                        }\n                                                        else {\n                                                            s13 = peg$FAILED;\n                                                            if (peg$silentFails === 0) {\n                                                                peg$fail(peg$c25);\n                                                            }\n                                                        }\n                                                        if (s13 !== peg$FAILED) {\n                                                            peg$savedPos = s0;\n                                                            s1 = peg$c71(s3, s11);\n                                                            s0 = s1;\n                                                        }\n                                                        else {\n                                                            peg$currPos = s0;\n                                                            s0 = peg$FAILED;\n                                                        }\n                                                    }\n                                                    else {\n                                                        peg$currPos = s0;\n                                                        s0 = peg$FAILED;\n                                                    }\n                                                }\n                                                else {\n                                                    peg$currPos = s0;\n                                                    s0 = peg$FAILED;\n                                                }\n                                            }\n                                            else {\n                                                peg$currPos = s0;\n                                                s0 = peg$FAILED;\n                                            }\n                                        }\n                                        else {\n                                            peg$currPos = s0;\n                                            s0 = peg$FAILED;\n                                        }\n                                    }\n                                    else {\n                                        peg$currPos = s0;\n                                        s0 = peg$FAILED;\n                                    }\n                                }\n                                else {\n                                    peg$currPos = s0;\n                                    s0 = peg$FAILED;\n                                }\n                            }\n                            else {\n                                peg$currPos = s0;\n                                s0 = peg$FAILED;\n                            }\n                        }\n                        else {\n                            peg$currPos = s0;\n                            s0 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        return s0;\n    }\n    function peg$parsepluralRuleSelectValue() {\n        var s0, s1, s2, s3;\n        s0 = peg$currPos;\n        s1 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 61) {\n            s2 = peg$c72;\n            peg$currPos++;\n        }\n        else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c73);\n            }\n        }\n        if (s2 !== peg$FAILED) {\n            s3 = peg$parsenumber();\n            if (s3 !== peg$FAILED) {\n                s2 = [s2, s3];\n                s1 = s2;\n            }\n            else {\n                peg$currPos = s1;\n                s1 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s1;\n            s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n            s0 = input.substring(s0, peg$currPos);\n        }\n        else {\n            s0 = s1;\n        }\n        if (s0 === peg$FAILED) {\n            s0 = peg$parseargName();\n        }\n        return s0;\n    }\n    function peg$parseselectOption() {\n        var s0, s1, s2, s3, s4, s5, s6, s7;\n        s0 = peg$currPos;\n        s1 = peg$parse_();\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parseargName();\n            if (s2 !== peg$FAILED) {\n                s3 = peg$parse_();\n                if (s3 !== peg$FAILED) {\n                    if (input.charCodeAt(peg$currPos) === 123) {\n                        s4 = peg$c22;\n                        peg$currPos++;\n                    }\n                    else {\n                        s4 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c23);\n                        }\n                    }\n                    if (s4 !== peg$FAILED) {\n                        peg$savedPos = peg$currPos;\n                        s5 = peg$c74(s2);\n                        if (s5) {\n                            s5 = undefined;\n                        }\n                        else {\n                            s5 = peg$FAILED;\n                        }\n                        if (s5 !== peg$FAILED) {\n                            s6 = peg$parsemessage();\n                            if (s6 !== peg$FAILED) {\n                                if (input.charCodeAt(peg$currPos) === 125) {\n                                    s7 = peg$c24;\n                                    peg$currPos++;\n                                }\n                                else {\n                                    s7 = peg$FAILED;\n                                    if (peg$silentFails === 0) {\n                                        peg$fail(peg$c25);\n                                    }\n                                }\n                                if (s7 !== peg$FAILED) {\n                                    peg$savedPos = s0;\n                                    s1 = peg$c75(s2, s6);\n                                    s0 = s1;\n                                }\n                                else {\n                                    peg$currPos = s0;\n                                    s0 = peg$FAILED;\n                                }\n                            }\n                            else {\n                                peg$currPos = s0;\n                                s0 = peg$FAILED;\n                            }\n                        }\n                        else {\n                            peg$currPos = s0;\n                            s0 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        return s0;\n    }\n    function peg$parsepluralOption() {\n        var s0, s1, s2, s3, s4, s5, s6, s7;\n        s0 = peg$currPos;\n        s1 = peg$parse_();\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parsepluralRuleSelectValue();\n            if (s2 !== peg$FAILED) {\n                s3 = peg$parse_();\n                if (s3 !== peg$FAILED) {\n                    if (input.charCodeAt(peg$currPos) === 123) {\n                        s4 = peg$c22;\n                        peg$currPos++;\n                    }\n                    else {\n                        s4 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c23);\n                        }\n                    }\n                    if (s4 !== peg$FAILED) {\n                        peg$savedPos = peg$currPos;\n                        s5 = peg$c76(s2);\n                        if (s5) {\n                            s5 = undefined;\n                        }\n                        else {\n                            s5 = peg$FAILED;\n                        }\n                        if (s5 !== peg$FAILED) {\n                            s6 = peg$parsemessage();\n                            if (s6 !== peg$FAILED) {\n                                if (input.charCodeAt(peg$currPos) === 125) {\n                                    s7 = peg$c24;\n                                    peg$currPos++;\n                                }\n                                else {\n                                    s7 = peg$FAILED;\n                                    if (peg$silentFails === 0) {\n                                        peg$fail(peg$c25);\n                                    }\n                                }\n                                if (s7 !== peg$FAILED) {\n                                    peg$savedPos = s0;\n                                    s1 = peg$c77(s2, s6);\n                                    s0 = s1;\n                                }\n                                else {\n                                    peg$currPos = s0;\n                                    s0 = peg$FAILED;\n                                }\n                            }\n                            else {\n                                peg$currPos = s0;\n                                s0 = peg$FAILED;\n                            }\n                        }\n                        else {\n                            peg$currPos = s0;\n                            s0 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        return s0;\n    }\n    function peg$parsewhiteSpace() {\n        var s0, s1;\n        peg$silentFails++;\n        if (peg$c79.test(input.charAt(peg$currPos))) {\n            s0 = input.charAt(peg$currPos);\n            peg$currPos++;\n        }\n        else {\n            s0 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c80);\n            }\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c78);\n            }\n        }\n        return s0;\n    }\n    function peg$parsepatternSyntax() {\n        var s0, s1;\n        peg$silentFails++;\n        if (peg$c82.test(input.charAt(peg$currPos))) {\n            s0 = input.charAt(peg$currPos);\n            peg$currPos++;\n        }\n        else {\n            s0 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c83);\n            }\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c81);\n            }\n        }\n        return s0;\n    }\n    function peg$parse_() {\n        var s0, s1, s2;\n        peg$silentFails++;\n        s0 = peg$currPos;\n        s1 = [];\n        s2 = peg$parsewhiteSpace();\n        while (s2 !== peg$FAILED) {\n            s1.push(s2);\n            s2 = peg$parsewhiteSpace();\n        }\n        if (s1 !== peg$FAILED) {\n            s0 = input.substring(s0, peg$currPos);\n        }\n        else {\n            s0 = s1;\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c84);\n            }\n        }\n        return s0;\n    }\n    function peg$parsenumber() {\n        var s0, s1, s2;\n        peg$silentFails++;\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 45) {\n            s1 = peg$c86;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c87);\n            }\n        }\n        if (s1 === peg$FAILED) {\n            s1 = null;\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parseargNumber();\n            if (s2 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c88(s1, s2);\n                s0 = s1;\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c85);\n            }\n        }\n        return s0;\n    }\n    function peg$parseapostrophe() {\n        var s0, s1;\n        peg$silentFails++;\n        if (input.charCodeAt(peg$currPos) === 39) {\n            s0 = peg$c48;\n            peg$currPos++;\n        }\n        else {\n            s0 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c49);\n            }\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c89);\n            }\n        }\n        return s0;\n    }\n    function peg$parsedoubleApostrophes() {\n        var s0, s1;\n        peg$silentFails++;\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 2) === peg$c91) {\n            s1 = peg$c91;\n            peg$currPos += 2;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c92);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c93();\n        }\n        s0 = s1;\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c90);\n            }\n        }\n        return s0;\n    }\n    function peg$parsequotedString() {\n        var s0, s1, s2, s3, s4, s5;\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 39) {\n            s1 = peg$c48;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c49);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parseescapedChar();\n            if (s2 !== peg$FAILED) {\n                s3 = peg$currPos;\n                s4 = [];\n                if (input.substr(peg$currPos, 2) === peg$c91) {\n                    s5 = peg$c91;\n                    peg$currPos += 2;\n                }\n                else {\n                    s5 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c92);\n                    }\n                }\n                if (s5 === peg$FAILED) {\n                    if (peg$c50.test(input.charAt(peg$currPos))) {\n                        s5 = input.charAt(peg$currPos);\n                        peg$currPos++;\n                    }\n                    else {\n                        s5 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c51);\n                        }\n                    }\n                }\n                while (s5 !== peg$FAILED) {\n                    s4.push(s5);\n                    if (input.substr(peg$currPos, 2) === peg$c91) {\n                        s5 = peg$c91;\n                        peg$currPos += 2;\n                    }\n                    else {\n                        s5 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c92);\n                        }\n                    }\n                    if (s5 === peg$FAILED) {\n                        if (peg$c50.test(input.charAt(peg$currPos))) {\n                            s5 = input.charAt(peg$currPos);\n                            peg$currPos++;\n                        }\n                        else {\n                            s5 = peg$FAILED;\n                            if (peg$silentFails === 0) {\n                                peg$fail(peg$c51);\n                            }\n                        }\n                    }\n                }\n                if (s4 !== peg$FAILED) {\n                    s3 = input.substring(s3, peg$currPos);\n                }\n                else {\n                    s3 = s4;\n                }\n                if (s3 !== peg$FAILED) {\n                    if (input.charCodeAt(peg$currPos) === 39) {\n                        s4 = peg$c48;\n                        peg$currPos++;\n                    }\n                    else {\n                        s4 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c49);\n                        }\n                    }\n                    if (s4 === peg$FAILED) {\n                        s4 = null;\n                    }\n                    if (s4 !== peg$FAILED) {\n                        peg$savedPos = s0;\n                        s1 = peg$c94(s2, s3);\n                        s0 = s1;\n                    }\n                    else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        return s0;\n    }\n    function peg$parseunquotedString() {\n        var s0, s1, s2, s3;\n        s0 = peg$currPos;\n        s1 = peg$currPos;\n        if (input.length > peg$currPos) {\n            s2 = input.charAt(peg$currPos);\n            peg$currPos++;\n        }\n        else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c30);\n            }\n        }\n        if (s2 !== peg$FAILED) {\n            peg$savedPos = peg$currPos;\n            s3 = peg$c95(s2);\n            if (s3) {\n                s3 = undefined;\n            }\n            else {\n                s3 = peg$FAILED;\n            }\n            if (s3 !== peg$FAILED) {\n                s2 = [s2, s3];\n                s1 = s2;\n            }\n            else {\n                peg$currPos = s1;\n                s1 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s1;\n            s1 = peg$FAILED;\n        }\n        if (s1 === peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 10) {\n                s1 = peg$c96;\n                peg$currPos++;\n            }\n            else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c97);\n                }\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s0 = input.substring(s0, peg$currPos);\n        }\n        else {\n            s0 = s1;\n        }\n        return s0;\n    }\n    function peg$parseescapedChar() {\n        var s0, s1, s2, s3;\n        s0 = peg$currPos;\n        s1 = peg$currPos;\n        if (input.length > peg$currPos) {\n            s2 = input.charAt(peg$currPos);\n            peg$currPos++;\n        }\n        else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c30);\n            }\n        }\n        if (s2 !== peg$FAILED) {\n            peg$savedPos = peg$currPos;\n            s3 = peg$c98(s2);\n            if (s3) {\n                s3 = undefined;\n            }\n            else {\n                s3 = peg$FAILED;\n            }\n            if (s3 !== peg$FAILED) {\n                s2 = [s2, s3];\n                s1 = s2;\n            }\n            else {\n                peg$currPos = s1;\n                s1 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s1;\n            s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n            s0 = input.substring(s0, peg$currPos);\n        }\n        else {\n            s0 = s1;\n        }\n        return s0;\n    }\n    function peg$parseargNameOrNumber() {\n        var s0, s1;\n        peg$silentFails++;\n        s0 = peg$currPos;\n        s1 = peg$parseargNumber();\n        if (s1 === peg$FAILED) {\n            s1 = peg$parseargName();\n        }\n        if (s1 !== peg$FAILED) {\n            s0 = input.substring(s0, peg$currPos);\n        }\n        else {\n            s0 = s1;\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c99);\n            }\n        }\n        return s0;\n    }\n    function peg$parsevalidTag() {\n        var s0, s1;\n        peg$silentFails++;\n        s0 = peg$currPos;\n        s1 = peg$parseargNumber();\n        if (s1 === peg$FAILED) {\n            s1 = peg$parsetagName();\n        }\n        if (s1 !== peg$FAILED) {\n            s0 = input.substring(s0, peg$currPos);\n        }\n        else {\n            s0 = s1;\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c100);\n            }\n        }\n        return s0;\n    }\n    function peg$parseargNumber() {\n        var s0, s1, s2, s3, s4;\n        peg$silentFails++;\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 48) {\n            s1 = peg$c102;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c103);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c104();\n        }\n        s0 = s1;\n        if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            s1 = peg$currPos;\n            if (peg$c105.test(input.charAt(peg$currPos))) {\n                s2 = input.charAt(peg$currPos);\n                peg$currPos++;\n            }\n            else {\n                s2 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c106);\n                }\n            }\n            if (s2 !== peg$FAILED) {\n                s3 = [];\n                if (peg$c107.test(input.charAt(peg$currPos))) {\n                    s4 = input.charAt(peg$currPos);\n                    peg$currPos++;\n                }\n                else {\n                    s4 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c108);\n                    }\n                }\n                while (s4 !== peg$FAILED) {\n                    s3.push(s4);\n                    if (peg$c107.test(input.charAt(peg$currPos))) {\n                        s4 = input.charAt(peg$currPos);\n                        peg$currPos++;\n                    }\n                    else {\n                        s4 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c108);\n                        }\n                    }\n                }\n                if (s3 !== peg$FAILED) {\n                    s2 = [s2, s3];\n                    s1 = s2;\n                }\n                else {\n                    peg$currPos = s1;\n                    s1 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s1;\n                s1 = peg$FAILED;\n            }\n            if (s1 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c109(s1);\n            }\n            s0 = s1;\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c101);\n            }\n        }\n        return s0;\n    }\n    function peg$parseargName() {\n        var s0, s1, s2, s3, s4;\n        peg$silentFails++;\n        s0 = peg$currPos;\n        s1 = [];\n        s2 = peg$currPos;\n        s3 = peg$currPos;\n        peg$silentFails++;\n        s4 = peg$parsewhiteSpace();\n        if (s4 === peg$FAILED) {\n            s4 = peg$parsepatternSyntax();\n        }\n        peg$silentFails--;\n        if (s4 === peg$FAILED) {\n            s3 = undefined;\n        }\n        else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n        }\n        if (s3 !== peg$FAILED) {\n            if (input.length > peg$currPos) {\n                s4 = input.charAt(peg$currPos);\n                peg$currPos++;\n            }\n            else {\n                s4 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c30);\n                }\n            }\n            if (s4 !== peg$FAILED) {\n                s3 = [s3, s4];\n                s2 = s3;\n            }\n            else {\n                peg$currPos = s2;\n                s2 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s2;\n            s2 = peg$FAILED;\n        }\n        if (s2 !== peg$FAILED) {\n            while (s2 !== peg$FAILED) {\n                s1.push(s2);\n                s2 = peg$currPos;\n                s3 = peg$currPos;\n                peg$silentFails++;\n                s4 = peg$parsewhiteSpace();\n                if (s4 === peg$FAILED) {\n                    s4 = peg$parsepatternSyntax();\n                }\n                peg$silentFails--;\n                if (s4 === peg$FAILED) {\n                    s3 = undefined;\n                }\n                else {\n                    peg$currPos = s3;\n                    s3 = peg$FAILED;\n                }\n                if (s3 !== peg$FAILED) {\n                    if (input.length > peg$currPos) {\n                        s4 = input.charAt(peg$currPos);\n                        peg$currPos++;\n                    }\n                    else {\n                        s4 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c30);\n                        }\n                    }\n                    if (s4 !== peg$FAILED) {\n                        s3 = [s3, s4];\n                        s2 = s3;\n                    }\n                    else {\n                        peg$currPos = s2;\n                        s2 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s2;\n                    s2 = peg$FAILED;\n                }\n            }\n        }\n        else {\n            s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n            s0 = input.substring(s0, peg$currPos);\n        }\n        else {\n            s0 = s1;\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c110);\n            }\n        }\n        return s0;\n    }\n    function peg$parsetagName() {\n        var s0, s1, s2, s3, s4;\n        peg$silentFails++;\n        s0 = peg$currPos;\n        s1 = [];\n        if (input.charCodeAt(peg$currPos) === 45) {\n            s2 = peg$c86;\n            peg$currPos++;\n        }\n        else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c87);\n            }\n        }\n        if (s2 === peg$FAILED) {\n            s2 = peg$currPos;\n            s3 = peg$currPos;\n            peg$silentFails++;\n            s4 = peg$parsewhiteSpace();\n            if (s4 === peg$FAILED) {\n                s4 = peg$parsepatternSyntax();\n            }\n            peg$silentFails--;\n            if (s4 === peg$FAILED) {\n                s3 = undefined;\n            }\n            else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n            }\n            if (s3 !== peg$FAILED) {\n                if (input.length > peg$currPos) {\n                    s4 = input.charAt(peg$currPos);\n                    peg$currPos++;\n                }\n                else {\n                    s4 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c30);\n                    }\n                }\n                if (s4 !== peg$FAILED) {\n                    s3 = [s3, s4];\n                    s2 = s3;\n                }\n                else {\n                    peg$currPos = s2;\n                    s2 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s2;\n                s2 = peg$FAILED;\n            }\n        }\n        if (s2 !== peg$FAILED) {\n            while (s2 !== peg$FAILED) {\n                s1.push(s2);\n                if (input.charCodeAt(peg$currPos) === 45) {\n                    s2 = peg$c86;\n                    peg$currPos++;\n                }\n                else {\n                    s2 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c87);\n                    }\n                }\n                if (s2 === peg$FAILED) {\n                    s2 = peg$currPos;\n                    s3 = peg$currPos;\n                    peg$silentFails++;\n                    s4 = peg$parsewhiteSpace();\n                    if (s4 === peg$FAILED) {\n                        s4 = peg$parsepatternSyntax();\n                    }\n                    peg$silentFails--;\n                    if (s4 === peg$FAILED) {\n                        s3 = undefined;\n                    }\n                    else {\n                        peg$currPos = s3;\n                        s3 = peg$FAILED;\n                    }\n                    if (s3 !== peg$FAILED) {\n                        if (input.length > peg$currPos) {\n                            s4 = input.charAt(peg$currPos);\n                            peg$currPos++;\n                        }\n                        else {\n                            s4 = peg$FAILED;\n                            if (peg$silentFails === 0) {\n                                peg$fail(peg$c30);\n                            }\n                        }\n                        if (s4 !== peg$FAILED) {\n                            s3 = [s3, s4];\n                            s2 = s3;\n                        }\n                        else {\n                            peg$currPos = s2;\n                            s2 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s2;\n                        s2 = peg$FAILED;\n                    }\n                }\n            }\n        }\n        else {\n            s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n            s0 = input.substring(s0, peg$currPos);\n        }\n        else {\n            s0 = s1;\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c111);\n            }\n        }\n        return s0;\n    }\n    var messageCtx = ['root'];\n    function isNestedMessageText() {\n        return messageCtx.length > 1;\n    }\n    function isInPluralOption() {\n        return messageCtx[messageCtx.length - 1] === 'plural';\n    }\n    function insertLocation() {\n        return options && options.captureLocation ? {\n            location: location()\n        } : {};\n    }\n    var ignoreTag = options && options.ignoreTag;\n    var shouldParseSkeleton = options && options.shouldParseSkeleton;\n    peg$result = peg$startRuleFunction();\n    if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n        return peg$result;\n    }\n    else {\n        if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n            peg$fail(peg$endExpectation());\n        }\n        throw peg$buildStructuredError(peg$maxFailExpected, peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, peg$maxFailPos < input.length\n            ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n            : peg$computeLocation(peg$maxFailPos, peg$maxFailPos));\n    }\n}\nexport var pegParse = peg$parse;\n","import { __spreadArray } from \"tslib\";\nimport { isPluralElement, isLiteralElement, isSelectElement, } from './types';\nimport { pegParse } from './parser';\nvar PLURAL_HASHTAG_REGEX = /(^|[^\\\\])#/g;\n/**\n * Whether to convert `#` in plural rule options\n * to `{var, number}`\n * @param el AST Element\n * @param pluralStack current plural stack\n */\nexport function normalizeHashtagInPlural(els) {\n    els.forEach(function (el) {\n        // If we're encountering a plural el\n        if (!isPluralElement(el) && !isSelectElement(el)) {\n            return;\n        }\n        // Go down the options and search for # in any literal element\n        Object.keys(el.options).forEach(function (id) {\n            var _a;\n            var opt = el.options[id];\n            // If we got a match, we have to split this\n            // and inject a NumberElement in the middle\n            var matchingLiteralElIndex = -1;\n            var literalEl = undefined;\n            for (var i = 0; i < opt.value.length; i++) {\n                var el_1 = opt.value[i];\n                if (isLiteralElement(el_1) && PLURAL_HASHTAG_REGEX.test(el_1.value)) {\n                    matchingLiteralElIndex = i;\n                    literalEl = el_1;\n                    break;\n                }\n            }\n            if (literalEl) {\n                var newValue = literalEl.value.replace(PLURAL_HASHTAG_REGEX, \"$1{\" + el.value + \", number}\");\n                var newEls = pegParse(newValue);\n                (_a = opt.value).splice.apply(_a, __spreadArray([matchingLiteralElIndex, 1], newEls));\n            }\n            normalizeHashtagInPlural(opt.value);\n        });\n    });\n}\n","import { __assign } from \"tslib\";\nimport { pegParse } from './src/parser';\nimport { normalizeHashtagInPlural } from './src/normalize';\nexport * from './src/types';\nexport * from './src/parser';\nexport function parse(input, opts) {\n    opts = __assign({ normalizeHashtagInPlural: true, shouldParseSkeleton: true }, (opts || {}));\n    var els = pegParse(input, opts);\n    if (opts.normalizeHashtagInPlural) {\n        normalizeHashtagInPlural(els);\n    }\n    return els;\n}\n","export var ErrorKind;\n(function (ErrorKind) {\n    /** Argument is unclosed (e.g. `{0`) */\n    ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_CLOSING_BRACE\"] = 1] = \"EXPECT_ARGUMENT_CLOSING_BRACE\";\n    /** Argument is empty (e.g. `{}`). */\n    ErrorKind[ErrorKind[\"EMPTY_ARGUMENT\"] = 2] = \"EMPTY_ARGUMENT\";\n    /** Argument is malformed (e.g. `{foo!}``) */\n    ErrorKind[ErrorKind[\"MALFORMED_ARGUMENT\"] = 3] = \"MALFORMED_ARGUMENT\";\n    /** Expect an argument type (e.g. `{foo,}`) */\n    ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_TYPE\"] = 4] = \"EXPECT_ARGUMENT_TYPE\";\n    /** Unsupported argument type (e.g. `{foo,foo}`) */\n    ErrorKind[ErrorKind[\"INVALID_ARGUMENT_TYPE\"] = 5] = \"INVALID_ARGUMENT_TYPE\";\n    /** Expect an argument style (e.g. `{foo, number, }`) */\n    ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_STYLE\"] = 6] = \"EXPECT_ARGUMENT_STYLE\";\n    /** The number skeleton is invalid. */\n    ErrorKind[ErrorKind[\"INVALID_NUMBER_SKELETON\"] = 7] = \"INVALID_NUMBER_SKELETON\";\n    /** The date time skeleton is invalid. */\n    ErrorKind[ErrorKind[\"INVALID_DATE_TIME_SKELETON\"] = 8] = \"INVALID_DATE_TIME_SKELETON\";\n    /** Exepct a number skeleton following the `::` (e.g. `{foo, number, ::}`) */\n    ErrorKind[ErrorKind[\"EXPECT_NUMBER_SKELETON\"] = 9] = \"EXPECT_NUMBER_SKELETON\";\n    /** Exepct a date time skeleton following the `::` (e.g. `{foo, date, ::}`) */\n    ErrorKind[ErrorKind[\"EXPECT_DATE_TIME_SKELETON\"] = 10] = \"EXPECT_DATE_TIME_SKELETON\";\n    /** Unmatched apostrophes in the argument style (e.g. `{foo, number, 'test`) */\n    ErrorKind[ErrorKind[\"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\"] = 11] = \"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\";\n    /** Missing select argument options (e.g. `{foo, select}`) */\n    ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_OPTIONS\"] = 12] = \"EXPECT_SELECT_ARGUMENT_OPTIONS\";\n    /** Expecting an offset value in `plural` or `selectordinal` argument (e.g `{foo, plural, offset}`) */\n    ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 13] = \"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\";\n    /** Offset value in `plural` or `selectordinal` is invalid (e.g. `{foo, plural, offset: x}`) */\n    ErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 14] = \"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\";\n    /** Expecting a selector in `select` argument (e.g `{foo, select}`) */\n    ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR\"] = 15] = \"EXPECT_SELECT_ARGUMENT_SELECTOR\";\n    /** Expecting a selector in `plural` or `selectordinal` argument (e.g `{foo, plural}`) */\n    ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR\"] = 16] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR\";\n    /** Expecting a message fragment after the `select` selector (e.g. `{foo, select, apple}`) */\n    ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\"] = 17] = \"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\";\n    /**\n     * Expecting a message fragment after the `plural` or `selectordinal` selector\n     * (e.g. `{foo, plural, one}`)\n     */\n    ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\"] = 18] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\";\n    /** Selector in `plural` or `selectordinal` is malformed (e.g. `{foo, plural, =x {#}}`) */\n    ErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_SELECTOR\"] = 19] = \"INVALID_PLURAL_ARGUMENT_SELECTOR\";\n    /**\n     * Duplicate selectors in `plural` or `selectordinal` argument.\n     * (e.g. {foo, plural, one {#} one {#}})\n     */\n    ErrorKind[ErrorKind[\"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\"] = 20] = \"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\";\n    /** Duplicate selectors in `select` argument.\n     * (e.g. {foo, select, apple {apple} apple {apple}})\n     */\n    ErrorKind[ErrorKind[\"DUPLICATE_SELECT_ARGUMENT_SELECTOR\"] = 21] = \"DUPLICATE_SELECT_ARGUMENT_SELECTOR\";\n    /** Plural or select argument option must have `other` clause. */\n    ErrorKind[ErrorKind[\"MISSING_OTHER_CLAUSE\"] = 22] = \"MISSING_OTHER_CLAUSE\";\n    /** The tag is malformed. (e.g. `<bold!>foo</bold!>) */\n    ErrorKind[ErrorKind[\"INVALID_TAG\"] = 23] = \"INVALID_TAG\";\n    /** The tag name is invalid. (e.g. `<123>foo</123>`) */\n    ErrorKind[ErrorKind[\"INVALID_TAG_NAME\"] = 25] = \"INVALID_TAG_NAME\";\n    /** The closing tag does not match the opening tag. (e.g. `<bold>foo</italic>`) */\n    ErrorKind[ErrorKind[\"UNMATCHED_CLOSING_TAG\"] = 26] = \"UNMATCHED_CLOSING_TAG\";\n    /** The opening tag has unmatched closing tag. (e.g. `<bold>foo`) */\n    ErrorKind[ErrorKind[\"UNCLOSED_TAG\"] = 27] = \"UNCLOSED_TAG\";\n})(ErrorKind || (ErrorKind = {}));\n","export var TYPE;\n(function (TYPE) {\n    /**\n     * Raw text\n     */\n    TYPE[TYPE[\"literal\"] = 0] = \"literal\";\n    /**\n     * Variable w/o any format, e.g `var` in `this is a {var}`\n     */\n    TYPE[TYPE[\"argument\"] = 1] = \"argument\";\n    /**\n     * Variable w/ number format\n     */\n    TYPE[TYPE[\"number\"] = 2] = \"number\";\n    /**\n     * Variable w/ date format\n     */\n    TYPE[TYPE[\"date\"] = 3] = \"date\";\n    /**\n     * Variable w/ time format\n     */\n    TYPE[TYPE[\"time\"] = 4] = \"time\";\n    /**\n     * Variable w/ select format\n     */\n    TYPE[TYPE[\"select\"] = 5] = \"select\";\n    /**\n     * Variable w/ plural format\n     */\n    TYPE[TYPE[\"plural\"] = 6] = \"plural\";\n    /**\n     * Only possible within plural argument.\n     * This is the `#` symbol that will be substituted with the count.\n     */\n    TYPE[TYPE[\"pound\"] = 7] = \"pound\";\n    /**\n     * XML-like tag\n     */\n    TYPE[TYPE[\"tag\"] = 8] = \"tag\";\n})(TYPE || (TYPE = {}));\nexport var SKELETON_TYPE;\n(function (SKELETON_TYPE) {\n    SKELETON_TYPE[SKELETON_TYPE[\"number\"] = 0] = \"number\";\n    SKELETON_TYPE[SKELETON_TYPE[\"dateTime\"] = 1] = \"dateTime\";\n})(SKELETON_TYPE || (SKELETON_TYPE = {}));\n/**\n * Type Guards\n */\nexport function isLiteralElement(el) {\n    return el.type === TYPE.literal;\n}\nexport function isArgumentElement(el) {\n    return el.type === TYPE.argument;\n}\nexport function isNumberElement(el) {\n    return el.type === TYPE.number;\n}\nexport function isDateElement(el) {\n    return el.type === TYPE.date;\n}\nexport function isTimeElement(el) {\n    return el.type === TYPE.time;\n}\nexport function isSelectElement(el) {\n    return el.type === TYPE.select;\n}\nexport function isPluralElement(el) {\n    return el.type === TYPE.plural;\n}\nexport function isPoundElement(el) {\n    return el.type === TYPE.pound;\n}\nexport function isTagElement(el) {\n    return el.type === TYPE.tag;\n}\nexport function isNumberSkeleton(el) {\n    return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.number);\n}\nexport function isDateTimeSkeleton(el) {\n    return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.dateTime);\n}\nexport function createLiteralElement(value) {\n    return {\n        type: TYPE.literal,\n        value: value,\n    };\n}\nexport function createNumberElement(value, style) {\n    return {\n        type: TYPE.number,\n        value: value,\n        style: style,\n    };\n}\n","// @generated from regex-gen.ts\nexport var SPACE_SEPARATOR_REGEX = /[ \\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/;\nexport var WHITE_SPACE_REGEX = /[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/;\n","/**\n * https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * Credit: https://github.com/caridy/intl-datetimeformat-pattern/blob/master/index.js\n * with some tweaks\n */\nvar DATE_TIME_REGEX = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;\n/**\n * Parse Date time skeleton into Intl.DateTimeFormatOptions\n * Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * @public\n * @param skeleton skeleton string\n */\nexport function parseDateTimeSkeleton(skeleton) {\n    var result = {};\n    skeleton.replace(DATE_TIME_REGEX, function (match) {\n        var len = match.length;\n        switch (match[0]) {\n            // Era\n            case 'G':\n                result.era = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';\n                break;\n            // Year\n            case 'y':\n                result.year = len === 2 ? '2-digit' : 'numeric';\n                break;\n            case 'Y':\n            case 'u':\n            case 'U':\n            case 'r':\n                throw new RangeError('`Y/u/U/r` (year) patterns are not supported, use `y` instead');\n            // Quarter\n            case 'q':\n            case 'Q':\n                throw new RangeError('`q/Q` (quarter) patterns are not supported');\n            // Month\n            case 'M':\n            case 'L':\n                result.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][len - 1];\n                break;\n            // Week\n            case 'w':\n            case 'W':\n                throw new RangeError('`w/W` (week) patterns are not supported');\n            case 'd':\n                result.day = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'D':\n            case 'F':\n            case 'g':\n                throw new RangeError('`D/F/g` (day) patterns are not supported, use `d` instead');\n            // Weekday\n            case 'E':\n                result.weekday = len === 4 ? 'short' : len === 5 ? 'narrow' : 'short';\n                break;\n            case 'e':\n                if (len < 4) {\n                    throw new RangeError('`e..eee` (weekday) patterns are not supported');\n                }\n                result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n                break;\n            case 'c':\n                if (len < 4) {\n                    throw new RangeError('`c..ccc` (weekday) patterns are not supported');\n                }\n                result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n                break;\n            // Period\n            case 'a': // AM, PM\n                result.hour12 = true;\n                break;\n            case 'b': // am, pm, noon, midnight\n            case 'B': // flexible day periods\n                throw new RangeError('`b/B` (period) patterns are not supported, use `a` instead');\n            // Hour\n            case 'h':\n                result.hourCycle = 'h12';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'H':\n                result.hourCycle = 'h23';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'K':\n                result.hourCycle = 'h11';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'k':\n                result.hourCycle = 'h24';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'j':\n            case 'J':\n            case 'C':\n                throw new RangeError('`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead');\n            // Minute\n            case 'm':\n                result.minute = ['numeric', '2-digit'][len - 1];\n                break;\n            // Second\n            case 's':\n                result.second = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'S':\n            case 'A':\n                throw new RangeError('`S/A` (second) patterns are not supported, use `s` instead');\n            // Zone\n            case 'z': // 1..3, 4: specific non-location format\n                result.timeZoneName = len < 4 ? 'short' : 'long';\n                break;\n            case 'Z': // 1..3, 4, 5: The ISO8601 varios formats\n            case 'O': // 1, 4: miliseconds in day short, long\n            case 'v': // 1, 4: generic non-location format\n            case 'V': // 1, 2, 3, 4: time zone ID or city\n            case 'X': // 1, 2, 3, 4: The ISO8601 varios formats\n            case 'x': // 1, 2, 3, 4: The ISO8601 varios formats\n                throw new RangeError('`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead');\n        }\n        return '';\n    });\n    return result;\n}\n","// @generated from regex-gen.ts\nexport var WHITE_SPACE_REGEX = /[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/i;\n","import { __assign } from \"tslib\";\nimport { WHITE_SPACE_REGEX } from './regex.generated';\nexport function parseNumberSkeletonFromString(skeleton) {\n    if (skeleton.length === 0) {\n        throw new Error('Number skeleton cannot be empty');\n    }\n    // Parse the skeleton\n    var stringTokens = skeleton\n        .split(WHITE_SPACE_REGEX)\n        .filter(function (x) { return x.length > 0; });\n    var tokens = [];\n    for (var _i = 0, stringTokens_1 = stringTokens; _i < stringTokens_1.length; _i++) {\n        var stringToken = stringTokens_1[_i];\n        var stemAndOptions = stringToken.split('/');\n        if (stemAndOptions.length === 0) {\n            throw new Error('Invalid number skeleton');\n        }\n        var stem = stemAndOptions[0], options = stemAndOptions.slice(1);\n        for (var _a = 0, options_1 = options; _a < options_1.length; _a++) {\n            var option = options_1[_a];\n            if (option.length === 0) {\n                throw new Error('Invalid number skeleton');\n            }\n        }\n        tokens.push({ stem: stem, options: options });\n    }\n    return tokens;\n}\nfunction icuUnitToEcma(unit) {\n    return unit.replace(/^(.*?)-/, '');\n}\nvar FRACTION_PRECISION_REGEX = /^\\.(?:(0+)(\\*)?|(#+)|(0+)(#+))$/g;\nvar SIGNIFICANT_PRECISION_REGEX = /^(@+)?(\\+|#+)?[rs]?$/g;\nvar INTEGER_WIDTH_REGEX = /(\\*)(0+)|(#+)(0+)|(0+)/g;\nvar CONCISE_INTEGER_WIDTH_REGEX = /^(0+)$/;\nfunction parseSignificantPrecision(str) {\n    var result = {};\n    if (str[str.length - 1] === 'r') {\n        result.roundingPriority = 'morePrecision';\n    }\n    else if (str[str.length - 1] === 's') {\n        result.roundingPriority = 'lessPrecision';\n    }\n    str.replace(SIGNIFICANT_PRECISION_REGEX, function (_, g1, g2) {\n        // @@@ case\n        if (typeof g2 !== 'string') {\n            result.minimumSignificantDigits = g1.length;\n            result.maximumSignificantDigits = g1.length;\n        }\n        // @@@+ case\n        else if (g2 === '+') {\n            result.minimumSignificantDigits = g1.length;\n        }\n        // .### case\n        else if (g1[0] === '#') {\n            result.maximumSignificantDigits = g1.length;\n        }\n        // .@@## or .@@@ case\n        else {\n            result.minimumSignificantDigits = g1.length;\n            result.maximumSignificantDigits =\n                g1.length + (typeof g2 === 'string' ? g2.length : 0);\n        }\n        return '';\n    });\n    return result;\n}\nfunction parseSign(str) {\n    switch (str) {\n        case 'sign-auto':\n            return {\n                signDisplay: 'auto',\n            };\n        case 'sign-accounting':\n        case '()':\n            return {\n                currencySign: 'accounting',\n            };\n        case 'sign-always':\n        case '+!':\n            return {\n                signDisplay: 'always',\n            };\n        case 'sign-accounting-always':\n        case '()!':\n            return {\n                signDisplay: 'always',\n                currencySign: 'accounting',\n            };\n        case 'sign-except-zero':\n        case '+?':\n            return {\n                signDisplay: 'exceptZero',\n            };\n        case 'sign-accounting-except-zero':\n        case '()?':\n            return {\n                signDisplay: 'exceptZero',\n                currencySign: 'accounting',\n            };\n        case 'sign-never':\n        case '+_':\n            return {\n                signDisplay: 'never',\n            };\n    }\n}\nfunction parseConciseScientificAndEngineeringStem(stem) {\n    // Engineering\n    var result;\n    if (stem[0] === 'E' && stem[1] === 'E') {\n        result = {\n            notation: 'engineering',\n        };\n        stem = stem.slice(2);\n    }\n    else if (stem[0] === 'E') {\n        result = {\n            notation: 'scientific',\n        };\n        stem = stem.slice(1);\n    }\n    if (result) {\n        var signDisplay = stem.slice(0, 2);\n        if (signDisplay === '+!') {\n            result.signDisplay = 'always';\n            stem = stem.slice(2);\n        }\n        else if (signDisplay === '+?') {\n            result.signDisplay = 'exceptZero';\n            stem = stem.slice(2);\n        }\n        if (!CONCISE_INTEGER_WIDTH_REGEX.test(stem)) {\n            throw new Error('Malformed concise eng/scientific notation');\n        }\n        result.minimumIntegerDigits = stem.length;\n    }\n    return result;\n}\nfunction parseNotationOptions(opt) {\n    var result = {};\n    var signOpts = parseSign(opt);\n    if (signOpts) {\n        return signOpts;\n    }\n    return result;\n}\n/**\n * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options\n */\nexport function parseNumberSkeleton(tokens) {\n    var result = {};\n    for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n        var token = tokens_1[_i];\n        switch (token.stem) {\n            case 'percent':\n            case '%':\n                result.style = 'percent';\n                continue;\n            case '%x100':\n                result.style = 'percent';\n                result.scale = 100;\n                continue;\n            case 'currency':\n                result.style = 'currency';\n                result.currency = token.options[0];\n                continue;\n            case 'group-off':\n            case ',_':\n                result.useGrouping = false;\n                continue;\n            case 'precision-integer':\n            case '.':\n                result.maximumFractionDigits = 0;\n                continue;\n            case 'measure-unit':\n            case 'unit':\n                result.style = 'unit';\n                result.unit = icuUnitToEcma(token.options[0]);\n                continue;\n            case 'compact-short':\n            case 'K':\n                result.notation = 'compact';\n                result.compactDisplay = 'short';\n                continue;\n            case 'compact-long':\n            case 'KK':\n                result.notation = 'compact';\n                result.compactDisplay = 'long';\n                continue;\n            case 'scientific':\n                result = __assign(__assign(__assign({}, result), { notation: 'scientific' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n                continue;\n            case 'engineering':\n                result = __assign(__assign(__assign({}, result), { notation: 'engineering' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n                continue;\n            case 'notation-simple':\n                result.notation = 'standard';\n                continue;\n            // https://github.com/unicode-org/icu/blob/master/icu4c/source/i18n/unicode/unumberformatter.h\n            case 'unit-width-narrow':\n                result.currencyDisplay = 'narrowSymbol';\n                result.unitDisplay = 'narrow';\n                continue;\n            case 'unit-width-short':\n                result.currencyDisplay = 'code';\n                result.unitDisplay = 'short';\n                continue;\n            case 'unit-width-full-name':\n                result.currencyDisplay = 'name';\n                result.unitDisplay = 'long';\n                continue;\n            case 'unit-width-iso-code':\n                result.currencyDisplay = 'symbol';\n                continue;\n            case 'scale':\n                result.scale = parseFloat(token.options[0]);\n                continue;\n            // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n            case 'integer-width':\n                if (token.options.length > 1) {\n                    throw new RangeError('integer-width stems only accept a single optional option');\n                }\n                token.options[0].replace(INTEGER_WIDTH_REGEX, function (_, g1, g2, g3, g4, g5) {\n                    if (g1) {\n                        result.minimumIntegerDigits = g2.length;\n                    }\n                    else if (g3 && g4) {\n                        throw new Error('We currently do not support maximum integer digits');\n                    }\n                    else if (g5) {\n                        throw new Error('We currently do not support exact integer digits');\n                    }\n                    return '';\n                });\n                continue;\n        }\n        // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n        if (CONCISE_INTEGER_WIDTH_REGEX.test(token.stem)) {\n            result.minimumIntegerDigits = token.stem.length;\n            continue;\n        }\n        if (FRACTION_PRECISION_REGEX.test(token.stem)) {\n            // Precision\n            // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#fraction-precision\n            // precision-integer case\n            if (token.options.length > 1) {\n                throw new RangeError('Fraction-precision stems only accept a single optional option');\n            }\n            token.stem.replace(FRACTION_PRECISION_REGEX, function (_, g1, g2, g3, g4, g5) {\n                // .000* case (before ICU67 it was .000+)\n                if (g2 === '*') {\n                    result.minimumFractionDigits = g1.length;\n                }\n                // .### case\n                else if (g3 && g3[0] === '#') {\n                    result.maximumFractionDigits = g3.length;\n                }\n                // .00## case\n                else if (g4 && g5) {\n                    result.minimumFractionDigits = g4.length;\n                    result.maximumFractionDigits = g4.length + g5.length;\n                }\n                else {\n                    result.minimumFractionDigits = g1.length;\n                    result.maximumFractionDigits = g1.length;\n                }\n                return '';\n            });\n            var opt = token.options[0];\n            // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#trailing-zero-display\n            if (opt === 'w') {\n                result = __assign(__assign({}, result), { trailingZeroDisplay: 'stripIfInteger' });\n            }\n            else if (opt) {\n                result = __assign(__assign({}, result), parseSignificantPrecision(opt));\n            }\n            continue;\n        }\n        // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#significant-digits-precision\n        if (SIGNIFICANT_PRECISION_REGEX.test(token.stem)) {\n            result = __assign(__assign({}, result), parseSignificantPrecision(token.stem));\n            continue;\n        }\n        var signOpts = parseSign(token.stem);\n        if (signOpts) {\n            result = __assign(__assign({}, result), signOpts);\n        }\n        var conciseScientificAndEngineeringOpts = parseConciseScientificAndEngineeringStem(token.stem);\n        if (conciseScientificAndEngineeringOpts) {\n            result = __assign(__assign({}, result), conciseScientificAndEngineeringOpts);\n        }\n    }\n    return result;\n}\n","// @generated from time-data-gen.ts\n// prettier-ignore  \nexport var timeData = {\n    \"AX\": [\n        \"H\"\n    ],\n    \"BQ\": [\n        \"H\"\n    ],\n    \"CP\": [\n        \"H\"\n    ],\n    \"CZ\": [\n        \"H\"\n    ],\n    \"DK\": [\n        \"H\"\n    ],\n    \"FI\": [\n        \"H\"\n    ],\n    \"ID\": [\n        \"H\"\n    ],\n    \"IS\": [\n        \"H\"\n    ],\n    \"ML\": [\n        \"H\"\n    ],\n    \"NE\": [\n        \"H\"\n    ],\n    \"RU\": [\n        \"H\"\n    ],\n    \"SE\": [\n        \"H\"\n    ],\n    \"SJ\": [\n        \"H\"\n    ],\n    \"SK\": [\n        \"H\"\n    ],\n    \"AS\": [\n        \"h\",\n        \"H\"\n    ],\n    \"BT\": [\n        \"h\",\n        \"H\"\n    ],\n    \"DJ\": [\n        \"h\",\n        \"H\"\n    ],\n    \"ER\": [\n        \"h\",\n        \"H\"\n    ],\n    \"GH\": [\n        \"h\",\n        \"H\"\n    ],\n    \"IN\": [\n        \"h\",\n        \"H\"\n    ],\n    \"LS\": [\n        \"h\",\n        \"H\"\n    ],\n    \"PG\": [\n        \"h\",\n        \"H\"\n    ],\n    \"PW\": [\n        \"h\",\n        \"H\"\n    ],\n    \"SO\": [\n        \"h\",\n        \"H\"\n    ],\n    \"TO\": [\n        \"h\",\n        \"H\"\n    ],\n    \"VU\": [\n        \"h\",\n        \"H\"\n    ],\n    \"WS\": [\n        \"h\",\n        \"H\"\n    ],\n    \"001\": [\n        \"H\",\n        \"h\"\n    ],\n    \"AL\": [\n        \"h\",\n        \"H\",\n        \"hB\"\n    ],\n    \"TD\": [\n        \"h\",\n        \"H\",\n        \"hB\"\n    ],\n    \"ca-ES\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"CF\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"CM\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"fr-CA\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"gl-ES\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"it-CH\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"it-IT\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"LU\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"NP\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"PF\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"SC\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"SM\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"SN\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"TF\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"VA\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"CY\": [\n        \"h\",\n        \"H\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GR\": [\n        \"h\",\n        \"H\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CO\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"DO\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KP\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KR\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"NA\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"PA\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"PR\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"VE\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"AC\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"AI\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"BW\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"BZ\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CC\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CK\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CX\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"DG\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"FK\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GB\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GG\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GI\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"IE\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"IM\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"IO\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"JE\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"LT\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"MK\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"MN\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"MS\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NF\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NG\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NR\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NU\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"PN\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"SH\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"SX\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"TA\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"ZA\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"af-ZA\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"AR\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"CL\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"CR\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"CU\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"EA\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"es-BO\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"es-BR\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"es-EC\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"es-ES\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"es-GQ\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"es-PE\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"GT\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"HN\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"IC\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KG\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KM\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"LK\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"MA\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"MX\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"NI\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"PY\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"SV\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"UY\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"JP\": [\n        \"H\",\n        \"h\",\n        \"K\"\n    ],\n    \"AD\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AM\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AO\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AW\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BJ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BL\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"CG\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"CI\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"CV\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"DE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"EE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"FR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GA\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GN\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GP\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GW\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"HR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"IL\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"IT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"KZ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"MC\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"MD\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"MF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"MQ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"MZ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"NC\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"NL\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"PM\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"PT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"RE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"RO\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"SI\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"SR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"ST\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"TG\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"TR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"WF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"YT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BD\": [\n        \"h\",\n        \"hB\",\n        \"H\"\n    ],\n    \"PK\": [\n        \"h\",\n        \"hB\",\n        \"H\"\n    ],\n    \"AZ\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"BA\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"BG\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"CH\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"GE\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"LI\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"ME\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"RS\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"UA\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"UZ\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"XK\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"AG\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"AU\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"BB\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"BM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"BS\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"CA\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"DM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"en-001\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"FJ\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"FM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"GD\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"GM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"GU\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"GY\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"JM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"KI\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"KN\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"KY\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"LC\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"LR\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"MH\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"MP\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"MW\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"NZ\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"SB\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"SG\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"SL\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"SS\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"SZ\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"TC\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"TT\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"UM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"US\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"VC\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"VG\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"VI\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"ZM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"BO\": [\n        \"H\",\n        \"hB\",\n        \"h\",\n        \"hb\"\n    ],\n    \"EC\": [\n        \"H\",\n        \"hB\",\n        \"h\",\n        \"hb\"\n    ],\n    \"ES\": [\n        \"H\",\n        \"hB\",\n        \"h\",\n        \"hb\"\n    ],\n    \"GQ\": [\n        \"H\",\n        \"hB\",\n        \"h\",\n        \"hb\"\n    ],\n    \"PE\": [\n        \"H\",\n        \"hB\",\n        \"h\",\n        \"hb\"\n    ],\n    \"AE\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"ar-001\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"BH\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"DZ\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"EG\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"EH\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"HK\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"IQ\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"JO\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"KW\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"LB\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"LY\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"MO\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"MR\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"OM\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"PH\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"PS\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"QA\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"SA\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"SD\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"SY\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"TN\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"YE\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"AF\": [\n        \"H\",\n        \"hb\",\n        \"hB\",\n        \"h\"\n    ],\n    \"LA\": [\n        \"H\",\n        \"hb\",\n        \"hB\",\n        \"h\"\n    ],\n    \"CN\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ],\n    \"LV\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ],\n    \"TL\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ],\n    \"zu-ZA\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ],\n    \"CD\": [\n        \"hB\",\n        \"H\"\n    ],\n    \"IR\": [\n        \"hB\",\n        \"H\"\n    ],\n    \"hi-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"kn-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"ml-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"te-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"KH\": [\n        \"hB\",\n        \"h\",\n        \"H\",\n        \"hb\"\n    ],\n    \"ta-IN\": [\n        \"hB\",\n        \"h\",\n        \"hb\",\n        \"H\"\n    ],\n    \"BN\": [\n        \"hb\",\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"MY\": [\n        \"hb\",\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"ET\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"gu-IN\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"mr-IN\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"pa-IN\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"TW\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"KE\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ],\n    \"MM\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ],\n    \"TZ\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ],\n    \"UG\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ]\n};\n","var _a;\nimport { __assign } from \"tslib\";\nimport { ErrorKind } from './error';\nimport { SKELETON_TYPE, TYPE, } from './types';\nimport { SPACE_SEPARATOR_REGEX } from './regex.generated';\nimport { parseNumberSkeleton, parseNumberSkeletonFromString, parseDateTimeSkeleton, } from '@formatjs/icu-skeleton-parser';\nimport { getBestPattern } from './date-time-pattern-generator';\nvar SPACE_SEPARATOR_START_REGEX = new RegExp(\"^\".concat(SPACE_SEPARATOR_REGEX.source, \"*\"));\nvar SPACE_SEPARATOR_END_REGEX = new RegExp(\"\".concat(SPACE_SEPARATOR_REGEX.source, \"*$\"));\nfunction createLocation(start, end) {\n    return { start: start, end: end };\n}\n// #region Ponyfills\n// Consolidate these variables up top for easier toggling during debugging\nvar hasNativeStartsWith = !!String.prototype.startsWith;\nvar hasNativeFromCodePoint = !!String.fromCodePoint;\nvar hasNativeFromEntries = !!Object.fromEntries;\nvar hasNativeCodePointAt = !!String.prototype.codePointAt;\nvar hasTrimStart = !!String.prototype.trimStart;\nvar hasTrimEnd = !!String.prototype.trimEnd;\nvar hasNativeIsSafeInteger = !!Number.isSafeInteger;\nvar isSafeInteger = hasNativeIsSafeInteger\n    ? Number.isSafeInteger\n    : function (n) {\n        return (typeof n === 'number' &&\n            isFinite(n) &&\n            Math.floor(n) === n &&\n            Math.abs(n) <= 0x1fffffffffffff);\n    };\n// IE11 does not support y and u.\nvar REGEX_SUPPORTS_U_AND_Y = true;\ntry {\n    var re = RE('([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)', 'yu');\n    /**\n     * legacy Edge or Xbox One browser\n     * Unicode flag support: supported\n     * Pattern_Syntax support: not supported\n     * See https://github.com/formatjs/formatjs/issues/2822\n     */\n    REGEX_SUPPORTS_U_AND_Y = ((_a = re.exec('a')) === null || _a === void 0 ? void 0 : _a[0]) === 'a';\n}\ncatch (_) {\n    REGEX_SUPPORTS_U_AND_Y = false;\n}\nvar startsWith = hasNativeStartsWith\n    ? // Native\n        function startsWith(s, search, position) {\n            return s.startsWith(search, position);\n        }\n    : // For IE11\n        function startsWith(s, search, position) {\n            return s.slice(position, position + search.length) === search;\n        };\nvar fromCodePoint = hasNativeFromCodePoint\n    ? String.fromCodePoint\n    : // IE11\n        function fromCodePoint() {\n            var codePoints = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                codePoints[_i] = arguments[_i];\n            }\n            var elements = '';\n            var length = codePoints.length;\n            var i = 0;\n            var code;\n            while (length > i) {\n                code = codePoints[i++];\n                if (code > 0x10ffff)\n                    throw RangeError(code + ' is not a valid code point');\n                elements +=\n                    code < 0x10000\n                        ? String.fromCharCode(code)\n                        : String.fromCharCode(((code -= 0x10000) >> 10) + 0xd800, (code % 0x400) + 0xdc00);\n            }\n            return elements;\n        };\nvar fromEntries = \n// native\nhasNativeFromEntries\n    ? Object.fromEntries\n    : // Ponyfill\n        function fromEntries(entries) {\n            var obj = {};\n            for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n                var _a = entries_1[_i], k = _a[0], v = _a[1];\n                obj[k] = v;\n            }\n            return obj;\n        };\nvar codePointAt = hasNativeCodePointAt\n    ? // Native\n        function codePointAt(s, index) {\n            return s.codePointAt(index);\n        }\n    : // IE 11\n        function codePointAt(s, index) {\n            var size = s.length;\n            if (index < 0 || index >= size) {\n                return undefined;\n            }\n            var first = s.charCodeAt(index);\n            var second;\n            return first < 0xd800 ||\n                first > 0xdbff ||\n                index + 1 === size ||\n                (second = s.charCodeAt(index + 1)) < 0xdc00 ||\n                second > 0xdfff\n                ? first\n                : ((first - 0xd800) << 10) + (second - 0xdc00) + 0x10000;\n        };\nvar trimStart = hasTrimStart\n    ? // Native\n        function trimStart(s) {\n            return s.trimStart();\n        }\n    : // Ponyfill\n        function trimStart(s) {\n            return s.replace(SPACE_SEPARATOR_START_REGEX, '');\n        };\nvar trimEnd = hasTrimEnd\n    ? // Native\n        function trimEnd(s) {\n            return s.trimEnd();\n        }\n    : // Ponyfill\n        function trimEnd(s) {\n            return s.replace(SPACE_SEPARATOR_END_REGEX, '');\n        };\n// Prevent minifier to translate new RegExp to literal form that might cause syntax error on IE11.\nfunction RE(s, flag) {\n    return new RegExp(s, flag);\n}\n// #endregion\nvar matchIdentifierAtIndex;\nif (REGEX_SUPPORTS_U_AND_Y) {\n    // Native\n    var IDENTIFIER_PREFIX_RE_1 = RE('([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)', 'yu');\n    matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) {\n        var _a;\n        IDENTIFIER_PREFIX_RE_1.lastIndex = index;\n        var match = IDENTIFIER_PREFIX_RE_1.exec(s);\n        return (_a = match[1]) !== null && _a !== void 0 ? _a : '';\n    };\n}\nelse {\n    // IE11\n    matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) {\n        var match = [];\n        while (true) {\n            var c = codePointAt(s, index);\n            if (c === undefined || _isWhiteSpace(c) || _isPatternSyntax(c)) {\n                break;\n            }\n            match.push(c);\n            index += c >= 0x10000 ? 2 : 1;\n        }\n        return fromCodePoint.apply(void 0, match);\n    };\n}\nvar Parser = /** @class */ (function () {\n    function Parser(message, options) {\n        if (options === void 0) { options = {}; }\n        this.message = message;\n        this.position = { offset: 0, line: 1, column: 1 };\n        this.ignoreTag = !!options.ignoreTag;\n        this.locale = options.locale;\n        this.requiresOtherClause = !!options.requiresOtherClause;\n        this.shouldParseSkeletons = !!options.shouldParseSkeletons;\n    }\n    Parser.prototype.parse = function () {\n        if (this.offset() !== 0) {\n            throw Error('parser can only be used once');\n        }\n        return this.parseMessage(0, '', false);\n    };\n    Parser.prototype.parseMessage = function (nestingLevel, parentArgType, expectingCloseTag) {\n        var elements = [];\n        while (!this.isEOF()) {\n            var char = this.char();\n            if (char === 123 /* `{` */) {\n                var result = this.parseArgument(nestingLevel, expectingCloseTag);\n                if (result.err) {\n                    return result;\n                }\n                elements.push(result.val);\n            }\n            else if (char === 125 /* `}` */ && nestingLevel > 0) {\n                break;\n            }\n            else if (char === 35 /* `#` */ &&\n                (parentArgType === 'plural' || parentArgType === 'selectordinal')) {\n                var position = this.clonePosition();\n                this.bump();\n                elements.push({\n                    type: TYPE.pound,\n                    location: createLocation(position, this.clonePosition()),\n                });\n            }\n            else if (char === 60 /* `<` */ &&\n                !this.ignoreTag &&\n                this.peek() === 47 // char code for '/'\n            ) {\n                if (expectingCloseTag) {\n                    break;\n                }\n                else {\n                    return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(this.clonePosition(), this.clonePosition()));\n                }\n            }\n            else if (char === 60 /* `<` */ &&\n                !this.ignoreTag &&\n                _isAlpha(this.peek() || 0)) {\n                var result = this.parseTag(nestingLevel, parentArgType);\n                if (result.err) {\n                    return result;\n                }\n                elements.push(result.val);\n            }\n            else {\n                var result = this.parseLiteral(nestingLevel, parentArgType);\n                if (result.err) {\n                    return result;\n                }\n                elements.push(result.val);\n            }\n        }\n        return { val: elements, err: null };\n    };\n    /**\n     * A tag name must start with an ASCII lower/upper case letter. The grammar is based on the\n     * [custom element name][] except that a dash is NOT always mandatory and uppercase letters\n     * are accepted:\n     *\n     * ```\n     * tag ::= \"<\" tagName (whitespace)* \"/>\" | \"<\" tagName (whitespace)* \">\" message \"</\" tagName (whitespace)* \">\"\n     * tagName ::= [a-z] (PENChar)*\n     * PENChar ::=\n     *     \"-\" | \".\" | [0-9] | \"_\" | [a-z] | [A-Z] | #xB7 | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x37D] |\n     *     [#x37F-#x1FFF] | [#x200C-#x200D] | [#x203F-#x2040] | [#x2070-#x218F] | [#x2C00-#x2FEF] |\n     *     [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n     * ```\n     *\n     * [custom element name]: https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\n     * NOTE: We're a bit more lax here since HTML technically does not allow uppercase HTML element but we do\n     * since other tag-based engines like React allow it\n     */\n    Parser.prototype.parseTag = function (nestingLevel, parentArgType) {\n        var startPosition = this.clonePosition();\n        this.bump(); // `<`\n        var tagName = this.parseTagName();\n        this.bumpSpace();\n        if (this.bumpIf('/>')) {\n            // Self closing tag\n            return {\n                val: {\n                    type: TYPE.literal,\n                    value: \"<\".concat(tagName, \"/>\"),\n                    location: createLocation(startPosition, this.clonePosition()),\n                },\n                err: null,\n            };\n        }\n        else if (this.bumpIf('>')) {\n            var childrenResult = this.parseMessage(nestingLevel + 1, parentArgType, true);\n            if (childrenResult.err) {\n                return childrenResult;\n            }\n            var children = childrenResult.val;\n            // Expecting a close tag\n            var endTagStartPosition = this.clonePosition();\n            if (this.bumpIf('</')) {\n                if (this.isEOF() || !_isAlpha(this.char())) {\n                    return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition()));\n                }\n                var closingTagNameStartPosition = this.clonePosition();\n                var closingTagName = this.parseTagName();\n                if (tagName !== closingTagName) {\n                    return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(closingTagNameStartPosition, this.clonePosition()));\n                }\n                this.bumpSpace();\n                if (!this.bumpIf('>')) {\n                    return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition()));\n                }\n                return {\n                    val: {\n                        type: TYPE.tag,\n                        value: tagName,\n                        children: children,\n                        location: createLocation(startPosition, this.clonePosition()),\n                    },\n                    err: null,\n                };\n            }\n            else {\n                return this.error(ErrorKind.UNCLOSED_TAG, createLocation(startPosition, this.clonePosition()));\n            }\n        }\n        else {\n            return this.error(ErrorKind.INVALID_TAG, createLocation(startPosition, this.clonePosition()));\n        }\n    };\n    /**\n     * This method assumes that the caller has peeked ahead for the first tag character.\n     */\n    Parser.prototype.parseTagName = function () {\n        var startOffset = this.offset();\n        this.bump(); // the first tag name character\n        while (!this.isEOF() && _isPotentialElementNameChar(this.char())) {\n            this.bump();\n        }\n        return this.message.slice(startOffset, this.offset());\n    };\n    Parser.prototype.parseLiteral = function (nestingLevel, parentArgType) {\n        var start = this.clonePosition();\n        var value = '';\n        while (true) {\n            var parseQuoteResult = this.tryParseQuote(parentArgType);\n            if (parseQuoteResult) {\n                value += parseQuoteResult;\n                continue;\n            }\n            var parseUnquotedResult = this.tryParseUnquoted(nestingLevel, parentArgType);\n            if (parseUnquotedResult) {\n                value += parseUnquotedResult;\n                continue;\n            }\n            var parseLeftAngleResult = this.tryParseLeftAngleBracket();\n            if (parseLeftAngleResult) {\n                value += parseLeftAngleResult;\n                continue;\n            }\n            break;\n        }\n        var location = createLocation(start, this.clonePosition());\n        return {\n            val: { type: TYPE.literal, value: value, location: location },\n            err: null,\n        };\n    };\n    Parser.prototype.tryParseLeftAngleBracket = function () {\n        if (!this.isEOF() &&\n            this.char() === 60 /* `<` */ &&\n            (this.ignoreTag ||\n                // If at the opening tag or closing tag position, bail.\n                !_isAlphaOrSlash(this.peek() || 0))) {\n            this.bump(); // `<`\n            return '<';\n        }\n        return null;\n    };\n    /**\n     * Starting with ICU 4.8, an ASCII apostrophe only starts quoted text if it immediately precedes\n     * a character that requires quoting (that is, \"only where needed\"), and works the same in\n     * nested messages as on the top level of the pattern. The new behavior is otherwise compatible.\n     */\n    Parser.prototype.tryParseQuote = function (parentArgType) {\n        if (this.isEOF() || this.char() !== 39 /* `'` */) {\n            return null;\n        }\n        // Parse escaped char following the apostrophe, or early return if there is no escaped char.\n        // Check if is valid escaped character\n        switch (this.peek()) {\n            case 39 /* `'` */:\n                // double quote, should return as a single quote.\n                this.bump();\n                this.bump();\n                return \"'\";\n            // '{', '<', '>', '}'\n            case 123:\n            case 60:\n            case 62:\n            case 125:\n                break;\n            case 35: // '#'\n                if (parentArgType === 'plural' || parentArgType === 'selectordinal') {\n                    break;\n                }\n                return null;\n            default:\n                return null;\n        }\n        this.bump(); // apostrophe\n        var codePoints = [this.char()]; // escaped char\n        this.bump();\n        // read chars until the optional closing apostrophe is found\n        while (!this.isEOF()) {\n            var ch = this.char();\n            if (ch === 39 /* `'` */) {\n                if (this.peek() === 39 /* `'` */) {\n                    codePoints.push(39);\n                    // Bump one more time because we need to skip 2 characters.\n                    this.bump();\n                }\n                else {\n                    // Optional closing apostrophe.\n                    this.bump();\n                    break;\n                }\n            }\n            else {\n                codePoints.push(ch);\n            }\n            this.bump();\n        }\n        return fromCodePoint.apply(void 0, codePoints);\n    };\n    Parser.prototype.tryParseUnquoted = function (nestingLevel, parentArgType) {\n        if (this.isEOF()) {\n            return null;\n        }\n        var ch = this.char();\n        if (ch === 60 /* `<` */ ||\n            ch === 123 /* `{` */ ||\n            (ch === 35 /* `#` */ &&\n                (parentArgType === 'plural' || parentArgType === 'selectordinal')) ||\n            (ch === 125 /* `}` */ && nestingLevel > 0)) {\n            return null;\n        }\n        else {\n            this.bump();\n            return fromCodePoint(ch);\n        }\n    };\n    Parser.prototype.parseArgument = function (nestingLevel, expectingCloseTag) {\n        var openingBracePosition = this.clonePosition();\n        this.bump(); // `{`\n        this.bumpSpace();\n        if (this.isEOF()) {\n            return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        if (this.char() === 125 /* `}` */) {\n            this.bump();\n            return this.error(ErrorKind.EMPTY_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        // argument name\n        var value = this.parseIdentifierIfPossible().value;\n        if (!value) {\n            return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        this.bumpSpace();\n        if (this.isEOF()) {\n            return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        switch (this.char()) {\n            // Simple argument: `{name}`\n            case 125 /* `}` */: {\n                this.bump(); // `}`\n                return {\n                    val: {\n                        type: TYPE.argument,\n                        // value does not include the opening and closing braces.\n                        value: value,\n                        location: createLocation(openingBracePosition, this.clonePosition()),\n                    },\n                    err: null,\n                };\n            }\n            // Argument with options: `{name, format, ...}`\n            case 44 /* `,` */: {\n                this.bump(); // `,`\n                this.bumpSpace();\n                if (this.isEOF()) {\n                    return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n                }\n                return this.parseArgumentOptions(nestingLevel, expectingCloseTag, value, openingBracePosition);\n            }\n            default:\n                return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n        }\n    };\n    /**\n     * Advance the parser until the end of the identifier, if it is currently on\n     * an identifier character. Return an empty string otherwise.\n     */\n    Parser.prototype.parseIdentifierIfPossible = function () {\n        var startingPosition = this.clonePosition();\n        var startOffset = this.offset();\n        var value = matchIdentifierAtIndex(this.message, startOffset);\n        var endOffset = startOffset + value.length;\n        this.bumpTo(endOffset);\n        var endPosition = this.clonePosition();\n        var location = createLocation(startingPosition, endPosition);\n        return { value: value, location: location };\n    };\n    Parser.prototype.parseArgumentOptions = function (nestingLevel, expectingCloseTag, value, openingBracePosition) {\n        var _a;\n        // Parse this range:\n        // {name, type, style}\n        //        ^---^\n        var typeStartPosition = this.clonePosition();\n        var argType = this.parseIdentifierIfPossible().value;\n        var typeEndPosition = this.clonePosition();\n        switch (argType) {\n            case '':\n                // Expecting a style string number, date, time, plural, selectordinal, or select.\n                return this.error(ErrorKind.EXPECT_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));\n            case 'number':\n            case 'date':\n            case 'time': {\n                // Parse this range:\n                // {name, number, style}\n                //              ^-------^\n                this.bumpSpace();\n                var styleAndLocation = null;\n                if (this.bumpIf(',')) {\n                    this.bumpSpace();\n                    var styleStartPosition = this.clonePosition();\n                    var result = this.parseSimpleArgStyleIfPossible();\n                    if (result.err) {\n                        return result;\n                    }\n                    var style = trimEnd(result.val);\n                    if (style.length === 0) {\n                        return this.error(ErrorKind.EXPECT_ARGUMENT_STYLE, createLocation(this.clonePosition(), this.clonePosition()));\n                    }\n                    var styleLocation = createLocation(styleStartPosition, this.clonePosition());\n                    styleAndLocation = { style: style, styleLocation: styleLocation };\n                }\n                var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n                if (argCloseResult.err) {\n                    return argCloseResult;\n                }\n                var location_1 = createLocation(openingBracePosition, this.clonePosition());\n                // Extract style or skeleton\n                if (styleAndLocation && startsWith(styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style, '::', 0)) {\n                    // Skeleton starts with `::`.\n                    var skeleton = trimStart(styleAndLocation.style.slice(2));\n                    if (argType === 'number') {\n                        var result = this.parseNumberSkeletonFromString(skeleton, styleAndLocation.styleLocation);\n                        if (result.err) {\n                            return result;\n                        }\n                        return {\n                            val: { type: TYPE.number, value: value, location: location_1, style: result.val },\n                            err: null,\n                        };\n                    }\n                    else {\n                        if (skeleton.length === 0) {\n                            return this.error(ErrorKind.EXPECT_DATE_TIME_SKELETON, location_1);\n                        }\n                        var dateTimePattern = skeleton;\n                        // Get \"best match\" pattern only if locale is passed, if not, let it\n                        // pass as-is where `parseDateTimeSkeleton()` will throw an error\n                        // for unsupported patterns.\n                        if (this.locale) {\n                            dateTimePattern = getBestPattern(skeleton, this.locale);\n                        }\n                        var style = {\n                            type: SKELETON_TYPE.dateTime,\n                            pattern: dateTimePattern,\n                            location: styleAndLocation.styleLocation,\n                            parsedOptions: this.shouldParseSkeletons\n                                ? parseDateTimeSkeleton(dateTimePattern)\n                                : {},\n                        };\n                        var type = argType === 'date' ? TYPE.date : TYPE.time;\n                        return {\n                            val: { type: type, value: value, location: location_1, style: style },\n                            err: null,\n                        };\n                    }\n                }\n                // Regular style or no style.\n                return {\n                    val: {\n                        type: argType === 'number'\n                            ? TYPE.number\n                            : argType === 'date'\n                                ? TYPE.date\n                                : TYPE.time,\n                        value: value,\n                        location: location_1,\n                        style: (_a = styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style) !== null && _a !== void 0 ? _a : null,\n                    },\n                    err: null,\n                };\n            }\n            case 'plural':\n            case 'selectordinal':\n            case 'select': {\n                // Parse this range:\n                // {name, plural, options}\n                //              ^---------^\n                var typeEndPosition_1 = this.clonePosition();\n                this.bumpSpace();\n                if (!this.bumpIf(',')) {\n                    return this.error(ErrorKind.EXPECT_SELECT_ARGUMENT_OPTIONS, createLocation(typeEndPosition_1, __assign({}, typeEndPosition_1)));\n                }\n                this.bumpSpace();\n                // Parse offset:\n                // {name, plural, offset:1, options}\n                //                ^-----^\n                //\n                // or the first option:\n                //\n                // {name, plural, one {...} other {...}}\n                //                ^--^\n                var identifierAndLocation = this.parseIdentifierIfPossible();\n                var pluralOffset = 0;\n                if (argType !== 'select' && identifierAndLocation.value === 'offset') {\n                    if (!this.bumpIf(':')) {\n                        return this.error(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, createLocation(this.clonePosition(), this.clonePosition()));\n                    }\n                    this.bumpSpace();\n                    var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, ErrorKind.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE);\n                    if (result.err) {\n                        return result;\n                    }\n                    // Parse another identifier for option parsing\n                    this.bumpSpace();\n                    identifierAndLocation = this.parseIdentifierIfPossible();\n                    pluralOffset = result.val;\n                }\n                var optionsResult = this.tryParsePluralOrSelectOptions(nestingLevel, argType, expectingCloseTag, identifierAndLocation);\n                if (optionsResult.err) {\n                    return optionsResult;\n                }\n                var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n                if (argCloseResult.err) {\n                    return argCloseResult;\n                }\n                var location_2 = createLocation(openingBracePosition, this.clonePosition());\n                if (argType === 'select') {\n                    return {\n                        val: {\n                            type: TYPE.select,\n                            value: value,\n                            options: fromEntries(optionsResult.val),\n                            location: location_2,\n                        },\n                        err: null,\n                    };\n                }\n                else {\n                    return {\n                        val: {\n                            type: TYPE.plural,\n                            value: value,\n                            options: fromEntries(optionsResult.val),\n                            offset: pluralOffset,\n                            pluralType: argType === 'plural' ? 'cardinal' : 'ordinal',\n                            location: location_2,\n                        },\n                        err: null,\n                    };\n                }\n            }\n            default:\n                return this.error(ErrorKind.INVALID_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));\n        }\n    };\n    Parser.prototype.tryParseArgumentClose = function (openingBracePosition) {\n        // Parse: {value, number, ::currency/GBP }\n        //\n        if (this.isEOF() || this.char() !== 125 /* `}` */) {\n            return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        this.bump(); // `}`\n        return { val: true, err: null };\n    };\n    /**\n     * See: https://github.com/unicode-org/icu/blob/af7ed1f6d2298013dc303628438ec4abe1f16479/icu4c/source/common/messagepattern.cpp#L659\n     */\n    Parser.prototype.parseSimpleArgStyleIfPossible = function () {\n        var nestedBraces = 0;\n        var startPosition = this.clonePosition();\n        while (!this.isEOF()) {\n            var ch = this.char();\n            switch (ch) {\n                case 39 /* `'` */: {\n                    // Treat apostrophe as quoting but include it in the style part.\n                    // Find the end of the quoted literal text.\n                    this.bump();\n                    var apostrophePosition = this.clonePosition();\n                    if (!this.bumpUntil(\"'\")) {\n                        return this.error(ErrorKind.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE, createLocation(apostrophePosition, this.clonePosition()));\n                    }\n                    this.bump();\n                    break;\n                }\n                case 123 /* `{` */: {\n                    nestedBraces += 1;\n                    this.bump();\n                    break;\n                }\n                case 125 /* `}` */: {\n                    if (nestedBraces > 0) {\n                        nestedBraces -= 1;\n                    }\n                    else {\n                        return {\n                            val: this.message.slice(startPosition.offset, this.offset()),\n                            err: null,\n                        };\n                    }\n                    break;\n                }\n                default:\n                    this.bump();\n                    break;\n            }\n        }\n        return {\n            val: this.message.slice(startPosition.offset, this.offset()),\n            err: null,\n        };\n    };\n    Parser.prototype.parseNumberSkeletonFromString = function (skeleton, location) {\n        var tokens = [];\n        try {\n            tokens = parseNumberSkeletonFromString(skeleton);\n        }\n        catch (e) {\n            return this.error(ErrorKind.INVALID_NUMBER_SKELETON, location);\n        }\n        return {\n            val: {\n                type: SKELETON_TYPE.number,\n                tokens: tokens,\n                location: location,\n                parsedOptions: this.shouldParseSkeletons\n                    ? parseNumberSkeleton(tokens)\n                    : {},\n            },\n            err: null,\n        };\n    };\n    /**\n     * @param nesting_level The current nesting level of messages.\n     *     This can be positive when parsing message fragment in select or plural argument options.\n     * @param parent_arg_type The parent argument's type.\n     * @param parsed_first_identifier If provided, this is the first identifier-like selector of\n     *     the argument. It is a by-product of a previous parsing attempt.\n     * @param expecting_close_tag If true, this message is directly or indirectly nested inside\n     *     between a pair of opening and closing tags. The nested message will not parse beyond\n     *     the closing tag boundary.\n     */\n    Parser.prototype.tryParsePluralOrSelectOptions = function (nestingLevel, parentArgType, expectCloseTag, parsedFirstIdentifier) {\n        var _a;\n        var hasOtherClause = false;\n        var options = [];\n        var parsedSelectors = new Set();\n        var selector = parsedFirstIdentifier.value, selectorLocation = parsedFirstIdentifier.location;\n        // Parse:\n        // one {one apple}\n        // ^--^\n        while (true) {\n            if (selector.length === 0) {\n                var startPosition = this.clonePosition();\n                if (parentArgType !== 'select' && this.bumpIf('=')) {\n                    // Try parse `={number}` selector\n                    var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, ErrorKind.INVALID_PLURAL_ARGUMENT_SELECTOR);\n                    if (result.err) {\n                        return result;\n                    }\n                    selectorLocation = createLocation(startPosition, this.clonePosition());\n                    selector = this.message.slice(startPosition.offset, this.offset());\n                }\n                else {\n                    break;\n                }\n            }\n            // Duplicate selector clauses\n            if (parsedSelectors.has(selector)) {\n                return this.error(parentArgType === 'select'\n                    ? ErrorKind.DUPLICATE_SELECT_ARGUMENT_SELECTOR\n                    : ErrorKind.DUPLICATE_PLURAL_ARGUMENT_SELECTOR, selectorLocation);\n            }\n            if (selector === 'other') {\n                hasOtherClause = true;\n            }\n            // Parse:\n            // one {one apple}\n            //     ^----------^\n            this.bumpSpace();\n            var openingBracePosition = this.clonePosition();\n            if (!this.bumpIf('{')) {\n                return this.error(parentArgType === 'select'\n                    ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\n                    : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT, createLocation(this.clonePosition(), this.clonePosition()));\n            }\n            var fragmentResult = this.parseMessage(nestingLevel + 1, parentArgType, expectCloseTag);\n            if (fragmentResult.err) {\n                return fragmentResult;\n            }\n            var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n            if (argCloseResult.err) {\n                return argCloseResult;\n            }\n            options.push([\n                selector,\n                {\n                    value: fragmentResult.val,\n                    location: createLocation(openingBracePosition, this.clonePosition()),\n                },\n            ]);\n            // Keep track of the existing selectors\n            parsedSelectors.add(selector);\n            // Prep next selector clause.\n            this.bumpSpace();\n            (_a = this.parseIdentifierIfPossible(), selector = _a.value, selectorLocation = _a.location);\n        }\n        if (options.length === 0) {\n            return this.error(parentArgType === 'select'\n                ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR\n                : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, createLocation(this.clonePosition(), this.clonePosition()));\n        }\n        if (this.requiresOtherClause && !hasOtherClause) {\n            return this.error(ErrorKind.MISSING_OTHER_CLAUSE, createLocation(this.clonePosition(), this.clonePosition()));\n        }\n        return { val: options, err: null };\n    };\n    Parser.prototype.tryParseDecimalInteger = function (expectNumberError, invalidNumberError) {\n        var sign = 1;\n        var startingPosition = this.clonePosition();\n        if (this.bumpIf('+')) {\n        }\n        else if (this.bumpIf('-')) {\n            sign = -1;\n        }\n        var hasDigits = false;\n        var decimal = 0;\n        while (!this.isEOF()) {\n            var ch = this.char();\n            if (ch >= 48 /* `0` */ && ch <= 57 /* `9` */) {\n                hasDigits = true;\n                decimal = decimal * 10 + (ch - 48);\n                this.bump();\n            }\n            else {\n                break;\n            }\n        }\n        var location = createLocation(startingPosition, this.clonePosition());\n        if (!hasDigits) {\n            return this.error(expectNumberError, location);\n        }\n        decimal *= sign;\n        if (!isSafeInteger(decimal)) {\n            return this.error(invalidNumberError, location);\n        }\n        return { val: decimal, err: null };\n    };\n    Parser.prototype.offset = function () {\n        return this.position.offset;\n    };\n    Parser.prototype.isEOF = function () {\n        return this.offset() === this.message.length;\n    };\n    Parser.prototype.clonePosition = function () {\n        // This is much faster than `Object.assign` or spread.\n        return {\n            offset: this.position.offset,\n            line: this.position.line,\n            column: this.position.column,\n        };\n    };\n    /**\n     * Return the code point at the current position of the parser.\n     * Throws if the index is out of bound.\n     */\n    Parser.prototype.char = function () {\n        var offset = this.position.offset;\n        if (offset >= this.message.length) {\n            throw Error('out of bound');\n        }\n        var code = codePointAt(this.message, offset);\n        if (code === undefined) {\n            throw Error(\"Offset \".concat(offset, \" is at invalid UTF-16 code unit boundary\"));\n        }\n        return code;\n    };\n    Parser.prototype.error = function (kind, location) {\n        return {\n            val: null,\n            err: {\n                kind: kind,\n                message: this.message,\n                location: location,\n            },\n        };\n    };\n    /** Bump the parser to the next UTF-16 code unit. */\n    Parser.prototype.bump = function () {\n        if (this.isEOF()) {\n            return;\n        }\n        var code = this.char();\n        if (code === 10 /* '\\n' */) {\n            this.position.line += 1;\n            this.position.column = 1;\n            this.position.offset += 1;\n        }\n        else {\n            this.position.column += 1;\n            // 0 ~ 0x10000 -> unicode BMP, otherwise skip the surrogate pair.\n            this.position.offset += code < 0x10000 ? 1 : 2;\n        }\n    };\n    /**\n     * If the substring starting at the current position of the parser has\n     * the given prefix, then bump the parser to the character immediately\n     * following the prefix and return true. Otherwise, don't bump the parser\n     * and return false.\n     */\n    Parser.prototype.bumpIf = function (prefix) {\n        if (startsWith(this.message, prefix, this.offset())) {\n            for (var i = 0; i < prefix.length; i++) {\n                this.bump();\n            }\n            return true;\n        }\n        return false;\n    };\n    /**\n     * Bump the parser until the pattern character is found and return `true`.\n     * Otherwise bump to the end of the file and return `false`.\n     */\n    Parser.prototype.bumpUntil = function (pattern) {\n        var currentOffset = this.offset();\n        var index = this.message.indexOf(pattern, currentOffset);\n        if (index >= 0) {\n            this.bumpTo(index);\n            return true;\n        }\n        else {\n            this.bumpTo(this.message.length);\n            return false;\n        }\n    };\n    /**\n     * Bump the parser to the target offset.\n     * If target offset is beyond the end of the input, bump the parser to the end of the input.\n     */\n    Parser.prototype.bumpTo = function (targetOffset) {\n        if (this.offset() > targetOffset) {\n            throw Error(\"targetOffset \".concat(targetOffset, \" must be greater than or equal to the current offset \").concat(this.offset()));\n        }\n        targetOffset = Math.min(targetOffset, this.message.length);\n        while (true) {\n            var offset = this.offset();\n            if (offset === targetOffset) {\n                break;\n            }\n            if (offset > targetOffset) {\n                throw Error(\"targetOffset \".concat(targetOffset, \" is at invalid UTF-16 code unit boundary\"));\n            }\n            this.bump();\n            if (this.isEOF()) {\n                break;\n            }\n        }\n    };\n    /** advance the parser through all whitespace to the next non-whitespace code unit. */\n    Parser.prototype.bumpSpace = function () {\n        while (!this.isEOF() && _isWhiteSpace(this.char())) {\n            this.bump();\n        }\n    };\n    /**\n     * Peek at the *next* Unicode codepoint in the input without advancing the parser.\n     * If the input has been exhausted, then this returns null.\n     */\n    Parser.prototype.peek = function () {\n        if (this.isEOF()) {\n            return null;\n        }\n        var code = this.char();\n        var offset = this.offset();\n        var nextCode = this.message.charCodeAt(offset + (code >= 0x10000 ? 2 : 1));\n        return nextCode !== null && nextCode !== void 0 ? nextCode : null;\n    };\n    return Parser;\n}());\nexport { Parser };\n/**\n * This check if codepoint is alphabet (lower & uppercase)\n * @param codepoint\n * @returns\n */\nfunction _isAlpha(codepoint) {\n    return ((codepoint >= 97 && codepoint <= 122) ||\n        (codepoint >= 65 && codepoint <= 90));\n}\nfunction _isAlphaOrSlash(codepoint) {\n    return _isAlpha(codepoint) || codepoint === 47; /* '/' */\n}\n/** See `parseTag` function docs. */\nfunction _isPotentialElementNameChar(c) {\n    return (c === 45 /* '-' */ ||\n        c === 46 /* '.' */ ||\n        (c >= 48 && c <= 57) /* 0..9 */ ||\n        c === 95 /* '_' */ ||\n        (c >= 97 && c <= 122) /** a..z */ ||\n        (c >= 65 && c <= 90) /* A..Z */ ||\n        c == 0xb7 ||\n        (c >= 0xc0 && c <= 0xd6) ||\n        (c >= 0xd8 && c <= 0xf6) ||\n        (c >= 0xf8 && c <= 0x37d) ||\n        (c >= 0x37f && c <= 0x1fff) ||\n        (c >= 0x200c && c <= 0x200d) ||\n        (c >= 0x203f && c <= 0x2040) ||\n        (c >= 0x2070 && c <= 0x218f) ||\n        (c >= 0x2c00 && c <= 0x2fef) ||\n        (c >= 0x3001 && c <= 0xd7ff) ||\n        (c >= 0xf900 && c <= 0xfdcf) ||\n        (c >= 0xfdf0 && c <= 0xfffd) ||\n        (c >= 0x10000 && c <= 0xeffff));\n}\n/**\n * Code point equivalent of regex `\\p{White_Space}`.\n * From: https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n */\nfunction _isWhiteSpace(c) {\n    return ((c >= 0x0009 && c <= 0x000d) ||\n        c === 0x0020 ||\n        c === 0x0085 ||\n        (c >= 0x200e && c <= 0x200f) ||\n        c === 0x2028 ||\n        c === 0x2029);\n}\n/**\n * Code point equivalent of regex `\\p{Pattern_Syntax}`.\n * See https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n */\nfunction _isPatternSyntax(c) {\n    return ((c >= 0x0021 && c <= 0x0023) ||\n        c === 0x0024 ||\n        (c >= 0x0025 && c <= 0x0027) ||\n        c === 0x0028 ||\n        c === 0x0029 ||\n        c === 0x002a ||\n        c === 0x002b ||\n        c === 0x002c ||\n        c === 0x002d ||\n        (c >= 0x002e && c <= 0x002f) ||\n        (c >= 0x003a && c <= 0x003b) ||\n        (c >= 0x003c && c <= 0x003e) ||\n        (c >= 0x003f && c <= 0x0040) ||\n        c === 0x005b ||\n        c === 0x005c ||\n        c === 0x005d ||\n        c === 0x005e ||\n        c === 0x0060 ||\n        c === 0x007b ||\n        c === 0x007c ||\n        c === 0x007d ||\n        c === 0x007e ||\n        c === 0x00a1 ||\n        (c >= 0x00a2 && c <= 0x00a5) ||\n        c === 0x00a6 ||\n        c === 0x00a7 ||\n        c === 0x00a9 ||\n        c === 0x00ab ||\n        c === 0x00ac ||\n        c === 0x00ae ||\n        c === 0x00b0 ||\n        c === 0x00b1 ||\n        c === 0x00b6 ||\n        c === 0x00bb ||\n        c === 0x00bf ||\n        c === 0x00d7 ||\n        c === 0x00f7 ||\n        (c >= 0x2010 && c <= 0x2015) ||\n        (c >= 0x2016 && c <= 0x2017) ||\n        c === 0x2018 ||\n        c === 0x2019 ||\n        c === 0x201a ||\n        (c >= 0x201b && c <= 0x201c) ||\n        c === 0x201d ||\n        c === 0x201e ||\n        c === 0x201f ||\n        (c >= 0x2020 && c <= 0x2027) ||\n        (c >= 0x2030 && c <= 0x2038) ||\n        c === 0x2039 ||\n        c === 0x203a ||\n        (c >= 0x203b && c <= 0x203e) ||\n        (c >= 0x2041 && c <= 0x2043) ||\n        c === 0x2044 ||\n        c === 0x2045 ||\n        c === 0x2046 ||\n        (c >= 0x2047 && c <= 0x2051) ||\n        c === 0x2052 ||\n        c === 0x2053 ||\n        (c >= 0x2055 && c <= 0x205e) ||\n        (c >= 0x2190 && c <= 0x2194) ||\n        (c >= 0x2195 && c <= 0x2199) ||\n        (c >= 0x219a && c <= 0x219b) ||\n        (c >= 0x219c && c <= 0x219f) ||\n        c === 0x21a0 ||\n        (c >= 0x21a1 && c <= 0x21a2) ||\n        c === 0x21a3 ||\n        (c >= 0x21a4 && c <= 0x21a5) ||\n        c === 0x21a6 ||\n        (c >= 0x21a7 && c <= 0x21ad) ||\n        c === 0x21ae ||\n        (c >= 0x21af && c <= 0x21cd) ||\n        (c >= 0x21ce && c <= 0x21cf) ||\n        (c >= 0x21d0 && c <= 0x21d1) ||\n        c === 0x21d2 ||\n        c === 0x21d3 ||\n        c === 0x21d4 ||\n        (c >= 0x21d5 && c <= 0x21f3) ||\n        (c >= 0x21f4 && c <= 0x22ff) ||\n        (c >= 0x2300 && c <= 0x2307) ||\n        c === 0x2308 ||\n        c === 0x2309 ||\n        c === 0x230a ||\n        c === 0x230b ||\n        (c >= 0x230c && c <= 0x231f) ||\n        (c >= 0x2320 && c <= 0x2321) ||\n        (c >= 0x2322 && c <= 0x2328) ||\n        c === 0x2329 ||\n        c === 0x232a ||\n        (c >= 0x232b && c <= 0x237b) ||\n        c === 0x237c ||\n        (c >= 0x237d && c <= 0x239a) ||\n        (c >= 0x239b && c <= 0x23b3) ||\n        (c >= 0x23b4 && c <= 0x23db) ||\n        (c >= 0x23dc && c <= 0x23e1) ||\n        (c >= 0x23e2 && c <= 0x2426) ||\n        (c >= 0x2427 && c <= 0x243f) ||\n        (c >= 0x2440 && c <= 0x244a) ||\n        (c >= 0x244b && c <= 0x245f) ||\n        (c >= 0x2500 && c <= 0x25b6) ||\n        c === 0x25b7 ||\n        (c >= 0x25b8 && c <= 0x25c0) ||\n        c === 0x25c1 ||\n        (c >= 0x25c2 && c <= 0x25f7) ||\n        (c >= 0x25f8 && c <= 0x25ff) ||\n        (c >= 0x2600 && c <= 0x266e) ||\n        c === 0x266f ||\n        (c >= 0x2670 && c <= 0x2767) ||\n        c === 0x2768 ||\n        c === 0x2769 ||\n        c === 0x276a ||\n        c === 0x276b ||\n        c === 0x276c ||\n        c === 0x276d ||\n        c === 0x276e ||\n        c === 0x276f ||\n        c === 0x2770 ||\n        c === 0x2771 ||\n        c === 0x2772 ||\n        c === 0x2773 ||\n        c === 0x2774 ||\n        c === 0x2775 ||\n        (c >= 0x2794 && c <= 0x27bf) ||\n        (c >= 0x27c0 && c <= 0x27c4) ||\n        c === 0x27c5 ||\n        c === 0x27c6 ||\n        (c >= 0x27c7 && c <= 0x27e5) ||\n        c === 0x27e6 ||\n        c === 0x27e7 ||\n        c === 0x27e8 ||\n        c === 0x27e9 ||\n        c === 0x27ea ||\n        c === 0x27eb ||\n        c === 0x27ec ||\n        c === 0x27ed ||\n        c === 0x27ee ||\n        c === 0x27ef ||\n        (c >= 0x27f0 && c <= 0x27ff) ||\n        (c >= 0x2800 && c <= 0x28ff) ||\n        (c >= 0x2900 && c <= 0x2982) ||\n        c === 0x2983 ||\n        c === 0x2984 ||\n        c === 0x2985 ||\n        c === 0x2986 ||\n        c === 0x2987 ||\n        c === 0x2988 ||\n        c === 0x2989 ||\n        c === 0x298a ||\n        c === 0x298b ||\n        c === 0x298c ||\n        c === 0x298d ||\n        c === 0x298e ||\n        c === 0x298f ||\n        c === 0x2990 ||\n        c === 0x2991 ||\n        c === 0x2992 ||\n        c === 0x2993 ||\n        c === 0x2994 ||\n        c === 0x2995 ||\n        c === 0x2996 ||\n        c === 0x2997 ||\n        c === 0x2998 ||\n        (c >= 0x2999 && c <= 0x29d7) ||\n        c === 0x29d8 ||\n        c === 0x29d9 ||\n        c === 0x29da ||\n        c === 0x29db ||\n        (c >= 0x29dc && c <= 0x29fb) ||\n        c === 0x29fc ||\n        c === 0x29fd ||\n        (c >= 0x29fe && c <= 0x2aff) ||\n        (c >= 0x2b00 && c <= 0x2b2f) ||\n        (c >= 0x2b30 && c <= 0x2b44) ||\n        (c >= 0x2b45 && c <= 0x2b46) ||\n        (c >= 0x2b47 && c <= 0x2b4c) ||\n        (c >= 0x2b4d && c <= 0x2b73) ||\n        (c >= 0x2b74 && c <= 0x2b75) ||\n        (c >= 0x2b76 && c <= 0x2b95) ||\n        c === 0x2b96 ||\n        (c >= 0x2b97 && c <= 0x2bff) ||\n        (c >= 0x2e00 && c <= 0x2e01) ||\n        c === 0x2e02 ||\n        c === 0x2e03 ||\n        c === 0x2e04 ||\n        c === 0x2e05 ||\n        (c >= 0x2e06 && c <= 0x2e08) ||\n        c === 0x2e09 ||\n        c === 0x2e0a ||\n        c === 0x2e0b ||\n        c === 0x2e0c ||\n        c === 0x2e0d ||\n        (c >= 0x2e0e && c <= 0x2e16) ||\n        c === 0x2e17 ||\n        (c >= 0x2e18 && c <= 0x2e19) ||\n        c === 0x2e1a ||\n        c === 0x2e1b ||\n        c === 0x2e1c ||\n        c === 0x2e1d ||\n        (c >= 0x2e1e && c <= 0x2e1f) ||\n        c === 0x2e20 ||\n        c === 0x2e21 ||\n        c === 0x2e22 ||\n        c === 0x2e23 ||\n        c === 0x2e24 ||\n        c === 0x2e25 ||\n        c === 0x2e26 ||\n        c === 0x2e27 ||\n        c === 0x2e28 ||\n        c === 0x2e29 ||\n        (c >= 0x2e2a && c <= 0x2e2e) ||\n        c === 0x2e2f ||\n        (c >= 0x2e30 && c <= 0x2e39) ||\n        (c >= 0x2e3a && c <= 0x2e3b) ||\n        (c >= 0x2e3c && c <= 0x2e3f) ||\n        c === 0x2e40 ||\n        c === 0x2e41 ||\n        c === 0x2e42 ||\n        (c >= 0x2e43 && c <= 0x2e4f) ||\n        (c >= 0x2e50 && c <= 0x2e51) ||\n        c === 0x2e52 ||\n        (c >= 0x2e53 && c <= 0x2e7f) ||\n        (c >= 0x3001 && c <= 0x3003) ||\n        c === 0x3008 ||\n        c === 0x3009 ||\n        c === 0x300a ||\n        c === 0x300b ||\n        c === 0x300c ||\n        c === 0x300d ||\n        c === 0x300e ||\n        c === 0x300f ||\n        c === 0x3010 ||\n        c === 0x3011 ||\n        (c >= 0x3012 && c <= 0x3013) ||\n        c === 0x3014 ||\n        c === 0x3015 ||\n        c === 0x3016 ||\n        c === 0x3017 ||\n        c === 0x3018 ||\n        c === 0x3019 ||\n        c === 0x301a ||\n        c === 0x301b ||\n        c === 0x301c ||\n        c === 0x301d ||\n        (c >= 0x301e && c <= 0x301f) ||\n        c === 0x3020 ||\n        c === 0x3030 ||\n        c === 0xfd3e ||\n        c === 0xfd3f ||\n        (c >= 0xfe45 && c <= 0xfe46));\n}\n","import { timeData } from './time-data.generated';\n/**\n * Returns the best matching date time pattern if a date time skeleton\n * pattern is provided with a locale. Follows the Unicode specification:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#table-mapping-requested-time-skeletons-to-patterns\n * @param skeleton date time skeleton pattern that possibly includes j, J or C\n * @param locale\n */\nexport function getBestPattern(skeleton, locale) {\n    var skeletonCopy = '';\n    for (var patternPos = 0; patternPos < skeleton.length; patternPos++) {\n        var patternChar = skeleton.charAt(patternPos);\n        if (patternChar === 'j') {\n            var extraLength = 0;\n            while (patternPos + 1 < skeleton.length &&\n                skeleton.charAt(patternPos + 1) === patternChar) {\n                extraLength++;\n                patternPos++;\n            }\n            var hourLen = 1 + (extraLength & 1);\n            var dayPeriodLen = extraLength < 2 ? 1 : 3 + (extraLength >> 1);\n            var dayPeriodChar = 'a';\n            var hourChar = getDefaultHourSymbolFromLocale(locale);\n            if (hourChar == 'H' || hourChar == 'k') {\n                dayPeriodLen = 0;\n            }\n            while (dayPeriodLen-- > 0) {\n                skeletonCopy += dayPeriodChar;\n            }\n            while (hourLen-- > 0) {\n                skeletonCopy = hourChar + skeletonCopy;\n            }\n        }\n        else if (patternChar === 'J') {\n            skeletonCopy += 'H';\n        }\n        else {\n            skeletonCopy += patternChar;\n        }\n    }\n    return skeletonCopy;\n}\n/**\n * Maps the [hour cycle type](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle)\n * of the given `locale` to the corresponding time pattern.\n * @param locale\n */\nfunction getDefaultHourSymbolFromLocale(locale) {\n    var hourCycle = locale.hourCycle;\n    if (hourCycle === undefined &&\n        // @ts-ignore hourCycle(s) is not identified yet\n        locale.hourCycles &&\n        // @ts-ignore\n        locale.hourCycles.length) {\n        // @ts-ignore\n        hourCycle = locale.hourCycles[0];\n    }\n    if (hourCycle) {\n        switch (hourCycle) {\n            case 'h24':\n                return 'k';\n            case 'h23':\n                return 'H';\n            case 'h12':\n                return 'h';\n            case 'h11':\n                return 'K';\n            default:\n                throw new Error('Invalid hourCycle');\n        }\n    }\n    // TODO: Once hourCycle is fully supported remove the following with data generation\n    var languageTag = locale.language;\n    var regionTag;\n    if (languageTag !== 'root') {\n        regionTag = locale.maximize().region;\n    }\n    var hourCycles = timeData[regionTag || ''] ||\n        timeData[languageTag || ''] ||\n        timeData[\"\".concat(languageTag, \"-001\")] ||\n        timeData['001'];\n    return hourCycles[0];\n}\n","import { __assign } from \"tslib\";\nimport { ErrorKind } from './error';\nimport { Parser } from './parser';\nimport { isDateElement, isDateTimeSkeleton, isNumberElement, isNumberSkeleton, isPluralElement, isSelectElement, isTagElement, isTimeElement, } from './types';\nfunction pruneLocation(els) {\n    els.forEach(function (el) {\n        delete el.location;\n        if (isSelectElement(el) || isPluralElement(el)) {\n            for (var k in el.options) {\n                delete el.options[k].location;\n                pruneLocation(el.options[k].value);\n            }\n        }\n        else if (isNumberElement(el) && isNumberSkeleton(el.style)) {\n            delete el.style.location;\n        }\n        else if ((isDateElement(el) || isTimeElement(el)) &&\n            isDateTimeSkeleton(el.style)) {\n            delete el.style.location;\n        }\n        else if (isTagElement(el)) {\n            pruneLocation(el.children);\n        }\n    });\n}\nexport function parse(message, opts) {\n    if (opts === void 0) { opts = {}; }\n    opts = __assign({ shouldParseSkeletons: true, requiresOtherClause: true }, opts);\n    var result = new Parser(message, opts).parse();\n    if (result.err) {\n        var error = SyntaxError(ErrorKind[result.err.kind]);\n        // @ts-expect-error Assign to error object\n        error.location = result.err.location;\n        // @ts-expect-error Assign to error object\n        error.originalMessage = result.err.message;\n        throw error;\n    }\n    if (!(opts === null || opts === void 0 ? void 0 : opts.captureLocation)) {\n        pruneLocation(result.val);\n    }\n    return result.val;\n}\nexport * from './types';\n","//\n// Main\n//\nexport default function memoize(fn, options) {\n    var cache = options && options.cache ? options.cache : cacheDefault;\n    var serializer = options && options.serializer ? options.serializer : serializerDefault;\n    var strategy = options && options.strategy ? options.strategy : strategyDefault;\n    return strategy(fn, {\n        cache: cache,\n        serializer: serializer,\n    });\n}\n//\n// Strategy\n//\nfunction isPrimitive(value) {\n    return (value == null || typeof value === 'number' || typeof value === 'boolean'); // || typeof value === \"string\" 'unsafe' primitive for our needs\n}\nfunction monadic(fn, cache, serializer, arg) {\n    var cacheKey = isPrimitive(arg) ? arg : serializer(arg);\n    var computedValue = cache.get(cacheKey);\n    if (typeof computedValue === 'undefined') {\n        computedValue = fn.call(this, arg);\n        cache.set(cacheKey, computedValue);\n    }\n    return computedValue;\n}\nfunction variadic(fn, cache, serializer) {\n    var args = Array.prototype.slice.call(arguments, 3);\n    var cacheKey = serializer(args);\n    var computedValue = cache.get(cacheKey);\n    if (typeof computedValue === 'undefined') {\n        computedValue = fn.apply(this, args);\n        cache.set(cacheKey, computedValue);\n    }\n    return computedValue;\n}\nfunction assemble(fn, context, strategy, cache, serialize) {\n    return strategy.bind(context, fn, cache, serialize);\n}\nfunction strategyDefault(fn, options) {\n    var strategy = fn.length === 1 ? monadic : variadic;\n    return assemble(fn, this, strategy, options.cache.create(), options.serializer);\n}\nfunction strategyVariadic(fn, options) {\n    return assemble(fn, this, variadic, options.cache.create(), options.serializer);\n}\nfunction strategyMonadic(fn, options) {\n    return assemble(fn, this, monadic, options.cache.create(), options.serializer);\n}\n//\n// Serializer\n//\nvar serializerDefault = function () {\n    return JSON.stringify(arguments);\n};\n//\n// Cache\n//\nfunction ObjectWithoutPrototypeCache() {\n    this.cache = Object.create(null);\n}\nObjectWithoutPrototypeCache.prototype.get = function (key) {\n    return this.cache[key];\n};\nObjectWithoutPrototypeCache.prototype.set = function (key, value) {\n    this.cache[key] = value;\n};\nvar cacheDefault = {\n    create: function create() {\n        // @ts-ignore\n        return new ObjectWithoutPrototypeCache();\n    },\n};\nexport var strategies = {\n    variadic: strategyVariadic,\n    monadic: strategyMonadic,\n};\n","import { __extends } from \"tslib\";\nexport var ErrorCode;\n(function (ErrorCode) {\n    // When we have a placeholder but no value to format\n    ErrorCode[\"MISSING_VALUE\"] = \"MISSING_VALUE\";\n    // When value supplied is invalid\n    ErrorCode[\"INVALID_VALUE\"] = \"INVALID_VALUE\";\n    // When we need specific Intl API but it's not available\n    ErrorCode[\"MISSING_INTL_API\"] = \"MISSING_INTL_API\";\n})(ErrorCode || (ErrorCode = {}));\nvar FormatError = /** @class */ (function (_super) {\n    __extends(FormatError, _super);\n    function FormatError(msg, code, originalMessage) {\n        var _this = _super.call(this, msg) || this;\n        _this.code = code;\n        _this.originalMessage = originalMessage;\n        return _this;\n    }\n    FormatError.prototype.toString = function () {\n        return \"[formatjs Error: \".concat(this.code, \"] \").concat(this.message);\n    };\n    return FormatError;\n}(Error));\nexport { FormatError };\nvar InvalidValueError = /** @class */ (function (_super) {\n    __extends(InvalidValueError, _super);\n    function InvalidValueError(variableId, value, options, originalMessage) {\n        return _super.call(this, \"Invalid values for \\\"\".concat(variableId, \"\\\": \\\"\").concat(value, \"\\\". Options are \\\"\").concat(Object.keys(options).join('\", \"'), \"\\\"\"), ErrorCode.INVALID_VALUE, originalMessage) || this;\n    }\n    return InvalidValueError;\n}(FormatError));\nexport { InvalidValueError };\nvar InvalidValueTypeError = /** @class */ (function (_super) {\n    __extends(InvalidValueTypeError, _super);\n    function InvalidValueTypeError(value, type, originalMessage) {\n        return _super.call(this, \"Value for \\\"\".concat(value, \"\\\" must be of type \").concat(type), ErrorCode.INVALID_VALUE, originalMessage) || this;\n    }\n    return InvalidValueTypeError;\n}(FormatError));\nexport { InvalidValueTypeError };\nvar MissingValueError = /** @class */ (function (_super) {\n    __extends(MissingValueError, _super);\n    function MissingValueError(variableId, originalMessage) {\n        return _super.call(this, \"The intl string context variable \\\"\".concat(variableId, \"\\\" was not provided to the string \\\"\").concat(originalMessage, \"\\\"\"), ErrorCode.MISSING_VALUE, originalMessage) || this;\n    }\n    return MissingValueError;\n}(FormatError));\nexport { MissingValueError };\n","import { isArgumentElement, isDateElement, isDateTimeSkeleton, isLiteralElement, isNumberElement, isNumberSkeleton, isPluralElement, isPoundElement, isSelectElement, isTimeElement, isTagElement, } from '@formatjs/icu-messageformat-parser';\nimport { MissingValueError, InvalidValueError, ErrorCode, FormatError, InvalidValueTypeError, } from './error';\nexport var PART_TYPE;\n(function (PART_TYPE) {\n    PART_TYPE[PART_TYPE[\"literal\"] = 0] = \"literal\";\n    PART_TYPE[PART_TYPE[\"object\"] = 1] = \"object\";\n})(PART_TYPE || (PART_TYPE = {}));\nfunction mergeLiteral(parts) {\n    if (parts.length < 2) {\n        return parts;\n    }\n    return parts.reduce(function (all, part) {\n        var lastPart = all[all.length - 1];\n        if (!lastPart ||\n            lastPart.type !== PART_TYPE.literal ||\n            part.type !== PART_TYPE.literal) {\n            all.push(part);\n        }\n        else {\n            lastPart.value += part.value;\n        }\n        return all;\n    }, []);\n}\nexport function isFormatXMLElementFn(el) {\n    return typeof el === 'function';\n}\n// TODO(skeleton): add skeleton support\nexport function formatToParts(els, locales, formatters, formats, values, currentPluralValue, \n// For debugging\noriginalMessage) {\n    // Hot path for straight simple msg translations\n    if (els.length === 1 && isLiteralElement(els[0])) {\n        return [\n            {\n                type: PART_TYPE.literal,\n                value: els[0].value,\n            },\n        ];\n    }\n    var result = [];\n    for (var _i = 0, els_1 = els; _i < els_1.length; _i++) {\n        var el = els_1[_i];\n        // Exit early for string parts.\n        if (isLiteralElement(el)) {\n            result.push({\n                type: PART_TYPE.literal,\n                value: el.value,\n            });\n            continue;\n        }\n        // TODO: should this part be literal type?\n        // Replace `#` in plural rules with the actual numeric value.\n        if (isPoundElement(el)) {\n            if (typeof currentPluralValue === 'number') {\n                result.push({\n                    type: PART_TYPE.literal,\n                    value: formatters.getNumberFormat(locales).format(currentPluralValue),\n                });\n            }\n            continue;\n        }\n        var varName = el.value;\n        // Enforce that all required values are provided by the caller.\n        if (!(values && varName in values)) {\n            throw new MissingValueError(varName, originalMessage);\n        }\n        var value = values[varName];\n        if (isArgumentElement(el)) {\n            if (!value || typeof value === 'string' || typeof value === 'number') {\n                value =\n                    typeof value === 'string' || typeof value === 'number'\n                        ? String(value)\n                        : '';\n            }\n            result.push({\n                type: typeof value === 'string' ? PART_TYPE.literal : PART_TYPE.object,\n                value: value,\n            });\n            continue;\n        }\n        // Recursively format plural and select parts' option — which can be a\n        // nested pattern structure. The choosing of the option to use is\n        // abstracted-by and delegated-to the part helper object.\n        if (isDateElement(el)) {\n            var style = typeof el.style === 'string'\n                ? formats.date[el.style]\n                : isDateTimeSkeleton(el.style)\n                    ? el.style.parsedOptions\n                    : undefined;\n            result.push({\n                type: PART_TYPE.literal,\n                value: formatters\n                    .getDateTimeFormat(locales, style)\n                    .format(value),\n            });\n            continue;\n        }\n        if (isTimeElement(el)) {\n            var style = typeof el.style === 'string'\n                ? formats.time[el.style]\n                : isDateTimeSkeleton(el.style)\n                    ? el.style.parsedOptions\n                    : formats.time.medium;\n            result.push({\n                type: PART_TYPE.literal,\n                value: formatters\n                    .getDateTimeFormat(locales, style)\n                    .format(value),\n            });\n            continue;\n        }\n        if (isNumberElement(el)) {\n            var style = typeof el.style === 'string'\n                ? formats.number[el.style]\n                : isNumberSkeleton(el.style)\n                    ? el.style.parsedOptions\n                    : undefined;\n            if (style && style.scale) {\n                value =\n                    value *\n                        (style.scale || 1);\n            }\n            result.push({\n                type: PART_TYPE.literal,\n                value: formatters\n                    .getNumberFormat(locales, style)\n                    .format(value),\n            });\n            continue;\n        }\n        if (isTagElement(el)) {\n            var children = el.children, value_1 = el.value;\n            var formatFn = values[value_1];\n            if (!isFormatXMLElementFn(formatFn)) {\n                throw new InvalidValueTypeError(value_1, 'function', originalMessage);\n            }\n            var parts = formatToParts(children, locales, formatters, formats, values, currentPluralValue);\n            var chunks = formatFn(parts.map(function (p) { return p.value; }));\n            if (!Array.isArray(chunks)) {\n                chunks = [chunks];\n            }\n            result.push.apply(result, chunks.map(function (c) {\n                return {\n                    type: typeof c === 'string' ? PART_TYPE.literal : PART_TYPE.object,\n                    value: c,\n                };\n            }));\n        }\n        if (isSelectElement(el)) {\n            var opt = el.options[value] || el.options.other;\n            if (!opt) {\n                throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n            }\n            result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values));\n            continue;\n        }\n        if (isPluralElement(el)) {\n            var opt = el.options[\"=\".concat(value)];\n            if (!opt) {\n                if (!Intl.PluralRules) {\n                    throw new FormatError(\"Intl.PluralRules is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-pluralrules\\\"\\n\", ErrorCode.MISSING_INTL_API, originalMessage);\n                }\n                var rule = formatters\n                    .getPluralRules(locales, { type: el.pluralType })\n                    .select(value - (el.offset || 0));\n                opt = el.options[rule] || el.options.other;\n            }\n            if (!opt) {\n                throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n            }\n            result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values, value - (el.offset || 0)));\n            continue;\n        }\n    }\n    return mergeLiteral(result);\n}\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\nimport { __assign, __spreadArray } from \"tslib\";\nimport { parse } from '@formatjs/icu-messageformat-parser';\nimport memoize, { strategies } from '@formatjs/fast-memoize';\nimport { formatToParts, PART_TYPE, } from './formatters';\n// -- MessageFormat --------------------------------------------------------\nfunction mergeConfig(c1, c2) {\n    if (!c2) {\n        return c1;\n    }\n    return __assign(__assign(__assign({}, (c1 || {})), (c2 || {})), Object.keys(c1).reduce(function (all, k) {\n        all[k] = __assign(__assign({}, c1[k]), (c2[k] || {}));\n        return all;\n    }, {}));\n}\nfunction mergeConfigs(defaultConfig, configs) {\n    if (!configs) {\n        return defaultConfig;\n    }\n    return Object.keys(defaultConfig).reduce(function (all, k) {\n        all[k] = mergeConfig(defaultConfig[k], configs[k]);\n        return all;\n    }, __assign({}, defaultConfig));\n}\nfunction createFastMemoizeCache(store) {\n    return {\n        create: function () {\n            return {\n                get: function (key) {\n                    return store[key];\n                },\n                set: function (key, value) {\n                    store[key] = value;\n                },\n            };\n        },\n    };\n}\nfunction createDefaultFormatters(cache) {\n    if (cache === void 0) { cache = {\n        number: {},\n        dateTime: {},\n        pluralRules: {},\n    }; }\n    return {\n        getNumberFormat: memoize(function () {\n            var _a;\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new ((_a = Intl.NumberFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.number),\n            strategy: strategies.variadic,\n        }),\n        getDateTimeFormat: memoize(function () {\n            var _a;\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new ((_a = Intl.DateTimeFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.dateTime),\n            strategy: strategies.variadic,\n        }),\n        getPluralRules: memoize(function () {\n            var _a;\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new ((_a = Intl.PluralRules).bind.apply(_a, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.pluralRules),\n            strategy: strategies.variadic,\n        }),\n    };\n}\nvar IntlMessageFormat = /** @class */ (function () {\n    function IntlMessageFormat(message, locales, overrideFormats, opts) {\n        var _this = this;\n        if (locales === void 0) { locales = IntlMessageFormat.defaultLocale; }\n        this.formatterCache = {\n            number: {},\n            dateTime: {},\n            pluralRules: {},\n        };\n        this.format = function (values) {\n            var parts = _this.formatToParts(values);\n            // Hot path for straight simple msg translations\n            if (parts.length === 1) {\n                return parts[0].value;\n            }\n            var result = parts.reduce(function (all, part) {\n                if (!all.length ||\n                    part.type !== PART_TYPE.literal ||\n                    typeof all[all.length - 1] !== 'string') {\n                    all.push(part.value);\n                }\n                else {\n                    all[all.length - 1] += part.value;\n                }\n                return all;\n            }, []);\n            if (result.length <= 1) {\n                return result[0] || '';\n            }\n            return result;\n        };\n        this.formatToParts = function (values) {\n            return formatToParts(_this.ast, _this.locales, _this.formatters, _this.formats, values, undefined, _this.message);\n        };\n        this.resolvedOptions = function () { return ({\n            locale: _this.resolvedLocale.toString(),\n        }); };\n        this.getAst = function () { return _this.ast; };\n        // Defined first because it's used to build the format pattern.\n        this.locales = locales;\n        this.resolvedLocale = IntlMessageFormat.resolveLocale(locales);\n        if (typeof message === 'string') {\n            this.message = message;\n            if (!IntlMessageFormat.__parse) {\n                throw new TypeError('IntlMessageFormat.__parse must be set to process `message` of type `string`');\n            }\n            // Parse string messages into an AST.\n            this.ast = IntlMessageFormat.__parse(message, {\n                ignoreTag: opts === null || opts === void 0 ? void 0 : opts.ignoreTag,\n                locale: this.resolvedLocale,\n            });\n        }\n        else {\n            this.ast = message;\n        }\n        if (!Array.isArray(this.ast)) {\n            throw new TypeError('A message must be provided as a String or AST.');\n        }\n        // Creates a new object with the specified `formats` merged with the default\n        // formats.\n        this.formats = mergeConfigs(IntlMessageFormat.formats, overrideFormats);\n        this.formatters =\n            (opts && opts.formatters) || createDefaultFormatters(this.formatterCache);\n    }\n    Object.defineProperty(IntlMessageFormat, \"defaultLocale\", {\n        get: function () {\n            if (!IntlMessageFormat.memoizedDefaultLocale) {\n                IntlMessageFormat.memoizedDefaultLocale =\n                    new Intl.NumberFormat().resolvedOptions().locale;\n            }\n            return IntlMessageFormat.memoizedDefaultLocale;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    IntlMessageFormat.memoizedDefaultLocale = null;\n    IntlMessageFormat.resolveLocale = function (locales) {\n        var supportedLocales = Intl.NumberFormat.supportedLocalesOf(locales);\n        if (supportedLocales.length > 0) {\n            return new Intl.Locale(supportedLocales[0]);\n        }\n        return new Intl.Locale(typeof locales === 'string' ? locales : locales[0]);\n    };\n    IntlMessageFormat.__parse = parse;\n    // Default format options used as the prototype of the `formats` provided to the\n    // constructor. These are used when constructing the internal Intl.NumberFormat\n    // and Intl.DateTimeFormat instances.\n    IntlMessageFormat.formats = {\n        number: {\n            integer: {\n                maximumFractionDigits: 0,\n            },\n            currency: {\n                style: 'currency',\n            },\n            percent: {\n                style: 'percent',\n            },\n        },\n        date: {\n            short: {\n                month: 'numeric',\n                day: 'numeric',\n                year: '2-digit',\n            },\n            medium: {\n                month: 'short',\n                day: 'numeric',\n                year: 'numeric',\n            },\n            long: {\n                month: 'long',\n                day: 'numeric',\n                year: 'numeric',\n            },\n            full: {\n                weekday: 'long',\n                month: 'long',\n                day: 'numeric',\n                year: 'numeric',\n            },\n        },\n        time: {\n            short: {\n                hour: 'numeric',\n                minute: 'numeric',\n            },\n            medium: {\n                hour: 'numeric',\n                minute: 'numeric',\n                second: 'numeric',\n            },\n            long: {\n                hour: 'numeric',\n                minute: 'numeric',\n                second: 'numeric',\n                timeZoneName: 'short',\n            },\n            full: {\n                hour: 'numeric',\n                minute: 'numeric',\n                second: 'numeric',\n                timeZoneName: 'short',\n            },\n        },\n    };\n    return IntlMessageFormat;\n}());\nexport { IntlMessageFormat };\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\nimport { IntlMessageFormat } from './src/core';\nexport * from './src/formatters';\nexport * from './src/core';\nexport * from './src/error';\nexport default IntlMessageFormat;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass RemotePromise {\n    /** Instantiates a new remote promise. */\n    constructor() {\n        this._status = 'pending';\n        this[Symbol.toStringTag] = '[object Promise]';\n        this._promise = new Promise((resolve, reject) => {\n            this._resolve = resolve;\n            this._reject = reject;\n        });\n        this.then = this._promise.then.bind(this._promise);\n        this.catch = this._promise.catch.bind(this._promise);\n    }\n    /** Gets the native promise instance. */\n    get promise() {\n        return this._promise;\n    }\n    /** Gets the current status of the promise. */\n    get status() {\n        return this._status;\n    }\n    /** Throws an error if the promises has already been resolved. */\n    assertPending() {\n        if (this._status !== 'pending') {\n            throw new Error(`This promise has already been ${this._status}.`);\n        }\n    }\n    resolve(value) {\n        this.assertPending();\n        this._status = 'fulfilled';\n        this._resolve(value);\n    }\n    /** Remotely reject this promise */\n    reject(reason) {\n        this.assertPending();\n        this._status = 'rejected';\n        this._reject(reason);\n    }\n}\nexports.RemotePromise = RemotePromise;\nexports.default = RemotePromise;\n","/**\n * SSR Window 3.0.0\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2020, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: November 9, 2020\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n    return (obj !== null &&\n        typeof obj === 'object' &&\n        'constructor' in obj &&\n        obj.constructor === Object);\n}\nfunction extend(target, src) {\n    if (target === void 0) { target = {}; }\n    if (src === void 0) { src = {}; }\n    Object.keys(src).forEach(function (key) {\n        if (typeof target[key] === 'undefined')\n            target[key] = src[key];\n        else if (isObject(src[key]) &&\n            isObject(target[key]) &&\n            Object.keys(src[key]).length > 0) {\n            extend(target[key], src[key]);\n        }\n    });\n}\n\nvar ssrDocument = {\n    body: {},\n    addEventListener: function () { },\n    removeEventListener: function () { },\n    activeElement: {\n        blur: function () { },\n        nodeName: '',\n    },\n    querySelector: function () {\n        return null;\n    },\n    querySelectorAll: function () {\n        return [];\n    },\n    getElementById: function () {\n        return null;\n    },\n    createEvent: function () {\n        return {\n            initEvent: function () { },\n        };\n    },\n    createElement: function () {\n        return {\n            children: [],\n            childNodes: [],\n            style: {},\n            setAttribute: function () { },\n            getElementsByTagName: function () {\n                return [];\n            },\n        };\n    },\n    createElementNS: function () {\n        return {};\n    },\n    importNode: function () {\n        return null;\n    },\n    location: {\n        hash: '',\n        host: '',\n        hostname: '',\n        href: '',\n        origin: '',\n        pathname: '',\n        protocol: '',\n        search: '',\n    },\n};\nfunction getDocument() {\n    var doc = typeof document !== 'undefined' ? document : {};\n    extend(doc, ssrDocument);\n    return doc;\n}\n\nvar ssrWindow = {\n    document: ssrDocument,\n    navigator: {\n        userAgent: '',\n    },\n    location: {\n        hash: '',\n        host: '',\n        hostname: '',\n        href: '',\n        origin: '',\n        pathname: '',\n        protocol: '',\n        search: '',\n    },\n    history: {\n        replaceState: function () { },\n        pushState: function () { },\n        go: function () { },\n        back: function () { },\n    },\n    CustomEvent: function CustomEvent() {\n        return this;\n    },\n    addEventListener: function () { },\n    removeEventListener: function () { },\n    getComputedStyle: function () {\n        return {\n            getPropertyValue: function () {\n                return '';\n            },\n        };\n    },\n    Image: function () { },\n    Date: function () { },\n    screen: {},\n    setTimeout: function () { },\n    clearTimeout: function () { },\n    matchMedia: function () {\n        return {};\n    },\n    requestAnimationFrame: function (callback) {\n        if (typeof setTimeout === 'undefined') {\n            callback();\n            return null;\n        }\n        return setTimeout(callback, 0);\n    },\n    cancelAnimationFrame: function (id) {\n        if (typeof setTimeout === 'undefined') {\n            return;\n        }\n        clearTimeout(id);\n    },\n};\nfunction getWindow() {\n    var win = typeof window !== 'undefined' ? window : {};\n    extend(win, ssrWindow);\n    return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","/**\n * Dom7 3.0.0\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2020, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: November 9, 2020\n */\nimport { getWindow, getDocument } from 'ssr-window';\n\nfunction _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  subClass.__proto__ = superClass;\n}\n\nfunction _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n  if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n  if (Reflect.construct.sham) return false;\n  if (typeof Proxy === \"function\") return true;\n\n  try {\n    Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nfunction _construct(Parent, args, Class) {\n  if (_isNativeReflectConstruct()) {\n    _construct = Reflect.construct;\n  } else {\n    _construct = function _construct(Parent, args, Class) {\n      var a = [null];\n      a.push.apply(a, args);\n      var Constructor = Function.bind.apply(Parent, a);\n      var instance = new Constructor();\n      if (Class) _setPrototypeOf(instance, Class.prototype);\n      return instance;\n    };\n  }\n\n  return _construct.apply(null, arguments);\n}\n\nfunction _isNativeFunction(fn) {\n  return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n\nfunction _wrapNativeSuper(Class) {\n  var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n  _wrapNativeSuper = function _wrapNativeSuper(Class) {\n    if (Class === null || !_isNativeFunction(Class)) return Class;\n\n    if (typeof Class !== \"function\") {\n      throw new TypeError(\"Super expression must either be null or a function\");\n    }\n\n    if (typeof _cache !== \"undefined\") {\n      if (_cache.has(Class)) return _cache.get(Class);\n\n      _cache.set(Class, Wrapper);\n    }\n\n    function Wrapper() {\n      return _construct(Class, arguments, _getPrototypeOf(this).constructor);\n    }\n\n    Wrapper.prototype = Object.create(Class.prototype, {\n      constructor: {\n        value: Wrapper,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n    return _setPrototypeOf(Wrapper, Class);\n  };\n\n  return _wrapNativeSuper(Class);\n}\n\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\n/* eslint-disable no-proto */\nfunction makeReactive(obj) {\n  var proto = obj.__proto__;\n  Object.defineProperty(obj, '__proto__', {\n    get: function get() {\n      return proto;\n    },\n    set: function set(value) {\n      proto.__proto__ = value;\n    }\n  });\n}\n\nvar Dom7 = /*#__PURE__*/function (_Array) {\n  _inheritsLoose(Dom7, _Array);\n\n  function Dom7(items) {\n    var _this;\n\n    _this = _Array.call.apply(_Array, [this].concat(items)) || this;\n    makeReactive(_assertThisInitialized(_this));\n    return _this;\n  }\n\n  return Dom7;\n}( /*#__PURE__*/_wrapNativeSuper(Array));\n\nfunction arrayFlat(arr) {\n  if (arr === void 0) {\n    arr = [];\n  }\n\n  var res = [];\n  arr.forEach(function (el) {\n    if (Array.isArray(el)) {\n      res.push.apply(res, arrayFlat(el));\n    } else {\n      res.push(el);\n    }\n  });\n  return res;\n}\nfunction arrayFilter(arr, callback) {\n  return Array.prototype.filter.call(arr, callback);\n}\nfunction arrayUnique(arr) {\n  var uniqueArray = [];\n\n  for (var i = 0; i < arr.length; i += 1) {\n    if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n  }\n\n  return uniqueArray;\n}\nfunction toCamelCase(string) {\n  return string.toLowerCase().replace(/-(.)/g, function (match, group) {\n    return group.toUpperCase();\n  });\n}\n\nfunction qsa(selector, context) {\n  if (typeof selector !== 'string') {\n    return [selector];\n  }\n\n  var a = [];\n  var res = context.querySelectorAll(selector);\n\n  for (var i = 0; i < res.length; i += 1) {\n    a.push(res[i]);\n  }\n\n  return a;\n}\n\nfunction $(selector, context) {\n  var window = getWindow();\n  var document = getDocument();\n  var arr = [];\n\n  if (!context && selector instanceof Dom7) {\n    return selector;\n  }\n\n  if (!selector) {\n    return new Dom7(arr);\n  }\n\n  if (typeof selector === 'string') {\n    var html = selector.trim();\n\n    if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n      var toCreate = 'div';\n      if (html.indexOf('<li') === 0) toCreate = 'ul';\n      if (html.indexOf('<tr') === 0) toCreate = 'tbody';\n      if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr';\n      if (html.indexOf('<tbody') === 0) toCreate = 'table';\n      if (html.indexOf('<option') === 0) toCreate = 'select';\n      var tempParent = document.createElement(toCreate);\n      tempParent.innerHTML = html;\n\n      for (var i = 0; i < tempParent.childNodes.length; i += 1) {\n        arr.push(tempParent.childNodes[i]);\n      }\n    } else {\n      arr = qsa(selector.trim(), context || document);\n    } // arr = qsa(selector, document);\n\n  } else if (selector.nodeType || selector === window || selector === document) {\n    arr.push(selector);\n  } else if (Array.isArray(selector)) {\n    if (selector instanceof Dom7) return selector;\n    arr = selector;\n  }\n\n  return new Dom7(arrayUnique(arr));\n}\n\n$.fn = Dom7.prototype;\n\nfunction addClass() {\n  for (var _len = arguments.length, classes = new Array(_len), _key = 0; _key < _len; _key++) {\n    classes[_key] = arguments[_key];\n  }\n\n  var classNames = arrayFlat(classes.map(function (c) {\n    return c.split(' ');\n  }));\n  this.forEach(function (el) {\n    var _el$classList;\n\n    (_el$classList = el.classList).add.apply(_el$classList, classNames);\n  });\n  return this;\n}\n\nfunction removeClass() {\n  for (var _len2 = arguments.length, classes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    classes[_key2] = arguments[_key2];\n  }\n\n  var classNames = arrayFlat(classes.map(function (c) {\n    return c.split(' ');\n  }));\n  this.forEach(function (el) {\n    var _el$classList2;\n\n    (_el$classList2 = el.classList).remove.apply(_el$classList2, classNames);\n  });\n  return this;\n}\n\nfunction toggleClass() {\n  for (var _len3 = arguments.length, classes = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n    classes[_key3] = arguments[_key3];\n  }\n\n  var classNames = arrayFlat(classes.map(function (c) {\n    return c.split(' ');\n  }));\n  this.forEach(function (el) {\n    classNames.forEach(function (className) {\n      el.classList.toggle(className);\n    });\n  });\n}\n\nfunction hasClass() {\n  for (var _len4 = arguments.length, classes = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n    classes[_key4] = arguments[_key4];\n  }\n\n  var classNames = arrayFlat(classes.map(function (c) {\n    return c.split(' ');\n  }));\n  return arrayFilter(this, function (el) {\n    return classNames.filter(function (className) {\n      return el.classList.contains(className);\n    }).length > 0;\n  }).length > 0;\n}\n\nfunction attr(attrs, value) {\n  if (arguments.length === 1 && typeof attrs === 'string') {\n    // Get attr\n    if (this[0]) return this[0].getAttribute(attrs);\n    return undefined;\n  } // Set attrs\n\n\n  for (var i = 0; i < this.length; i += 1) {\n    if (arguments.length === 2) {\n      // String\n      this[i].setAttribute(attrs, value);\n    } else {\n      // Object\n      for (var attrName in attrs) {\n        this[i][attrName] = attrs[attrName];\n        this[i].setAttribute(attrName, attrs[attrName]);\n      }\n    }\n  }\n\n  return this;\n}\n\nfunction removeAttr(attr) {\n  for (var i = 0; i < this.length; i += 1) {\n    this[i].removeAttribute(attr);\n  }\n\n  return this;\n}\n\nfunction prop(props, value) {\n  if (arguments.length === 1 && typeof props === 'string') {\n    // Get prop\n    if (this[0]) return this[0][props];\n  } else {\n    // Set props\n    for (var i = 0; i < this.length; i += 1) {\n      if (arguments.length === 2) {\n        // String\n        this[i][props] = value;\n      } else {\n        // Object\n        for (var propName in props) {\n          this[i][propName] = props[propName];\n        }\n      }\n    }\n\n    return this;\n  }\n\n  return this;\n}\n\nfunction data(key, value) {\n  var el;\n\n  if (typeof value === 'undefined') {\n    el = this[0];\n    if (!el) return undefined; // Get value\n\n    if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {\n      return el.dom7ElementDataStorage[key];\n    }\n\n    var dataKey = el.getAttribute(\"data-\" + key);\n\n    if (dataKey) {\n      return dataKey;\n    }\n\n    return undefined;\n  } // Set value\n\n\n  for (var i = 0; i < this.length; i += 1) {\n    el = this[i];\n    if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n    el.dom7ElementDataStorage[key] = value;\n  }\n\n  return this;\n}\n\nfunction removeData(key) {\n  for (var i = 0; i < this.length; i += 1) {\n    var el = this[i];\n\n    if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n      el.dom7ElementDataStorage[key] = null;\n      delete el.dom7ElementDataStorage[key];\n    }\n  }\n}\n\nfunction dataset() {\n  var el = this[0];\n  if (!el) return undefined;\n  var dataset = {}; // eslint-disable-line\n\n  if (el.dataset) {\n    for (var dataKey in el.dataset) {\n      dataset[dataKey] = el.dataset[dataKey];\n    }\n  } else {\n    for (var i = 0; i < el.attributes.length; i += 1) {\n      var _attr = el.attributes[i];\n\n      if (_attr.name.indexOf('data-') >= 0) {\n        dataset[toCamelCase(_attr.name.split('data-')[1])] = _attr.value;\n      }\n    }\n  }\n\n  for (var key in dataset) {\n    if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n  }\n\n  return dataset;\n}\n\nfunction val(value) {\n  if (typeof value === 'undefined') {\n    // get value\n    var el = this[0];\n    if (!el) return undefined;\n\n    if (el.multiple && el.nodeName.toLowerCase() === 'select') {\n      var values = [];\n\n      for (var i = 0; i < el.selectedOptions.length; i += 1) {\n        values.push(el.selectedOptions[i].value);\n      }\n\n      return values;\n    }\n\n    return el.value;\n  } // set value\n\n\n  for (var _i = 0; _i < this.length; _i += 1) {\n    var _el = this[_i];\n\n    if (Array.isArray(value) && _el.multiple && _el.nodeName.toLowerCase() === 'select') {\n      for (var j = 0; j < _el.options.length; j += 1) {\n        _el.options[j].selected = value.indexOf(_el.options[j].value) >= 0;\n      }\n    } else {\n      _el.value = value;\n    }\n  }\n\n  return this;\n}\n\nfunction value(value) {\n  return this.val(value);\n}\n\nfunction transform(transform) {\n  for (var i = 0; i < this.length; i += 1) {\n    this[i].style.transform = transform;\n  }\n\n  return this;\n}\n\nfunction transition(duration) {\n  for (var i = 0; i < this.length; i += 1) {\n    this[i].style.transitionDuration = typeof duration !== 'string' ? duration + \"ms\" : duration;\n  }\n\n  return this;\n}\n\nfunction on() {\n  for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n    args[_key5] = arguments[_key5];\n  }\n\n  var eventType = args[0],\n      targetSelector = args[1],\n      listener = args[2],\n      capture = args[3];\n\n  if (typeof args[1] === 'function') {\n    eventType = args[0];\n    listener = args[1];\n    capture = args[2];\n    targetSelector = undefined;\n  }\n\n  if (!capture) capture = false;\n\n  function handleLiveEvent(e) {\n    var target = e.target;\n    if (!target) return;\n    var eventData = e.target.dom7EventData || [];\n\n    if (eventData.indexOf(e) < 0) {\n      eventData.unshift(e);\n    }\n\n    if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n      var _parents = $(target).parents(); // eslint-disable-line\n\n\n      for (var k = 0; k < _parents.length; k += 1) {\n        if ($(_parents[k]).is(targetSelector)) listener.apply(_parents[k], eventData);\n      }\n    }\n  }\n\n  function handleEvent(e) {\n    var eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n    if (eventData.indexOf(e) < 0) {\n      eventData.unshift(e);\n    }\n\n    listener.apply(this, eventData);\n  }\n\n  var events = eventType.split(' ');\n  var j;\n\n  for (var i = 0; i < this.length; i += 1) {\n    var el = this[i];\n\n    if (!targetSelector) {\n      for (j = 0; j < events.length; j += 1) {\n        var event = events[j];\n        if (!el.dom7Listeners) el.dom7Listeners = {};\n        if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n        el.dom7Listeners[event].push({\n          listener: listener,\n          proxyListener: handleEvent\n        });\n        el.addEventListener(event, handleEvent, capture);\n      }\n    } else {\n      // Live events\n      for (j = 0; j < events.length; j += 1) {\n        var _event = events[j];\n        if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n        if (!el.dom7LiveListeners[_event]) el.dom7LiveListeners[_event] = [];\n\n        el.dom7LiveListeners[_event].push({\n          listener: listener,\n          proxyListener: handleLiveEvent\n        });\n\n        el.addEventListener(_event, handleLiveEvent, capture);\n      }\n    }\n  }\n\n  return this;\n}\n\nfunction off() {\n  for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n    args[_key6] = arguments[_key6];\n  }\n\n  var eventType = args[0],\n      targetSelector = args[1],\n      listener = args[2],\n      capture = args[3];\n\n  if (typeof args[1] === 'function') {\n    eventType = args[0];\n    listener = args[1];\n    capture = args[2];\n    targetSelector = undefined;\n  }\n\n  if (!capture) capture = false;\n  var events = eventType.split(' ');\n\n  for (var i = 0; i < events.length; i += 1) {\n    var event = events[i];\n\n    for (var j = 0; j < this.length; j += 1) {\n      var el = this[j];\n      var handlers = void 0;\n\n      if (!targetSelector && el.dom7Listeners) {\n        handlers = el.dom7Listeners[event];\n      } else if (targetSelector && el.dom7LiveListeners) {\n        handlers = el.dom7LiveListeners[event];\n      }\n\n      if (handlers && handlers.length) {\n        for (var k = handlers.length - 1; k >= 0; k -= 1) {\n          var handler = handlers[k];\n\n          if (listener && handler.listener === listener) {\n            el.removeEventListener(event, handler.proxyListener, capture);\n            handlers.splice(k, 1);\n          } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n            el.removeEventListener(event, handler.proxyListener, capture);\n            handlers.splice(k, 1);\n          } else if (!listener) {\n            el.removeEventListener(event, handler.proxyListener, capture);\n            handlers.splice(k, 1);\n          }\n        }\n      }\n    }\n  }\n\n  return this;\n}\n\nfunction once() {\n  var dom = this;\n\n  for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n    args[_key7] = arguments[_key7];\n  }\n\n  var eventName = args[0],\n      targetSelector = args[1],\n      listener = args[2],\n      capture = args[3];\n\n  if (typeof args[1] === 'function') {\n    eventName = args[0];\n    listener = args[1];\n    capture = args[2];\n    targetSelector = undefined;\n  }\n\n  function onceHandler() {\n    for (var _len8 = arguments.length, eventArgs = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n      eventArgs[_key8] = arguments[_key8];\n    }\n\n    listener.apply(this, eventArgs);\n    dom.off(eventName, targetSelector, onceHandler, capture);\n\n    if (onceHandler.dom7proxy) {\n      delete onceHandler.dom7proxy;\n    }\n  }\n\n  onceHandler.dom7proxy = listener;\n  return dom.on(eventName, targetSelector, onceHandler, capture);\n}\n\nfunction trigger() {\n  var window = getWindow();\n\n  for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n    args[_key9] = arguments[_key9];\n  }\n\n  var events = args[0].split(' ');\n  var eventData = args[1];\n\n  for (var i = 0; i < events.length; i += 1) {\n    var event = events[i];\n\n    for (var j = 0; j < this.length; j += 1) {\n      var el = this[j];\n\n      if (window.CustomEvent) {\n        var evt = new window.CustomEvent(event, {\n          detail: eventData,\n          bubbles: true,\n          cancelable: true\n        });\n        el.dom7EventData = args.filter(function (data, dataIndex) {\n          return dataIndex > 0;\n        });\n        el.dispatchEvent(evt);\n        el.dom7EventData = [];\n        delete el.dom7EventData;\n      }\n    }\n  }\n\n  return this;\n}\n\nfunction transitionEnd(callback) {\n  var dom = this;\n\n  function fireCallBack(e) {\n    if (e.target !== this) return;\n    callback.call(this, e);\n    dom.off('transitionend', fireCallBack);\n  }\n\n  if (callback) {\n    dom.on('transitionend', fireCallBack);\n  }\n\n  return this;\n}\n\nfunction animationEnd(callback) {\n  var dom = this;\n\n  function fireCallBack(e) {\n    if (e.target !== this) return;\n    callback.call(this, e);\n    dom.off('animationend', fireCallBack);\n  }\n\n  if (callback) {\n    dom.on('animationend', fireCallBack);\n  }\n\n  return this;\n}\n\nfunction width() {\n  var window = getWindow();\n\n  if (this[0] === window) {\n    return window.innerWidth;\n  }\n\n  if (this.length > 0) {\n    return parseFloat(this.css('width'));\n  }\n\n  return null;\n}\n\nfunction outerWidth(includeMargins) {\n  if (this.length > 0) {\n    if (includeMargins) {\n      var _styles = this.styles();\n\n      return this[0].offsetWidth + parseFloat(_styles.getPropertyValue('margin-right')) + parseFloat(_styles.getPropertyValue('margin-left'));\n    }\n\n    return this[0].offsetWidth;\n  }\n\n  return null;\n}\n\nfunction height() {\n  var window = getWindow();\n\n  if (this[0] === window) {\n    return window.innerHeight;\n  }\n\n  if (this.length > 0) {\n    return parseFloat(this.css('height'));\n  }\n\n  return null;\n}\n\nfunction outerHeight(includeMargins) {\n  if (this.length > 0) {\n    if (includeMargins) {\n      var _styles2 = this.styles();\n\n      return this[0].offsetHeight + parseFloat(_styles2.getPropertyValue('margin-top')) + parseFloat(_styles2.getPropertyValue('margin-bottom'));\n    }\n\n    return this[0].offsetHeight;\n  }\n\n  return null;\n}\n\nfunction offset() {\n  if (this.length > 0) {\n    var window = getWindow();\n    var document = getDocument();\n    var el = this[0];\n    var box = el.getBoundingClientRect();\n    var body = document.body;\n    var clientTop = el.clientTop || body.clientTop || 0;\n    var clientLeft = el.clientLeft || body.clientLeft || 0;\n    var scrollTop = el === window ? window.scrollY : el.scrollTop;\n    var scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n    return {\n      top: box.top + scrollTop - clientTop,\n      left: box.left + scrollLeft - clientLeft\n    };\n  }\n\n  return null;\n}\n\nfunction hide() {\n  for (var i = 0; i < this.length; i += 1) {\n    this[i].style.display = 'none';\n  }\n\n  return this;\n}\n\nfunction show() {\n  var window = getWindow();\n\n  for (var i = 0; i < this.length; i += 1) {\n    var el = this[i];\n\n    if (el.style.display === 'none') {\n      el.style.display = '';\n    }\n\n    if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n      // Still not visible\n      el.style.display = 'block';\n    }\n  }\n\n  return this;\n}\n\nfunction styles() {\n  var window = getWindow();\n  if (this[0]) return window.getComputedStyle(this[0], null);\n  return {};\n}\n\nfunction css(props, value) {\n  var window = getWindow();\n  var i;\n\n  if (arguments.length === 1) {\n    if (typeof props === 'string') {\n      // .css('width')\n      if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n    } else {\n      // .css({ width: '100px' })\n      for (i = 0; i < this.length; i += 1) {\n        for (var _prop in props) {\n          this[i].style[_prop] = props[_prop];\n        }\n      }\n\n      return this;\n    }\n  }\n\n  if (arguments.length === 2 && typeof props === 'string') {\n    // .css('width', '100px')\n    for (i = 0; i < this.length; i += 1) {\n      this[i].style[props] = value;\n    }\n\n    return this;\n  }\n\n  return this;\n}\n\nfunction each(callback) {\n  if (!callback) return this;\n  this.forEach(function (el, index) {\n    callback.apply(el, [el, index]);\n  });\n  return this;\n}\n\nfunction filter(callback) {\n  var result = arrayFilter(this, callback);\n  return $(result);\n}\n\nfunction html(html) {\n  if (typeof html === 'undefined') {\n    return this[0] ? this[0].innerHTML : null;\n  }\n\n  for (var i = 0; i < this.length; i += 1) {\n    this[i].innerHTML = html;\n  }\n\n  return this;\n}\n\nfunction text(text) {\n  if (typeof text === 'undefined') {\n    return this[0] ? this[0].textContent.trim() : null;\n  }\n\n  for (var i = 0; i < this.length; i += 1) {\n    this[i].textContent = text;\n  }\n\n  return this;\n}\n\nfunction is(selector) {\n  var window = getWindow();\n  var document = getDocument();\n  var el = this[0];\n  var compareWith;\n  var i;\n  if (!el || typeof selector === 'undefined') return false;\n\n  if (typeof selector === 'string') {\n    if (el.matches) return el.matches(selector);\n    if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n    if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n    compareWith = $(selector);\n\n    for (i = 0; i < compareWith.length; i += 1) {\n      if (compareWith[i] === el) return true;\n    }\n\n    return false;\n  }\n\n  if (selector === document) {\n    return el === document;\n  }\n\n  if (selector === window) {\n    return el === window;\n  }\n\n  if (selector.nodeType || selector instanceof Dom7) {\n    compareWith = selector.nodeType ? [selector] : selector;\n\n    for (i = 0; i < compareWith.length; i += 1) {\n      if (compareWith[i] === el) return true;\n    }\n\n    return false;\n  }\n\n  return false;\n}\n\nfunction index() {\n  var child = this[0];\n  var i;\n\n  if (child) {\n    i = 0; // eslint-disable-next-line\n\n    while ((child = child.previousSibling) !== null) {\n      if (child.nodeType === 1) i += 1;\n    }\n\n    return i;\n  }\n\n  return undefined;\n}\n\nfunction eq(index) {\n  if (typeof index === 'undefined') return this;\n  var length = this.length;\n\n  if (index > length - 1) {\n    return $([]);\n  }\n\n  if (index < 0) {\n    var returnIndex = length + index;\n    if (returnIndex < 0) return $([]);\n    return $([this[returnIndex]]);\n  }\n\n  return $([this[index]]);\n}\n\nfunction append() {\n  var newChild;\n  var document = getDocument();\n\n  for (var k = 0; k < arguments.length; k += 1) {\n    newChild = k < 0 || arguments.length <= k ? undefined : arguments[k];\n\n    for (var i = 0; i < this.length; i += 1) {\n      if (typeof newChild === 'string') {\n        var tempDiv = document.createElement('div');\n        tempDiv.innerHTML = newChild;\n\n        while (tempDiv.firstChild) {\n          this[i].appendChild(tempDiv.firstChild);\n        }\n      } else if (newChild instanceof Dom7) {\n        for (var j = 0; j < newChild.length; j += 1) {\n          this[i].appendChild(newChild[j]);\n        }\n      } else {\n        this[i].appendChild(newChild);\n      }\n    }\n  }\n\n  return this;\n}\n\nfunction appendTo(parent) {\n  $(parent).append(this);\n  return this;\n}\n\nfunction prepend(newChild) {\n  var document = getDocument();\n  var i;\n  var j;\n\n  for (i = 0; i < this.length; i += 1) {\n    if (typeof newChild === 'string') {\n      var tempDiv = document.createElement('div');\n      tempDiv.innerHTML = newChild;\n\n      for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n        this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n      }\n    } else if (newChild instanceof Dom7) {\n      for (j = 0; j < newChild.length; j += 1) {\n        this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n      }\n    } else {\n      this[i].insertBefore(newChild, this[i].childNodes[0]);\n    }\n  }\n\n  return this;\n}\n\nfunction prependTo(parent) {\n  $(parent).prepend(this);\n  return this;\n}\n\nfunction insertBefore(selector) {\n  var before = $(selector);\n\n  for (var i = 0; i < this.length; i += 1) {\n    if (before.length === 1) {\n      before[0].parentNode.insertBefore(this[i], before[0]);\n    } else if (before.length > 1) {\n      for (var j = 0; j < before.length; j += 1) {\n        before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n      }\n    }\n  }\n}\n\nfunction insertAfter(selector) {\n  var after = $(selector);\n\n  for (var i = 0; i < this.length; i += 1) {\n    if (after.length === 1) {\n      after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n    } else if (after.length > 1) {\n      for (var j = 0; j < after.length; j += 1) {\n        after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n      }\n    }\n  }\n}\n\nfunction next(selector) {\n  if (this.length > 0) {\n    if (selector) {\n      if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n        return $([this[0].nextElementSibling]);\n      }\n\n      return $([]);\n    }\n\n    if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n    return $([]);\n  }\n\n  return $([]);\n}\n\nfunction nextAll(selector) {\n  var nextEls = [];\n  var el = this[0];\n  if (!el) return $([]);\n\n  while (el.nextElementSibling) {\n    var _next = el.nextElementSibling; // eslint-disable-line\n\n    if (selector) {\n      if ($(_next).is(selector)) nextEls.push(_next);\n    } else nextEls.push(_next);\n\n    el = _next;\n  }\n\n  return $(nextEls);\n}\n\nfunction prev(selector) {\n  if (this.length > 0) {\n    var el = this[0];\n\n    if (selector) {\n      if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n        return $([el.previousElementSibling]);\n      }\n\n      return $([]);\n    }\n\n    if (el.previousElementSibling) return $([el.previousElementSibling]);\n    return $([]);\n  }\n\n  return $([]);\n}\n\nfunction prevAll(selector) {\n  var prevEls = [];\n  var el = this[0];\n  if (!el) return $([]);\n\n  while (el.previousElementSibling) {\n    var _prev = el.previousElementSibling; // eslint-disable-line\n\n    if (selector) {\n      if ($(_prev).is(selector)) prevEls.push(_prev);\n    } else prevEls.push(_prev);\n\n    el = _prev;\n  }\n\n  return $(prevEls);\n}\n\nfunction siblings(selector) {\n  return this.nextAll(selector).add(this.prevAll(selector));\n}\n\nfunction parent(selector) {\n  var parents = []; // eslint-disable-line\n\n  for (var i = 0; i < this.length; i += 1) {\n    if (this[i].parentNode !== null) {\n      if (selector) {\n        if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n      } else {\n        parents.push(this[i].parentNode);\n      }\n    }\n  }\n\n  return $(parents);\n}\n\nfunction parents(selector) {\n  var parents = []; // eslint-disable-line\n\n  for (var i = 0; i < this.length; i += 1) {\n    var _parent = this[i].parentNode; // eslint-disable-line\n\n    while (_parent) {\n      if (selector) {\n        if ($(_parent).is(selector)) parents.push(_parent);\n      } else {\n        parents.push(_parent);\n      }\n\n      _parent = _parent.parentNode;\n    }\n  }\n\n  return $(parents);\n}\n\nfunction closest(selector) {\n  var closest = this; // eslint-disable-line\n\n  if (typeof selector === 'undefined') {\n    return $([]);\n  }\n\n  if (!closest.is(selector)) {\n    closest = closest.parents(selector).eq(0);\n  }\n\n  return closest;\n}\n\nfunction find(selector) {\n  var foundElements = [];\n\n  for (var i = 0; i < this.length; i += 1) {\n    var found = this[i].querySelectorAll(selector);\n\n    for (var j = 0; j < found.length; j += 1) {\n      foundElements.push(found[j]);\n    }\n  }\n\n  return $(foundElements);\n}\n\nfunction children(selector) {\n  var children = []; // eslint-disable-line\n\n  for (var i = 0; i < this.length; i += 1) {\n    var childNodes = this[i].children;\n\n    for (var j = 0; j < childNodes.length; j += 1) {\n      if (!selector || $(childNodes[j]).is(selector)) {\n        children.push(childNodes[j]);\n      }\n    }\n  }\n\n  return $(children);\n}\n\nfunction remove() {\n  for (var i = 0; i < this.length; i += 1) {\n    if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n  }\n\n  return this;\n}\n\nfunction detach() {\n  return this.remove();\n}\n\nfunction add() {\n  var dom = this;\n  var i;\n  var j;\n\n  for (var _len10 = arguments.length, els = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {\n    els[_key10] = arguments[_key10];\n  }\n\n  for (i = 0; i < els.length; i += 1) {\n    var toAdd = $(els[i]);\n\n    for (j = 0; j < toAdd.length; j += 1) {\n      dom.push(toAdd[j]);\n    }\n  }\n\n  return dom;\n}\n\nfunction empty() {\n  for (var i = 0; i < this.length; i += 1) {\n    var el = this[i];\n\n    if (el.nodeType === 1) {\n      for (var j = 0; j < el.childNodes.length; j += 1) {\n        if (el.childNodes[j].parentNode) {\n          el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n        }\n      }\n\n      el.textContent = '';\n    }\n  }\n\n  return this;\n}\n\nfunction scrollTo() {\n  var window = getWindow();\n\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  var left = args[0],\n      top = args[1],\n      duration = args[2],\n      easing = args[3],\n      callback = args[4];\n\n  if (args.length === 4 && typeof easing === 'function') {\n    callback = easing;\n    left = args[0];\n    top = args[1];\n    duration = args[2];\n    callback = args[3];\n    easing = args[4];\n  }\n\n  if (typeof easing === 'undefined') easing = 'swing';\n  return this.each(function animate() {\n    var el = this;\n    var currentTop;\n    var currentLeft;\n    var maxTop;\n    var maxLeft;\n    var newTop;\n    var newLeft;\n    var scrollTop; // eslint-disable-line\n\n    var scrollLeft; // eslint-disable-line\n\n    var animateTop = top > 0 || top === 0;\n    var animateLeft = left > 0 || left === 0;\n\n    if (typeof easing === 'undefined') {\n      easing = 'swing';\n    }\n\n    if (animateTop) {\n      currentTop = el.scrollTop;\n\n      if (!duration) {\n        el.scrollTop = top;\n      }\n    }\n\n    if (animateLeft) {\n      currentLeft = el.scrollLeft;\n\n      if (!duration) {\n        el.scrollLeft = left;\n      }\n    }\n\n    if (!duration) return;\n\n    if (animateTop) {\n      maxTop = el.scrollHeight - el.offsetHeight;\n      newTop = Math.max(Math.min(top, maxTop), 0);\n    }\n\n    if (animateLeft) {\n      maxLeft = el.scrollWidth - el.offsetWidth;\n      newLeft = Math.max(Math.min(left, maxLeft), 0);\n    }\n\n    var startTime = null;\n    if (animateTop && newTop === currentTop) animateTop = false;\n    if (animateLeft && newLeft === currentLeft) animateLeft = false;\n\n    function render(time) {\n      if (time === void 0) {\n        time = new Date().getTime();\n      }\n\n      if (startTime === null) {\n        startTime = time;\n      }\n\n      var progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n      var easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2;\n      var done;\n      if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop);\n      if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft);\n\n      if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n        el.scrollTop = newTop;\n        done = true;\n      }\n\n      if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n        el.scrollTop = newTop;\n        done = true;\n      }\n\n      if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n        el.scrollLeft = newLeft;\n        done = true;\n      }\n\n      if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n        el.scrollLeft = newLeft;\n        done = true;\n      }\n\n      if (done) {\n        if (callback) callback();\n        return;\n      }\n\n      if (animateTop) el.scrollTop = scrollTop;\n      if (animateLeft) el.scrollLeft = scrollLeft;\n      window.requestAnimationFrame(render);\n    }\n\n    window.requestAnimationFrame(render);\n  });\n} // scrollTop(top, duration, easing, callback) {\n\n\nfunction scrollTop() {\n  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    args[_key2] = arguments[_key2];\n  }\n\n  var top = args[0],\n      duration = args[1],\n      easing = args[2],\n      callback = args[3];\n\n  if (args.length === 3 && typeof easing === 'function') {\n    top = args[0];\n    duration = args[1];\n    callback = args[2];\n    easing = args[3];\n  }\n\n  var dom = this;\n\n  if (typeof top === 'undefined') {\n    if (dom.length > 0) return dom[0].scrollTop;\n    return null;\n  }\n\n  return dom.scrollTo(undefined, top, duration, easing, callback);\n}\n\nfunction scrollLeft() {\n  for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n    args[_key3] = arguments[_key3];\n  }\n\n  var left = args[0],\n      duration = args[1],\n      easing = args[2],\n      callback = args[3];\n\n  if (args.length === 3 && typeof easing === 'function') {\n    left = args[0];\n    duration = args[1];\n    callback = args[2];\n    easing = args[3];\n  }\n\n  var dom = this;\n\n  if (typeof left === 'undefined') {\n    if (dom.length > 0) return dom[0].scrollLeft;\n    return null;\n  }\n\n  return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\nfunction animate(initialProps, initialParams) {\n  var window = getWindow();\n  var els = this;\n  var a = {\n    props: Object.assign({}, initialProps),\n    params: Object.assign({\n      duration: 300,\n      easing: 'swing' // or 'linear'\n\n      /* Callbacks\n      begin(elements)\n      complete(elements)\n      progress(elements, complete, remaining, start, tweenValue)\n      */\n\n    }, initialParams),\n    elements: els,\n    animating: false,\n    que: [],\n    easingProgress: function easingProgress(easing, progress) {\n      if (easing === 'swing') {\n        return 0.5 - Math.cos(progress * Math.PI) / 2;\n      }\n\n      if (typeof easing === 'function') {\n        return easing(progress);\n      }\n\n      return progress;\n    },\n    stop: function stop() {\n      if (a.frameId) {\n        window.cancelAnimationFrame(a.frameId);\n      }\n\n      a.animating = false;\n      a.elements.each(function (el) {\n        var element = el;\n        delete element.dom7AnimateInstance;\n      });\n      a.que = [];\n    },\n    done: function done(complete) {\n      a.animating = false;\n      a.elements.each(function (el) {\n        var element = el;\n        delete element.dom7AnimateInstance;\n      });\n      if (complete) complete(els);\n\n      if (a.que.length > 0) {\n        var que = a.que.shift();\n        a.animate(que[0], que[1]);\n      }\n    },\n    animate: function animate(props, params) {\n      if (a.animating) {\n        a.que.push([props, params]);\n        return a;\n      }\n\n      var elements = []; // Define & Cache Initials & Units\n\n      a.elements.each(function (el, index) {\n        var initialFullValue;\n        var initialValue;\n        var unit;\n        var finalValue;\n        var finalFullValue;\n        if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n        elements[index] = {\n          container: el\n        };\n        Object.keys(props).forEach(function (prop) {\n          initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n          initialValue = parseFloat(initialFullValue);\n          unit = initialFullValue.replace(initialValue, '');\n          finalValue = parseFloat(props[prop]);\n          finalFullValue = props[prop] + unit;\n          elements[index][prop] = {\n            initialFullValue: initialFullValue,\n            initialValue: initialValue,\n            unit: unit,\n            finalValue: finalValue,\n            finalFullValue: finalFullValue,\n            currentValue: initialValue\n          };\n        });\n      });\n      var startTime = null;\n      var time;\n      var elementsDone = 0;\n      var propsDone = 0;\n      var done;\n      var began = false;\n      a.animating = true;\n\n      function render() {\n        time = new Date().getTime();\n        var progress;\n        var easeProgress; // let el;\n\n        if (!began) {\n          began = true;\n          if (params.begin) params.begin(els);\n        }\n\n        if (startTime === null) {\n          startTime = time;\n        }\n\n        if (params.progress) {\n          // eslint-disable-next-line\n          params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime);\n        }\n\n        elements.forEach(function (element) {\n          var el = element;\n          if (done || el.done) return;\n          Object.keys(props).forEach(function (prop) {\n            if (done || el.done) return;\n            progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n            easeProgress = a.easingProgress(params.easing, progress);\n            var _el$prop = el[prop],\n                initialValue = _el$prop.initialValue,\n                finalValue = _el$prop.finalValue,\n                unit = _el$prop.unit;\n            el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);\n            var currentValue = el[prop].currentValue;\n\n            if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) {\n              el.container.style[prop] = finalValue + unit;\n              propsDone += 1;\n\n              if (propsDone === Object.keys(props).length) {\n                el.done = true;\n                elementsDone += 1;\n              }\n\n              if (elementsDone === elements.length) {\n                done = true;\n              }\n            }\n\n            if (done) {\n              a.done(params.complete);\n              return;\n            }\n\n            el.container.style[prop] = currentValue + unit;\n          });\n        });\n        if (done) return; // Then call\n\n        a.frameId = window.requestAnimationFrame(render);\n      }\n\n      a.frameId = window.requestAnimationFrame(render);\n      return a;\n    }\n  };\n\n  if (a.elements.length === 0) {\n    return els;\n  }\n\n  var animateInstance;\n\n  for (var i = 0; i < a.elements.length; i += 1) {\n    if (a.elements[i].dom7AnimateInstance) {\n      animateInstance = a.elements[i].dom7AnimateInstance;\n    } else a.elements[i].dom7AnimateInstance = a;\n  }\n\n  if (!animateInstance) {\n    animateInstance = a;\n  }\n\n  if (initialProps === 'stop') {\n    animateInstance.stop();\n  } else {\n    animateInstance.animate(a.props, a.params);\n  }\n\n  return els;\n}\n\nfunction stop() {\n  var els = this;\n\n  for (var i = 0; i < els.length; i += 1) {\n    if (els[i].dom7AnimateInstance) {\n      els[i].dom7AnimateInstance.stop();\n    }\n  }\n}\n\nvar noTrigger = 'resize scroll'.split(' ');\n\nfunction shortcut(name) {\n  function eventHandler() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    if (typeof args[0] === 'undefined') {\n      for (var i = 0; i < this.length; i += 1) {\n        if (noTrigger.indexOf(name) < 0) {\n          if (name in this[i]) this[i][name]();else {\n            $(this[i]).trigger(name);\n          }\n        }\n      }\n\n      return this;\n    }\n\n    return this.on.apply(this, [name].concat(args));\n  }\n\n  return eventHandler;\n}\n\nvar click = shortcut('click');\nvar blur = shortcut('blur');\nvar focus = shortcut('focus');\nvar focusin = shortcut('focusin');\nvar focusout = shortcut('focusout');\nvar keyup = shortcut('keyup');\nvar keydown = shortcut('keydown');\nvar keypress = shortcut('keypress');\nvar submit = shortcut('submit');\nvar change = shortcut('change');\nvar mousedown = shortcut('mousedown');\nvar mousemove = shortcut('mousemove');\nvar mouseup = shortcut('mouseup');\nvar mouseenter = shortcut('mouseenter');\nvar mouseleave = shortcut('mouseleave');\nvar mouseout = shortcut('mouseout');\nvar mouseover = shortcut('mouseover');\nvar touchstart = shortcut('touchstart');\nvar touchend = shortcut('touchend');\nvar touchmove = shortcut('touchmove');\nvar resize = shortcut('resize');\nvar scroll = shortcut('scroll');\n\nexport default $;\nexport { $, add, addClass, animate, animationEnd, append, appendTo, attr, blur, change, children, click, closest, css, data, dataset, detach, each, empty, eq, filter, find, focus, focusin, focusout, hasClass, height, hide, html, index, insertAfter, insertBefore, is, keydown, keypress, keyup, mousedown, mouseenter, mouseleave, mousemove, mouseout, mouseover, mouseup, next, nextAll, off, offset, on, once, outerHeight, outerWidth, parent, parents, prepend, prependTo, prev, prevAll, prop, remove, removeAttr, removeClass, removeData, resize, scroll, scrollLeft, scrollTo, scrollTop, show, siblings, stop, styles, submit, text, toggleClass, touchend, touchmove, touchstart, transform, transition, transitionEnd, trigger, val, value, width };\n","import { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, transform, transition, on, off, trigger, transitionEnd, outerWidth, outerHeight, styles, offset, css, each, html, text, is, index, eq, append, prepend, next, nextAll, prev, prevAll, parent, parents, closest, find, children, filter, remove } from 'dom7';\nvar Methods = {\n  addClass: addClass,\n  removeClass: removeClass,\n  hasClass: hasClass,\n  toggleClass: toggleClass,\n  attr: attr,\n  removeAttr: removeAttr,\n  transform: transform,\n  transition: transition,\n  on: on,\n  off: off,\n  trigger: trigger,\n  transitionEnd: transitionEnd,\n  outerWidth: outerWidth,\n  outerHeight: outerHeight,\n  styles: styles,\n  offset: offset,\n  css: css,\n  each: each,\n  html: html,\n  text: text,\n  is: is,\n  index: index,\n  eq: eq,\n  append: append,\n  prepend: prepend,\n  next: next,\n  nextAll: nextAll,\n  prev: prev,\n  prevAll: prevAll,\n  parent: parent,\n  parents: parents,\n  closest: closest,\n  find: find,\n  children: children,\n  filter: filter,\n  remove: remove\n};\nObject.keys(Methods).forEach(function (methodName) {\n  Object.defineProperty($.fn, methodName, {\n    value: Methods[methodName],\n    writable: true\n  });\n});\nexport default $;","import { getWindow, getDocument } from 'ssr-window';\nvar support;\n\nfunction calcSupport() {\n  var window = getWindow();\n  var document = getDocument();\n  return {\n    touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),\n    pointerEvents: !!window.PointerEvent && 'maxTouchPoints' in window.navigator && window.navigator.maxTouchPoints >= 0,\n    observer: function checkObserver() {\n      return 'MutationObserver' in window || 'WebkitMutationObserver' in window;\n    }(),\n    passiveListener: function checkPassiveListener() {\n      var supportsPassive = false;\n\n      try {\n        var opts = Object.defineProperty({}, 'passive', {\n          // eslint-disable-next-line\n          get: function get() {\n            supportsPassive = true;\n          }\n        });\n        window.addEventListener('testPassiveListener', null, opts);\n      } catch (e) {// No support\n      }\n\n      return supportsPassive;\n    }(),\n    gestures: function checkGestures() {\n      return 'ongesturestart' in window;\n    }()\n  };\n}\n\nfunction getSupport() {\n  if (!support) {\n    support = calcSupport();\n  }\n\n  return support;\n}\n\nexport { getSupport };","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support';\nvar device;\n\nfunction calcDevice(_temp) {\n  var _ref = _temp === void 0 ? {} : _temp,\n      userAgent = _ref.userAgent;\n\n  var support = getSupport();\n  var window = getWindow();\n  var platform = window.navigator.platform;\n  var ua = userAgent || window.navigator.userAgent;\n  var device = {\n    ios: false,\n    android: false\n  };\n  var screenWidth = window.screen.width;\n  var screenHeight = window.screen.height;\n  var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n\n  var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n  var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n  var iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n  var windows = platform === 'Win32';\n  var macos = platform === 'MacIntel'; // iPadOs 13 fix\n\n  var iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n\n  if (!ipad && macos && support.touch && iPadScreens.indexOf(screenWidth + \"x\" + screenHeight) >= 0) {\n    ipad = ua.match(/(Version)\\/([\\d.]+)/);\n    if (!ipad) ipad = [0, 1, '13_0_0'];\n    macos = false;\n  } // Android\n\n\n  if (android && !windows) {\n    device.os = 'android';\n    device.android = true;\n  }\n\n  if (ipad || iphone || ipod) {\n    device.os = 'ios';\n    device.ios = true;\n  } // Export object\n\n\n  return device;\n}\n\nfunction getDevice(overrides) {\n  if (overrides === void 0) {\n    overrides = {};\n  }\n\n  if (!device) {\n    device = calcDevice(overrides);\n  }\n\n  return device;\n}\n\nexport { getDevice };","import { getWindow } from 'ssr-window';\nvar browser;\n\nfunction calcBrowser() {\n  var window = getWindow();\n\n  function isSafari() {\n    var ua = window.navigator.userAgent.toLowerCase();\n    return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n  }\n\n  return {\n    isEdge: !!window.navigator.userAgent.match(/Edge/g),\n    isSafari: isSafari(),\n    isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n  };\n}\n\nfunction getBrowser() {\n  if (!browser) {\n    browser = calcBrowser();\n  }\n\n  return browser;\n}\n\nexport { getBrowser };","import { getDocument, getWindow } from 'ssr-window';\n\nfunction deleteProps(obj) {\n  var object = obj;\n  Object.keys(object).forEach(function (key) {\n    try {\n      object[key] = null;\n    } catch (e) {// no getter for object\n    }\n\n    try {\n      delete object[key];\n    } catch (e) {// something got wrong\n    }\n  });\n}\n\nfunction nextTick(callback, delay) {\n  if (delay === void 0) {\n    delay = 0;\n  }\n\n  return setTimeout(callback, delay);\n}\n\nfunction now() {\n  return Date.now();\n}\n\nfunction getComputedStyle(el) {\n  var window = getWindow();\n  var style;\n\n  if (window.getComputedStyle) {\n    style = window.getComputedStyle(el, null);\n  }\n\n  if (!style && el.currentStyle) {\n    style = el.currentStyle;\n  }\n\n  if (!style) {\n    style = el.style;\n  }\n\n  return style;\n}\n\nfunction getTranslate(el, axis) {\n  if (axis === void 0) {\n    axis = 'x';\n  }\n\n  var window = getWindow();\n  var matrix;\n  var curTransform;\n  var transformMatrix;\n  var curStyle = getComputedStyle(el, null);\n\n  if (window.WebKitCSSMatrix) {\n    curTransform = curStyle.transform || curStyle.webkitTransform;\n\n    if (curTransform.split(',').length > 6) {\n      curTransform = curTransform.split(', ').map(function (a) {\n        return a.replace(',', '.');\n      }).join(', ');\n    } // Some old versions of Webkit choke when 'none' is passed; pass\n    // empty string instead in this case\n\n\n    transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n  } else {\n    transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n    matrix = transformMatrix.toString().split(',');\n  }\n\n  if (axis === 'x') {\n    // Latest Chrome and webkits Fix\n    if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix\n    else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers\n      else curTransform = parseFloat(matrix[4]);\n  }\n\n  if (axis === 'y') {\n    // Latest Chrome and webkits Fix\n    if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix\n    else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers\n      else curTransform = parseFloat(matrix[5]);\n  }\n\n  return curTransform || 0;\n}\n\nfunction isObject(o) {\n  return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\n\nfunction isNode(node) {\n  // eslint-disable-next-line\n  if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n    return node instanceof HTMLElement;\n  }\n\n  return node && (node.nodeType === 1 || node.nodeType === 11);\n}\n\nfunction extend() {\n  var to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n  var noExtend = ['__proto__', 'constructor', 'prototype'];\n\n  for (var i = 1; i < arguments.length; i += 1) {\n    var nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n\n    if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n      var keysArray = Object.keys(Object(nextSource)).filter(function (key) {\n        return noExtend.indexOf(key) < 0;\n      });\n\n      for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n        var nextKey = keysArray[nextIndex];\n        var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n\n        if (desc !== undefined && desc.enumerable) {\n          if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n            if (nextSource[nextKey].__swiper__) {\n              to[nextKey] = nextSource[nextKey];\n            } else {\n              extend(to[nextKey], nextSource[nextKey]);\n            }\n          } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n            to[nextKey] = {};\n\n            if (nextSource[nextKey].__swiper__) {\n              to[nextKey] = nextSource[nextKey];\n            } else {\n              extend(to[nextKey], nextSource[nextKey]);\n            }\n          } else {\n            to[nextKey] = nextSource[nextKey];\n          }\n        }\n      }\n    }\n  }\n\n  return to;\n}\n\nfunction bindModuleMethods(instance, obj) {\n  Object.keys(obj).forEach(function (key) {\n    if (isObject(obj[key])) {\n      Object.keys(obj[key]).forEach(function (subKey) {\n        if (typeof obj[key][subKey] === 'function') {\n          obj[key][subKey] = obj[key][subKey].bind(instance);\n        }\n      });\n    }\n\n    instance[key] = obj[key];\n  });\n}\n\nfunction classesToSelector(classes) {\n  if (classes === void 0) {\n    classes = '';\n  }\n\n  return \".\" + classes.trim().replace(/([\\.:!\\/])/g, '\\\\$1') // eslint-disable-line\n  .replace(/ /g, '.');\n}\n\nfunction createElementIfNotDefined($container, params, createElements, checkProps) {\n  var document = getDocument();\n\n  if (createElements) {\n    Object.keys(checkProps).forEach(function (key) {\n      if (!params[key] && params.auto === true) {\n        var element = document.createElement('div');\n        element.className = checkProps[key];\n        $container.append(element);\n        params[key] = element;\n      }\n    });\n  }\n\n  return params;\n}\n\nexport { deleteProps, nextTick, now, getTranslate, isObject, extend, bindModuleMethods, getComputedStyle, classesToSelector, createElementIfNotDefined };","import { getWindow } from 'ssr-window';\nimport { extend } from '../../utils/utils';\n\nvar supportsResizeObserver = function supportsResizeObserver() {\n  var window = getWindow();\n  return typeof window.ResizeObserver !== 'undefined';\n};\n\nexport default {\n  name: 'resize',\n  create: function create() {\n    var swiper = this;\n    extend(swiper, {\n      resize: {\n        observer: null,\n        createObserver: function createObserver() {\n          if (!swiper || swiper.destroyed || !swiper.initialized) return;\n          swiper.resize.observer = new ResizeObserver(function (entries) {\n            var width = swiper.width,\n                height = swiper.height;\n            var newWidth = width;\n            var newHeight = height;\n            entries.forEach(function (_ref) {\n              var contentBoxSize = _ref.contentBoxSize,\n                  contentRect = _ref.contentRect,\n                  target = _ref.target;\n              if (target && target !== swiper.el) return;\n              newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n              newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n            });\n\n            if (newWidth !== width || newHeight !== height) {\n              swiper.resize.resizeHandler();\n            }\n          });\n          swiper.resize.observer.observe(swiper.el);\n        },\n        removeObserver: function removeObserver() {\n          if (swiper.resize.observer && swiper.resize.observer.unobserve && swiper.el) {\n            swiper.resize.observer.unobserve(swiper.el);\n            swiper.resize.observer = null;\n          }\n        },\n        resizeHandler: function resizeHandler() {\n          if (!swiper || swiper.destroyed || !swiper.initialized) return;\n          swiper.emit('beforeResize');\n          swiper.emit('resize');\n        },\n        orientationChangeHandler: function orientationChangeHandler() {\n          if (!swiper || swiper.destroyed || !swiper.initialized) return;\n          swiper.emit('orientationchange');\n        }\n      }\n    });\n  },\n  on: {\n    init: function init(swiper) {\n      var window = getWindow();\n\n      if (swiper.params.resizeObserver && supportsResizeObserver()) {\n        swiper.resize.createObserver();\n        return;\n      } // Emit resize\n\n\n      window.addEventListener('resize', swiper.resize.resizeHandler); // Emit orientationchange\n\n      window.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n    },\n    destroy: function destroy(swiper) {\n      var window = getWindow();\n      swiper.resize.removeObserver();\n      window.removeEventListener('resize', swiper.resize.resizeHandler);\n      window.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport { getWindow } from 'ssr-window';\nimport { bindModuleMethods } from '../../utils/utils';\nvar Observer = {\n  attach: function attach(target, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var window = getWindow();\n    var swiper = this;\n    var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n    var observer = new ObserverFunc(function (mutations) {\n      // The observerUpdate event should only be triggered\n      // once despite the number of mutations.  Additional\n      // triggers are redundant and are very costly\n      if (mutations.length === 1) {\n        swiper.emit('observerUpdate', mutations[0]);\n        return;\n      }\n\n      var observerUpdate = function observerUpdate() {\n        swiper.emit('observerUpdate', mutations[0]);\n      };\n\n      if (window.requestAnimationFrame) {\n        window.requestAnimationFrame(observerUpdate);\n      } else {\n        window.setTimeout(observerUpdate, 0);\n      }\n    });\n    observer.observe(target, {\n      attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n      childList: typeof options.childList === 'undefined' ? true : options.childList,\n      characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n    });\n    swiper.observer.observers.push(observer);\n  },\n  init: function init() {\n    var swiper = this;\n    if (!swiper.support.observer || !swiper.params.observer) return;\n\n    if (swiper.params.observeParents) {\n      var containerParents = swiper.$el.parents();\n\n      for (var i = 0; i < containerParents.length; i += 1) {\n        swiper.observer.attach(containerParents[i]);\n      }\n    } // Observe container\n\n\n    swiper.observer.attach(swiper.$el[0], {\n      childList: swiper.params.observeSlideChildren\n    }); // Observe wrapper\n\n    swiper.observer.attach(swiper.$wrapperEl[0], {\n      attributes: false\n    });\n  },\n  destroy: function destroy() {\n    var swiper = this;\n    swiper.observer.observers.forEach(function (observer) {\n      observer.disconnect();\n    });\n    swiper.observer.observers = [];\n  }\n};\nexport default {\n  name: 'observer',\n  params: {\n    observer: false,\n    observeParents: false,\n    observeSlideChildren: false\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      observer: _extends({}, Observer, {\n        observers: []\n      })\n    });\n  },\n  on: {\n    init: function init(swiper) {\n      swiper.observer.init();\n    },\n    destroy: function destroy(swiper) {\n      swiper.observer.destroy();\n    }\n  }\n};","/* eslint-disable no-underscore-dangle */\nexport default {\n  on: function on(events, handler, priority) {\n    var self = this;\n    if (typeof handler !== 'function') return self;\n    var method = priority ? 'unshift' : 'push';\n    events.split(' ').forEach(function (event) {\n      if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n      self.eventsListeners[event][method](handler);\n    });\n    return self;\n  },\n  once: function once(events, handler, priority) {\n    var self = this;\n    if (typeof handler !== 'function') return self;\n\n    function onceHandler() {\n      self.off(events, onceHandler);\n\n      if (onceHandler.__emitterProxy) {\n        delete onceHandler.__emitterProxy;\n      }\n\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      handler.apply(self, args);\n    }\n\n    onceHandler.__emitterProxy = handler;\n    return self.on(events, onceHandler, priority);\n  },\n  onAny: function onAny(handler, priority) {\n    var self = this;\n    if (typeof handler !== 'function') return self;\n    var method = priority ? 'unshift' : 'push';\n\n    if (self.eventsAnyListeners.indexOf(handler) < 0) {\n      self.eventsAnyListeners[method](handler);\n    }\n\n    return self;\n  },\n  offAny: function offAny(handler) {\n    var self = this;\n    if (!self.eventsAnyListeners) return self;\n    var index = self.eventsAnyListeners.indexOf(handler);\n\n    if (index >= 0) {\n      self.eventsAnyListeners.splice(index, 1);\n    }\n\n    return self;\n  },\n  off: function off(events, handler) {\n    var self = this;\n    if (!self.eventsListeners) return self;\n    events.split(' ').forEach(function (event) {\n      if (typeof handler === 'undefined') {\n        self.eventsListeners[event] = [];\n      } else if (self.eventsListeners[event]) {\n        self.eventsListeners[event].forEach(function (eventHandler, index) {\n          if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n            self.eventsListeners[event].splice(index, 1);\n          }\n        });\n      }\n    });\n    return self;\n  },\n  emit: function emit() {\n    var self = this;\n    if (!self.eventsListeners) return self;\n    var events;\n    var data;\n    var context;\n\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n      events = args[0];\n      data = args.slice(1, args.length);\n      context = self;\n    } else {\n      events = args[0].events;\n      data = args[0].data;\n      context = args[0].context || self;\n    }\n\n    data.unshift(context);\n    var eventsArray = Array.isArray(events) ? events : events.split(' ');\n    eventsArray.forEach(function (event) {\n      if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n        self.eventsAnyListeners.forEach(function (eventHandler) {\n          eventHandler.apply(context, [event].concat(data));\n        });\n      }\n\n      if (self.eventsListeners && self.eventsListeners[event]) {\n        self.eventsListeners[event].forEach(function (eventHandler) {\n          eventHandler.apply(context, data);\n        });\n      }\n    });\n    return self;\n  }\n};","import updateSize from './updateSize';\nimport updateSlides from './updateSlides';\nimport updateAutoHeight from './updateAutoHeight';\nimport updateSlidesOffset from './updateSlidesOffset';\nimport updateSlidesProgress from './updateSlidesProgress';\nimport updateProgress from './updateProgress';\nimport updateSlidesClasses from './updateSlidesClasses';\nimport updateActiveIndex from './updateActiveIndex';\nimport updateClickedSlide from './updateClickedSlide';\nexport default {\n  updateSize: updateSize,\n  updateSlides: updateSlides,\n  updateAutoHeight: updateAutoHeight,\n  updateSlidesOffset: updateSlidesOffset,\n  updateSlidesProgress: updateSlidesProgress,\n  updateProgress: updateProgress,\n  updateSlidesClasses: updateSlidesClasses,\n  updateActiveIndex: updateActiveIndex,\n  updateClickedSlide: updateClickedSlide\n};","import { extend } from '../../../utils/utils';\nexport default function updateSize() {\n  var swiper = this;\n  var width;\n  var height;\n  var $el = swiper.$el;\n\n  if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n    width = swiper.params.width;\n  } else {\n    width = $el[0].clientWidth;\n  }\n\n  if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n    height = swiper.params.height;\n  } else {\n    height = $el[0].clientHeight;\n  }\n\n  if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n    return;\n  } // Subtract paddings\n\n\n  width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10);\n  height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10);\n  if (Number.isNaN(width)) width = 0;\n  if (Number.isNaN(height)) height = 0;\n  extend(swiper, {\n    width: width,\n    height: height,\n    size: swiper.isHorizontal() ? width : height\n  });\n}","import { extend } from '../../../utils/utils';\nexport default function updateSlides() {\n  var swiper = this;\n\n  function getDirectionLabel(property) {\n    if (swiper.isHorizontal()) {\n      return property;\n    } // prettier-ignore\n\n\n    return {\n      'width': 'height',\n      'margin-top': 'margin-left',\n      'margin-bottom ': 'margin-right',\n      'margin-left': 'margin-top',\n      'margin-right': 'margin-bottom',\n      'padding-left': 'padding-top',\n      'padding-right': 'padding-bottom',\n      'marginRight': 'marginBottom'\n    }[property];\n  }\n\n  function getDirectionPropertyValue(node, label) {\n    return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n  }\n\n  var params = swiper.params;\n  var $wrapperEl = swiper.$wrapperEl,\n      swiperSize = swiper.size,\n      rtl = swiper.rtlTranslate,\n      wrongRTL = swiper.wrongRTL;\n  var isVirtual = swiper.virtual && params.virtual.enabled;\n  var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n  var slides = $wrapperEl.children(\".\" + swiper.params.slideClass);\n  var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n  var snapGrid = [];\n  var slidesGrid = [];\n  var slidesSizesGrid = [];\n  var offsetBefore = params.slidesOffsetBefore;\n\n  if (typeof offsetBefore === 'function') {\n    offsetBefore = params.slidesOffsetBefore.call(swiper);\n  }\n\n  var offsetAfter = params.slidesOffsetAfter;\n\n  if (typeof offsetAfter === 'function') {\n    offsetAfter = params.slidesOffsetAfter.call(swiper);\n  }\n\n  var previousSnapGridLength = swiper.snapGrid.length;\n  var previousSlidesGridLength = swiper.slidesGrid.length;\n  var spaceBetween = params.spaceBetween;\n  var slidePosition = -offsetBefore;\n  var prevSlideSize = 0;\n  var index = 0;\n\n  if (typeof swiperSize === 'undefined') {\n    return;\n  }\n\n  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n    spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n  }\n\n  swiper.virtualSize = -spaceBetween; // reset margins\n\n  if (rtl) slides.css({\n    marginLeft: '',\n    marginBottom: '',\n    marginTop: ''\n  });else slides.css({\n    marginRight: '',\n    marginBottom: '',\n    marginTop: ''\n  });\n  var slidesNumberEvenToRows;\n\n  if (params.slidesPerColumn > 1) {\n    if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {\n      slidesNumberEvenToRows = slidesLength;\n    } else {\n      slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;\n    }\n\n    if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {\n      slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);\n    }\n  } // Calc slides\n\n\n  var slideSize;\n  var slidesPerColumn = params.slidesPerColumn;\n  var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n  var numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);\n\n  for (var i = 0; i < slidesLength; i += 1) {\n    slideSize = 0;\n    var slide = slides.eq(i);\n\n    if (params.slidesPerColumn > 1) {\n      // Set slides order\n      var newSlideOrderIndex = void 0;\n      var column = void 0;\n      var row = void 0;\n\n      if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) {\n        var groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn));\n        var slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;\n        var columnsInGroup = groupIndex === 0 ? params.slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup);\n        row = Math.floor(slideIndexInGroup / columnsInGroup);\n        column = slideIndexInGroup - row * columnsInGroup + groupIndex * params.slidesPerGroup;\n        newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn;\n        slide.css({\n          '-webkit-box-ordinal-group': newSlideOrderIndex,\n          '-moz-box-ordinal-group': newSlideOrderIndex,\n          '-ms-flex-order': newSlideOrderIndex,\n          '-webkit-order': newSlideOrderIndex,\n          order: newSlideOrderIndex\n        });\n      } else if (params.slidesPerColumnFill === 'column') {\n        column = Math.floor(i / slidesPerColumn);\n        row = i - column * slidesPerColumn;\n\n        if (column > numFullColumns || column === numFullColumns && row === slidesPerColumn - 1) {\n          row += 1;\n\n          if (row >= slidesPerColumn) {\n            row = 0;\n            column += 1;\n          }\n        }\n      } else {\n        row = Math.floor(i / slidesPerRow);\n        column = i - row * slidesPerRow;\n      }\n\n      slide.css(getDirectionLabel('margin-top'), row !== 0 ? params.spaceBetween && params.spaceBetween + \"px\" : '');\n    }\n\n    if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n    if (params.slidesPerView === 'auto') {\n      var slideStyles = getComputedStyle(slide[0]);\n      var currentTransform = slide[0].style.transform;\n      var currentWebKitTransform = slide[0].style.webkitTransform;\n\n      if (currentTransform) {\n        slide[0].style.transform = 'none';\n      }\n\n      if (currentWebKitTransform) {\n        slide[0].style.webkitTransform = 'none';\n      }\n\n      if (params.roundLengths) {\n        slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n      } else {\n        // eslint-disable-next-line\n        var width = getDirectionPropertyValue(slideStyles, 'width');\n        var paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n        var paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n        var marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n        var marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n        var boxSizing = slideStyles.getPropertyValue('box-sizing');\n\n        if (boxSizing && boxSizing === 'border-box') {\n          slideSize = width + marginLeft + marginRight;\n        } else {\n          var _slide$ = slide[0],\n              clientWidth = _slide$.clientWidth,\n              offsetWidth = _slide$.offsetWidth;\n          slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n        }\n      }\n\n      if (currentTransform) {\n        slide[0].style.transform = currentTransform;\n      }\n\n      if (currentWebKitTransform) {\n        slide[0].style.webkitTransform = currentWebKitTransform;\n      }\n\n      if (params.roundLengths) slideSize = Math.floor(slideSize);\n    } else {\n      slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n      if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n      if (slides[i]) {\n        slides[i].style[getDirectionLabel('width')] = slideSize + \"px\";\n      }\n    }\n\n    if (slides[i]) {\n      slides[i].swiperSlideSize = slideSize;\n    }\n\n    slidesSizesGrid.push(slideSize);\n\n    if (params.centeredSlides) {\n      slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n      if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n      if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n      if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n      if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n      if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n      slidesGrid.push(slidePosition);\n    } else {\n      if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n      if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n      slidesGrid.push(slidePosition);\n      slidePosition = slidePosition + slideSize + spaceBetween;\n    }\n\n    swiper.virtualSize += slideSize + spaceBetween;\n    prevSlideSize = slideSize;\n    index += 1;\n  }\n\n  swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n  var newSlidesGrid;\n\n  if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n    $wrapperEl.css({\n      width: swiper.virtualSize + params.spaceBetween + \"px\"\n    });\n  }\n\n  if (params.setWrapperSize) {\n    var _$wrapperEl$css;\n\n    $wrapperEl.css((_$wrapperEl$css = {}, _$wrapperEl$css[getDirectionLabel('width')] = swiper.virtualSize + params.spaceBetween + \"px\", _$wrapperEl$css));\n  }\n\n  if (params.slidesPerColumn > 1) {\n    var _$wrapperEl$css2;\n\n    swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;\n    swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;\n    $wrapperEl.css((_$wrapperEl$css2 = {}, _$wrapperEl$css2[getDirectionLabel('width')] = swiper.virtualSize + params.spaceBetween + \"px\", _$wrapperEl$css2));\n\n    if (params.centeredSlides) {\n      newSlidesGrid = [];\n\n      for (var _i = 0; _i < snapGrid.length; _i += 1) {\n        var slidesGridItem = snapGrid[_i];\n        if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n        if (snapGrid[_i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n      }\n\n      snapGrid = newSlidesGrid;\n    }\n  } // Remove last grid elements depending on width\n\n\n  if (!params.centeredSlides) {\n    newSlidesGrid = [];\n\n    for (var _i2 = 0; _i2 < snapGrid.length; _i2 += 1) {\n      var _slidesGridItem = snapGrid[_i2];\n      if (params.roundLengths) _slidesGridItem = Math.floor(_slidesGridItem);\n\n      if (snapGrid[_i2] <= swiper.virtualSize - swiperSize) {\n        newSlidesGrid.push(_slidesGridItem);\n      }\n    }\n\n    snapGrid = newSlidesGrid;\n\n    if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n      snapGrid.push(swiper.virtualSize - swiperSize);\n    }\n  }\n\n  if (snapGrid.length === 0) snapGrid = [0];\n\n  if (params.spaceBetween !== 0) {\n    var _slides$filter$css;\n\n    var key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n    slides.filter(function (_, slideIndex) {\n      if (!params.cssMode) return true;\n\n      if (slideIndex === slides.length - 1) {\n        return false;\n      }\n\n      return true;\n    }).css((_slides$filter$css = {}, _slides$filter$css[key] = spaceBetween + \"px\", _slides$filter$css));\n  }\n\n  if (params.centeredSlides && params.centeredSlidesBounds) {\n    var allSlidesSize = 0;\n    slidesSizesGrid.forEach(function (slideSizeValue) {\n      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n    });\n    allSlidesSize -= params.spaceBetween;\n    var maxSnap = allSlidesSize - swiperSize;\n    snapGrid = snapGrid.map(function (snap) {\n      if (snap < 0) return -offsetBefore;\n      if (snap > maxSnap) return maxSnap + offsetAfter;\n      return snap;\n    });\n  }\n\n  if (params.centerInsufficientSlides) {\n    var _allSlidesSize = 0;\n    slidesSizesGrid.forEach(function (slideSizeValue) {\n      _allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n    });\n    _allSlidesSize -= params.spaceBetween;\n\n    if (_allSlidesSize < swiperSize) {\n      var allSlidesOffset = (swiperSize - _allSlidesSize) / 2;\n      snapGrid.forEach(function (snap, snapIndex) {\n        snapGrid[snapIndex] = snap - allSlidesOffset;\n      });\n      slidesGrid.forEach(function (snap, snapIndex) {\n        slidesGrid[snapIndex] = snap + allSlidesOffset;\n      });\n    }\n  }\n\n  extend(swiper, {\n    slides: slides,\n    snapGrid: snapGrid,\n    slidesGrid: slidesGrid,\n    slidesSizesGrid: slidesSizesGrid\n  });\n\n  if (slidesLength !== previousSlidesLength) {\n    swiper.emit('slidesLengthChange');\n  }\n\n  if (snapGrid.length !== previousSnapGridLength) {\n    if (swiper.params.watchOverflow) swiper.checkOverflow();\n    swiper.emit('snapGridLengthChange');\n  }\n\n  if (slidesGrid.length !== previousSlidesGridLength) {\n    swiper.emit('slidesGridLengthChange');\n  }\n\n  if (params.watchSlidesProgress || params.watchSlidesVisibility) {\n    swiper.updateSlidesOffset();\n  }\n}","export default function updateAutoHeight(speed) {\n  var swiper = this;\n  var activeSlides = [];\n  var isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n  var newHeight = 0;\n  var i;\n\n  if (typeof speed === 'number') {\n    swiper.setTransition(speed);\n  } else if (speed === true) {\n    swiper.setTransition(swiper.params.speed);\n  }\n\n  var getSlideByIndex = function getSlideByIndex(index) {\n    if (isVirtual) {\n      return swiper.slides.filter(function (el) {\n        return parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index;\n      })[0];\n    }\n\n    return swiper.slides.eq(index)[0];\n  }; // Find slides currently in view\n\n\n  if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n    if (swiper.params.centeredSlides) {\n      swiper.visibleSlides.each(function (slide) {\n        activeSlides.push(slide);\n      });\n    } else {\n      for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n        var index = swiper.activeIndex + i;\n        if (index > swiper.slides.length && !isVirtual) break;\n        activeSlides.push(getSlideByIndex(index));\n      }\n    }\n  } else {\n    activeSlides.push(getSlideByIndex(swiper.activeIndex));\n  } // Find new height from highest slide in view\n\n\n  for (i = 0; i < activeSlides.length; i += 1) {\n    if (typeof activeSlides[i] !== 'undefined') {\n      var height = activeSlides[i].offsetHeight;\n      newHeight = height > newHeight ? height : newHeight;\n    }\n  } // Update Height\n\n\n  if (newHeight) swiper.$wrapperEl.css('height', newHeight + \"px\");\n}","export default function updateSlidesOffset() {\n  var swiper = this;\n  var slides = swiper.slides;\n\n  for (var i = 0; i < slides.length; i += 1) {\n    slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n  }\n}","import $ from '../../../utils/dom';\nexport default function updateSlidesProgress(translate) {\n  if (translate === void 0) {\n    translate = this && this.translate || 0;\n  }\n\n  var swiper = this;\n  var params = swiper.params;\n  var slides = swiper.slides,\n      rtl = swiper.rtlTranslate;\n  if (slides.length === 0) return;\n  if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n  var offsetCenter = -translate;\n  if (rtl) offsetCenter = translate; // Visible Slides\n\n  slides.removeClass(params.slideVisibleClass);\n  swiper.visibleSlidesIndexes = [];\n  swiper.visibleSlides = [];\n\n  for (var i = 0; i < slides.length; i += 1) {\n    var slide = slides[i];\n    var slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slide.swiperSlideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n\n    if (params.watchSlidesVisibility || params.centeredSlides && params.autoHeight) {\n      var slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n      var slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n      var isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n\n      if (isVisible) {\n        swiper.visibleSlides.push(slide);\n        swiper.visibleSlidesIndexes.push(i);\n        slides.eq(i).addClass(params.slideVisibleClass);\n      }\n    }\n\n    slide.progress = rtl ? -slideProgress : slideProgress;\n  }\n\n  swiper.visibleSlides = $(swiper.visibleSlides);\n}","import { extend } from '../../../utils/utils';\nexport default function updateProgress(translate) {\n  var swiper = this;\n\n  if (typeof translate === 'undefined') {\n    var multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line\n\n    translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n  }\n\n  var params = swiper.params;\n  var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  var progress = swiper.progress,\n      isBeginning = swiper.isBeginning,\n      isEnd = swiper.isEnd;\n  var wasBeginning = isBeginning;\n  var wasEnd = isEnd;\n\n  if (translatesDiff === 0) {\n    progress = 0;\n    isBeginning = true;\n    isEnd = true;\n  } else {\n    progress = (translate - swiper.minTranslate()) / translatesDiff;\n    isBeginning = progress <= 0;\n    isEnd = progress >= 1;\n  }\n\n  extend(swiper, {\n    progress: progress,\n    isBeginning: isBeginning,\n    isEnd: isEnd\n  });\n  if (params.watchSlidesProgress || params.watchSlidesVisibility || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n\n  if (isBeginning && !wasBeginning) {\n    swiper.emit('reachBeginning toEdge');\n  }\n\n  if (isEnd && !wasEnd) {\n    swiper.emit('reachEnd toEdge');\n  }\n\n  if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n    swiper.emit('fromEdge');\n  }\n\n  swiper.emit('progress', progress);\n}","export default function updateSlidesClasses() {\n  var swiper = this;\n  var slides = swiper.slides,\n      params = swiper.params,\n      $wrapperEl = swiper.$wrapperEl,\n      activeIndex = swiper.activeIndex,\n      realIndex = swiper.realIndex;\n  var isVirtual = swiper.virtual && params.virtual.enabled;\n  slides.removeClass(params.slideActiveClass + \" \" + params.slideNextClass + \" \" + params.slidePrevClass + \" \" + params.slideDuplicateActiveClass + \" \" + params.slideDuplicateNextClass + \" \" + params.slideDuplicatePrevClass);\n  var activeSlide;\n\n  if (isVirtual) {\n    activeSlide = swiper.$wrapperEl.find(\".\" + params.slideClass + \"[data-swiper-slide-index=\\\"\" + activeIndex + \"\\\"]\");\n  } else {\n    activeSlide = slides.eq(activeIndex);\n  } // Active classes\n\n\n  activeSlide.addClass(params.slideActiveClass);\n\n  if (params.loop) {\n    // Duplicate to all looped slides\n    if (activeSlide.hasClass(params.slideDuplicateClass)) {\n      $wrapperEl.children(\".\" + params.slideClass + \":not(.\" + params.slideDuplicateClass + \")[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]\").addClass(params.slideDuplicateActiveClass);\n    } else {\n      $wrapperEl.children(\".\" + params.slideClass + \".\" + params.slideDuplicateClass + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]\").addClass(params.slideDuplicateActiveClass);\n    }\n  } // Next Slide\n\n\n  var nextSlide = activeSlide.nextAll(\".\" + params.slideClass).eq(0).addClass(params.slideNextClass);\n\n  if (params.loop && nextSlide.length === 0) {\n    nextSlide = slides.eq(0);\n    nextSlide.addClass(params.slideNextClass);\n  } // Prev Slide\n\n\n  var prevSlide = activeSlide.prevAll(\".\" + params.slideClass).eq(0).addClass(params.slidePrevClass);\n\n  if (params.loop && prevSlide.length === 0) {\n    prevSlide = slides.eq(-1);\n    prevSlide.addClass(params.slidePrevClass);\n  }\n\n  if (params.loop) {\n    // Duplicate to all looped slides\n    if (nextSlide.hasClass(params.slideDuplicateClass)) {\n      $wrapperEl.children(\".\" + params.slideClass + \":not(.\" + params.slideDuplicateClass + \")[data-swiper-slide-index=\\\"\" + nextSlide.attr('data-swiper-slide-index') + \"\\\"]\").addClass(params.slideDuplicateNextClass);\n    } else {\n      $wrapperEl.children(\".\" + params.slideClass + \".\" + params.slideDuplicateClass + \"[data-swiper-slide-index=\\\"\" + nextSlide.attr('data-swiper-slide-index') + \"\\\"]\").addClass(params.slideDuplicateNextClass);\n    }\n\n    if (prevSlide.hasClass(params.slideDuplicateClass)) {\n      $wrapperEl.children(\".\" + params.slideClass + \":not(.\" + params.slideDuplicateClass + \")[data-swiper-slide-index=\\\"\" + prevSlide.attr('data-swiper-slide-index') + \"\\\"]\").addClass(params.slideDuplicatePrevClass);\n    } else {\n      $wrapperEl.children(\".\" + params.slideClass + \".\" + params.slideDuplicateClass + \"[data-swiper-slide-index=\\\"\" + prevSlide.attr('data-swiper-slide-index') + \"\\\"]\").addClass(params.slideDuplicatePrevClass);\n    }\n  }\n\n  swiper.emitSlidesClasses();\n}","import { extend } from '../../../utils/utils';\nexport default function updateActiveIndex(newActiveIndex) {\n  var swiper = this;\n  var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n  var slidesGrid = swiper.slidesGrid,\n      snapGrid = swiper.snapGrid,\n      params = swiper.params,\n      previousIndex = swiper.activeIndex,\n      previousRealIndex = swiper.realIndex,\n      previousSnapIndex = swiper.snapIndex;\n  var activeIndex = newActiveIndex;\n  var snapIndex;\n\n  if (typeof activeIndex === 'undefined') {\n    for (var i = 0; i < slidesGrid.length; i += 1) {\n      if (typeof slidesGrid[i + 1] !== 'undefined') {\n        if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n          activeIndex = i;\n        } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n          activeIndex = i + 1;\n        }\n      } else if (translate >= slidesGrid[i]) {\n        activeIndex = i;\n      }\n    } // Normalize slideIndex\n\n\n    if (params.normalizeSlideIndex) {\n      if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n    }\n  }\n\n  if (snapGrid.indexOf(translate) >= 0) {\n    snapIndex = snapGrid.indexOf(translate);\n  } else {\n    var skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n    snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n  }\n\n  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n  if (activeIndex === previousIndex) {\n    if (snapIndex !== previousSnapIndex) {\n      swiper.snapIndex = snapIndex;\n      swiper.emit('snapIndexChange');\n    }\n\n    return;\n  } // Get real index\n\n\n  var realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n  extend(swiper, {\n    snapIndex: snapIndex,\n    realIndex: realIndex,\n    previousIndex: previousIndex,\n    activeIndex: activeIndex\n  });\n  swiper.emit('activeIndexChange');\n  swiper.emit('snapIndexChange');\n\n  if (previousRealIndex !== realIndex) {\n    swiper.emit('realIndexChange');\n  }\n\n  if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n    swiper.emit('slideChange');\n  }\n}","import $ from '../../../utils/dom';\nexport default function updateClickedSlide(e) {\n  var swiper = this;\n  var params = swiper.params;\n  var slide = $(e.target).closest(\".\" + params.slideClass)[0];\n  var slideFound = false;\n  var slideIndex;\n\n  if (slide) {\n    for (var i = 0; i < swiper.slides.length; i += 1) {\n      if (swiper.slides[i] === slide) {\n        slideFound = true;\n        slideIndex = i;\n        break;\n      }\n    }\n  }\n\n  if (slide && slideFound) {\n    swiper.clickedSlide = slide;\n\n    if (swiper.virtual && swiper.params.virtual.enabled) {\n      swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n    } else {\n      swiper.clickedIndex = slideIndex;\n    }\n  } else {\n    swiper.clickedSlide = undefined;\n    swiper.clickedIndex = undefined;\n    return;\n  }\n\n  if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n    swiper.slideToClickedSlide();\n  }\n}","import slideTo from './slideTo';\nimport slideToLoop from './slideToLoop';\nimport slideNext from './slideNext';\nimport slidePrev from './slidePrev';\nimport slideReset from './slideReset';\nimport slideToClosest from './slideToClosest';\nimport slideToClickedSlide from './slideToClickedSlide';\nexport default {\n  slideTo: slideTo,\n  slideToLoop: slideToLoop,\n  slideNext: slideNext,\n  slidePrev: slidePrev,\n  slideReset: slideReset,\n  slideToClosest: slideToClosest,\n  slideToClickedSlide: slideToClickedSlide\n};","export default function slideTo(index, speed, runCallbacks, internal, initial) {\n  if (index === void 0) {\n    index = 0;\n  }\n\n  if (speed === void 0) {\n    speed = this.params.speed;\n  }\n\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n\n  if (typeof index !== 'number' && typeof index !== 'string') {\n    throw new Error(\"The 'index' argument cannot have type other than 'number' or 'string'. [\" + typeof index + \"] given.\");\n  }\n\n  if (typeof index === 'string') {\n    /**\n     * The `index` argument converted from `string` to `number`.\n     * @type {number}\n     */\n    var indexAsNumber = parseInt(index, 10);\n    /**\n     * Determines whether the `index` argument is a valid `number`\n     * after being converted from the `string` type.\n     * @type {boolean}\n     */\n\n    var isValidNumber = isFinite(indexAsNumber);\n\n    if (!isValidNumber) {\n      throw new Error(\"The passed-in 'index' (string) couldn't be converted to 'number'. [\" + index + \"] given.\");\n    } // Knowing that the converted `index` is a valid number,\n    // we can update the original argument's value.\n\n\n    index = indexAsNumber;\n  }\n\n  var swiper = this;\n  var slideIndex = index;\n  if (slideIndex < 0) slideIndex = 0;\n  var params = swiper.params,\n      snapGrid = swiper.snapGrid,\n      slidesGrid = swiper.slidesGrid,\n      previousIndex = swiper.previousIndex,\n      activeIndex = swiper.activeIndex,\n      rtl = swiper.rtlTranslate,\n      wrapperEl = swiper.wrapperEl,\n      enabled = swiper.enabled;\n\n  if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n    return false;\n  }\n\n  var skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n  var snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n  if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n    swiper.emit('beforeSlideChangeStart');\n  }\n\n  var translate = -snapGrid[snapIndex]; // Update progress\n\n  swiper.updateProgress(translate); // Normalize slideIndex\n\n  if (params.normalizeSlideIndex) {\n    for (var i = 0; i < slidesGrid.length; i += 1) {\n      var normalizedTranslate = -Math.floor(translate * 100);\n      var normalizedGird = Math.floor(slidesGrid[i] * 100);\n      var normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n\n      if (typeof slidesGrid[i + 1] !== 'undefined') {\n        if (normalizedTranslate >= normalizedGird && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGird) / 2) {\n          slideIndex = i;\n        } else if (normalizedTranslate >= normalizedGird && normalizedTranslate < normalizedGridNext) {\n          slideIndex = i + 1;\n        }\n      } else if (normalizedTranslate >= normalizedGird) {\n        slideIndex = i;\n      }\n    }\n  } // Directions locks\n\n\n  if (swiper.initialized && slideIndex !== activeIndex) {\n    if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n      return false;\n    }\n\n    if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n      if ((activeIndex || 0) !== slideIndex) return false;\n    }\n  }\n\n  var direction;\n  if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index\n\n  if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n    swiper.updateActiveIndex(slideIndex); // Update Height\n\n    if (params.autoHeight) {\n      swiper.updateAutoHeight();\n    }\n\n    swiper.updateSlidesClasses();\n\n    if (params.effect !== 'slide') {\n      swiper.setTranslate(translate);\n    }\n\n    if (direction !== 'reset') {\n      swiper.transitionStart(runCallbacks, direction);\n      swiper.transitionEnd(runCallbacks, direction);\n    }\n\n    return false;\n  }\n\n  if (params.cssMode) {\n    var isH = swiper.isHorizontal();\n    var t = -translate;\n\n    if (rtl) {\n      t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t;\n    }\n\n    if (speed === 0) {\n      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n    } else {\n      // eslint-disable-next-line\n      if (wrapperEl.scrollTo) {\n        var _wrapperEl$scrollTo;\n\n        wrapperEl.scrollTo((_wrapperEl$scrollTo = {}, _wrapperEl$scrollTo[isH ? 'left' : 'top'] = t, _wrapperEl$scrollTo.behavior = 'smooth', _wrapperEl$scrollTo));\n      } else {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n      }\n    }\n\n    return true;\n  }\n\n  if (speed === 0) {\n    swiper.setTransition(0);\n    swiper.setTranslate(translate);\n    swiper.updateActiveIndex(slideIndex);\n    swiper.updateSlidesClasses();\n    swiper.emit('beforeTransitionStart', speed, internal);\n    swiper.transitionStart(runCallbacks, direction);\n    swiper.transitionEnd(runCallbacks, direction);\n  } else {\n    swiper.setTransition(speed);\n    swiper.setTranslate(translate);\n    swiper.updateActiveIndex(slideIndex);\n    swiper.updateSlidesClasses();\n    swiper.emit('beforeTransitionStart', speed, internal);\n    swiper.transitionStart(runCallbacks, direction);\n\n    if (!swiper.animating) {\n      swiper.animating = true;\n\n      if (!swiper.onSlideToWrapperTransitionEnd) {\n        swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n          if (!swiper || swiper.destroyed) return;\n          if (e.target !== this) return;\n          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n          swiper.onSlideToWrapperTransitionEnd = null;\n          delete swiper.onSlideToWrapperTransitionEnd;\n          swiper.transitionEnd(runCallbacks, direction);\n        };\n      }\n\n      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n    }\n  }\n\n  return true;\n}","export default function slideToLoop(index, speed, runCallbacks, internal) {\n  if (index === void 0) {\n    index = 0;\n  }\n\n  if (speed === void 0) {\n    speed = this.params.speed;\n  }\n\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n\n  var swiper = this;\n  var newIndex = index;\n\n  if (swiper.params.loop) {\n    newIndex += swiper.loopedSlides;\n  }\n\n  return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideNext(speed, runCallbacks, internal) {\n  if (speed === void 0) {\n    speed = this.params.speed;\n  }\n\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n\n  var swiper = this;\n  var params = swiper.params,\n      animating = swiper.animating,\n      enabled = swiper.enabled;\n  if (!enabled) return swiper;\n  var increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup;\n\n  if (params.loop) {\n    if (animating && params.loopPreventsSlide) return false;\n    swiper.loopFix(); // eslint-disable-next-line\n\n    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n  }\n\n  return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slidePrev(speed, runCallbacks, internal) {\n  if (speed === void 0) {\n    speed = this.params.speed;\n  }\n\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n\n  var swiper = this;\n  var params = swiper.params,\n      animating = swiper.animating,\n      snapGrid = swiper.snapGrid,\n      slidesGrid = swiper.slidesGrid,\n      rtlTranslate = swiper.rtlTranslate,\n      enabled = swiper.enabled;\n  if (!enabled) return swiper;\n\n  if (params.loop) {\n    if (animating && params.loopPreventsSlide) return false;\n    swiper.loopFix(); // eslint-disable-next-line\n\n    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n  }\n\n  var translate = rtlTranslate ? swiper.translate : -swiper.translate;\n\n  function normalize(val) {\n    if (val < 0) return -Math.floor(Math.abs(val));\n    return Math.floor(val);\n  }\n\n  var normalizedTranslate = normalize(translate);\n  var normalizedSnapGrid = snapGrid.map(function (val) {\n    return normalize(val);\n  });\n  var prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n\n  if (typeof prevSnap === 'undefined' && params.cssMode) {\n    snapGrid.forEach(function (snap) {\n      if (!prevSnap && normalizedTranslate >= snap) prevSnap = snap;\n    });\n  }\n\n  var prevIndex;\n\n  if (typeof prevSnap !== 'undefined') {\n    prevIndex = slidesGrid.indexOf(prevSnap);\n    if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n  }\n\n  return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideReset(speed, runCallbacks, internal) {\n  if (speed === void 0) {\n    speed = this.params.speed;\n  }\n\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n\n  var swiper = this;\n  return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideToClosest(speed, runCallbacks, internal, threshold) {\n  if (speed === void 0) {\n    speed = this.params.speed;\n  }\n\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n\n  if (threshold === void 0) {\n    threshold = 0.5;\n  }\n\n  var swiper = this;\n  var index = swiper.activeIndex;\n  var skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n  var snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n  var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n  if (translate >= swiper.snapGrid[snapIndex]) {\n    // The current translate is on or after the current snap index, so the choice\n    // is between the current index and the one after it.\n    var currentSnap = swiper.snapGrid[snapIndex];\n    var nextSnap = swiper.snapGrid[snapIndex + 1];\n\n    if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n      index += swiper.params.slidesPerGroup;\n    }\n  } else {\n    // The current translate is before the current snap index, so the choice\n    // is between the current index and the one before it.\n    var prevSnap = swiper.snapGrid[snapIndex - 1];\n    var _currentSnap = swiper.snapGrid[snapIndex];\n\n    if (translate - prevSnap <= (_currentSnap - prevSnap) * threshold) {\n      index -= swiper.params.slidesPerGroup;\n    }\n  }\n\n  index = Math.max(index, 0);\n  index = Math.min(index, swiper.slidesGrid.length - 1);\n  return swiper.slideTo(index, speed, runCallbacks, internal);\n}","import $ from '../../../utils/dom';\nimport { nextTick } from '../../../utils/utils';\nexport default function slideToClickedSlide() {\n  var swiper = this;\n  var params = swiper.params,\n      $wrapperEl = swiper.$wrapperEl;\n  var slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n  var slideToIndex = swiper.clickedIndex;\n  var realIndex;\n\n  if (params.loop) {\n    if (swiper.animating) return;\n    realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n\n    if (params.centeredSlides) {\n      if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n        swiper.loopFix();\n        slideToIndex = $wrapperEl.children(\".\" + params.slideClass + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]:not(.\" + params.slideDuplicateClass + \")\").eq(0).index();\n        nextTick(function () {\n          swiper.slideTo(slideToIndex);\n        });\n      } else {\n        swiper.slideTo(slideToIndex);\n      }\n    } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n      swiper.loopFix();\n      slideToIndex = $wrapperEl.children(\".\" + params.slideClass + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]:not(.\" + params.slideDuplicateClass + \")\").eq(0).index();\n      nextTick(function () {\n        swiper.slideTo(slideToIndex);\n      });\n    } else {\n      swiper.slideTo(slideToIndex);\n    }\n  } else {\n    swiper.slideTo(slideToIndex);\n  }\n}","import loopCreate from './loopCreate';\nimport loopFix from './loopFix';\nimport loopDestroy from './loopDestroy';\nexport default {\n  loopCreate: loopCreate,\n  loopFix: loopFix,\n  loopDestroy: loopDestroy\n};","import { getDocument } from 'ssr-window';\nimport $ from '../../../utils/dom';\nexport default function loopCreate() {\n  var swiper = this;\n  var document = getDocument();\n  var params = swiper.params,\n      $wrapperEl = swiper.$wrapperEl; // Remove duplicated slides\n\n  $wrapperEl.children(\".\" + params.slideClass + \".\" + params.slideDuplicateClass).remove();\n  var slides = $wrapperEl.children(\".\" + params.slideClass);\n\n  if (params.loopFillGroupWithBlank) {\n    var blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;\n\n    if (blankSlidesNum !== params.slidesPerGroup) {\n      for (var i = 0; i < blankSlidesNum; i += 1) {\n        var blankNode = $(document.createElement('div')).addClass(params.slideClass + \" \" + params.slideBlankClass);\n        $wrapperEl.append(blankNode);\n      }\n\n      slides = $wrapperEl.children(\".\" + params.slideClass);\n    }\n  }\n\n  if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n  swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n  swiper.loopedSlides += params.loopAdditionalSlides;\n\n  if (swiper.loopedSlides > slides.length) {\n    swiper.loopedSlides = slides.length;\n  }\n\n  var prependSlides = [];\n  var appendSlides = [];\n  slides.each(function (el, index) {\n    var slide = $(el);\n\n    if (index < swiper.loopedSlides) {\n      appendSlides.push(el);\n    }\n\n    if (index < slides.length && index >= slides.length - swiper.loopedSlides) {\n      prependSlides.push(el);\n    }\n\n    slide.attr('data-swiper-slide-index', index);\n  });\n\n  for (var _i = 0; _i < appendSlides.length; _i += 1) {\n    $wrapperEl.append($(appendSlides[_i].cloneNode(true)).addClass(params.slideDuplicateClass));\n  }\n\n  for (var _i2 = prependSlides.length - 1; _i2 >= 0; _i2 -= 1) {\n    $wrapperEl.prepend($(prependSlides[_i2].cloneNode(true)).addClass(params.slideDuplicateClass));\n  }\n}","export default function loopFix() {\n  var swiper = this;\n  swiper.emit('beforeLoopFix');\n  var activeIndex = swiper.activeIndex,\n      slides = swiper.slides,\n      loopedSlides = swiper.loopedSlides,\n      allowSlidePrev = swiper.allowSlidePrev,\n      allowSlideNext = swiper.allowSlideNext,\n      snapGrid = swiper.snapGrid,\n      rtl = swiper.rtlTranslate;\n  var newIndex;\n  swiper.allowSlidePrev = true;\n  swiper.allowSlideNext = true;\n  var snapTranslate = -snapGrid[activeIndex];\n  var diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding\n\n  if (activeIndex < loopedSlides) {\n    newIndex = slides.length - loopedSlides * 3 + activeIndex;\n    newIndex += loopedSlides;\n    var slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n    if (slideChanged && diff !== 0) {\n      swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n    }\n  } else if (activeIndex >= slides.length - loopedSlides) {\n    // Fix For Positive Oversliding\n    newIndex = -slides.length + activeIndex + loopedSlides;\n    newIndex += loopedSlides;\n\n    var _slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n    if (_slideChanged && diff !== 0) {\n      swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n    }\n  }\n\n  swiper.allowSlidePrev = allowSlidePrev;\n  swiper.allowSlideNext = allowSlideNext;\n  swiper.emit('loopFix');\n}","export default function loopDestroy() {\n  var swiper = this;\n  var $wrapperEl = swiper.$wrapperEl,\n      params = swiper.params,\n      slides = swiper.slides;\n  $wrapperEl.children(\".\" + params.slideClass + \".\" + params.slideDuplicateClass + \",.\" + params.slideClass + \".\" + params.slideBlankClass).remove();\n  slides.removeAttr('data-swiper-slide-index');\n}","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../../utils/dom';\nimport { extend, now } from '../../../utils/utils'; // Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\n\nfunction closestElement(selector, base) {\n  if (base === void 0) {\n    base = this;\n  }\n\n  function __closestFrom(el) {\n    if (!el || el === getDocument() || el === getWindow()) return null;\n    if (el.assignedSlot) el = el.assignedSlot;\n    var found = el.closest(selector);\n    return found || __closestFrom(el.getRootNode().host);\n  }\n\n  return __closestFrom(base);\n}\n\nexport default function onTouchStart(event) {\n  var swiper = this;\n  var document = getDocument();\n  var window = getWindow();\n  var data = swiper.touchEventsData;\n  var params = swiper.params,\n      touches = swiper.touches,\n      enabled = swiper.enabled;\n  if (!enabled) return;\n\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return;\n  }\n\n  var e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  var $targetEl = $(e.target);\n\n  if (params.touchEventsTarget === 'wrapper') {\n    if (!$targetEl.closest(swiper.wrapperEl).length) return;\n  }\n\n  data.isTouchEvent = e.type === 'touchstart';\n  if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n  if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n  if (data.isTouched && data.isMoved) return; // change target el for shadow root component\n\n  var swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n\n  if (swipingClassHasValue && e.target && e.target.shadowRoot && event.path && event.path[0]) {\n    $targetEl = $(event.path[0]);\n  }\n\n  var noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : \".\" + params.noSwipingClass;\n  var isTargetShadow = !!(e.target && e.target.shadowRoot); // use closestElement for shadow root element to get the actual closest for nested shadow root element\n\n  if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, e.target) : $targetEl.closest(noSwipingSelector)[0])) {\n    swiper.allowClick = true;\n    return;\n  }\n\n  if (params.swipeHandler) {\n    if (!$targetEl.closest(params.swipeHandler)[0]) return;\n  }\n\n  touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n  touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n  var startX = touches.currentX;\n  var startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n  var edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n  var edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n\n  if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n    if (edgeSwipeDetection === 'prevent') {\n      event.preventDefault();\n    } else {\n      return;\n    }\n  }\n\n  extend(data, {\n    isTouched: true,\n    isMoved: false,\n    allowTouchCallbacks: true,\n    isScrolling: undefined,\n    startMoving: undefined\n  });\n  touches.startX = startX;\n  touches.startY = startY;\n  data.touchStartTime = now();\n  swiper.allowClick = true;\n  swiper.updateSize();\n  swiper.swipeDirection = undefined;\n  if (params.threshold > 0) data.allowThresholdMove = false;\n\n  if (e.type !== 'touchstart') {\n    var preventDefault = true;\n    if ($targetEl.is(data.focusableElements)) preventDefault = false;\n\n    if (document.activeElement && $(document.activeElement).is(data.focusableElements) && document.activeElement !== $targetEl[0]) {\n      document.activeElement.blur();\n    }\n\n    var shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n\n    if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) {\n      e.preventDefault();\n    }\n  }\n\n  swiper.emit('touchStart', e);\n}","import { getDocument } from 'ssr-window';\nimport $ from '../../../utils/dom';\nimport { extend, now } from '../../../utils/utils';\nexport default function onTouchMove(event) {\n  var document = getDocument();\n  var swiper = this;\n  var data = swiper.touchEventsData;\n  var params = swiper.params,\n      touches = swiper.touches,\n      rtl = swiper.rtlTranslate,\n      enabled = swiper.enabled;\n  if (!enabled) return;\n  var e = event;\n  if (e.originalEvent) e = e.originalEvent;\n\n  if (!data.isTouched) {\n    if (data.startMoving && data.isScrolling) {\n      swiper.emit('touchMoveOpposite', e);\n    }\n\n    return;\n  }\n\n  if (data.isTouchEvent && e.type !== 'touchmove') return;\n  var targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n  var pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n  var pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n\n  if (e.preventedByNestedSwiper) {\n    touches.startX = pageX;\n    touches.startY = pageY;\n    return;\n  }\n\n  if (!swiper.allowTouchMove) {\n    // isMoved = true;\n    swiper.allowClick = false;\n\n    if (data.isTouched) {\n      extend(touches, {\n        startX: pageX,\n        startY: pageY,\n        currentX: pageX,\n        currentY: pageY\n      });\n      data.touchStartTime = now();\n    }\n\n    return;\n  }\n\n  if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n    if (swiper.isVertical()) {\n      // Vertical\n      if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n        data.isTouched = false;\n        data.isMoved = false;\n        return;\n      }\n    } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n      return;\n    }\n  }\n\n  if (data.isTouchEvent && document.activeElement) {\n    if (e.target === document.activeElement && $(e.target).is(data.focusableElements)) {\n      data.isMoved = true;\n      swiper.allowClick = false;\n      return;\n    }\n  }\n\n  if (data.allowTouchCallbacks) {\n    swiper.emit('touchMove', e);\n  }\n\n  if (e.targetTouches && e.targetTouches.length > 1) return;\n  touches.currentX = pageX;\n  touches.currentY = pageY;\n  var diffX = touches.currentX - touches.startX;\n  var diffY = touches.currentY - touches.startY;\n  if (swiper.params.threshold && Math.sqrt(Math.pow(diffX, 2) + Math.pow(diffY, 2)) < swiper.params.threshold) return;\n\n  if (typeof data.isScrolling === 'undefined') {\n    var touchAngle;\n\n    if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n      data.isScrolling = false;\n    } else {\n      // eslint-disable-next-line\n      if (diffX * diffX + diffY * diffY >= 25) {\n        touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n        data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n      }\n    }\n  }\n\n  if (data.isScrolling) {\n    swiper.emit('touchMoveOpposite', e);\n  }\n\n  if (typeof data.startMoving === 'undefined') {\n    if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n      data.startMoving = true;\n    }\n  }\n\n  if (data.isScrolling) {\n    data.isTouched = false;\n    return;\n  }\n\n  if (!data.startMoving) {\n    return;\n  }\n\n  swiper.allowClick = false;\n\n  if (!params.cssMode && e.cancelable) {\n    e.preventDefault();\n  }\n\n  if (params.touchMoveStopPropagation && !params.nested) {\n    e.stopPropagation();\n  }\n\n  if (!data.isMoved) {\n    if (params.loop) {\n      swiper.loopFix();\n    }\n\n    data.startTranslate = swiper.getTranslate();\n    swiper.setTransition(0);\n\n    if (swiper.animating) {\n      swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n    }\n\n    data.allowMomentumBounce = false; // Grab Cursor\n\n    if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n      swiper.setGrabCursor(true);\n    }\n\n    swiper.emit('sliderFirstMove', e);\n  }\n\n  swiper.emit('sliderMove', e);\n  data.isMoved = true;\n  var diff = swiper.isHorizontal() ? diffX : diffY;\n  touches.diff = diff;\n  diff *= params.touchRatio;\n  if (rtl) diff = -diff;\n  swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n  data.currentTranslate = diff + data.startTranslate;\n  var disableParentSwiper = true;\n  var resistanceRatio = params.resistanceRatio;\n\n  if (params.touchReleaseOnEdges) {\n    resistanceRatio = 0;\n  }\n\n  if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n    disableParentSwiper = false;\n    if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + Math.pow(-swiper.minTranslate() + data.startTranslate + diff, resistanceRatio);\n  } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n    disableParentSwiper = false;\n    if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - Math.pow(swiper.maxTranslate() - data.startTranslate - diff, resistanceRatio);\n  }\n\n  if (disableParentSwiper) {\n    e.preventedByNestedSwiper = true;\n  } // Directions locks\n\n\n  if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n    data.currentTranslate = data.startTranslate;\n  }\n\n  if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n    data.currentTranslate = data.startTranslate;\n  }\n\n  if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n    data.currentTranslate = data.startTranslate;\n  } // Threshold\n\n\n  if (params.threshold > 0) {\n    if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n      if (!data.allowThresholdMove) {\n        data.allowThresholdMove = true;\n        touches.startX = touches.currentX;\n        touches.startY = touches.currentY;\n        data.currentTranslate = data.startTranslate;\n        touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n        return;\n      }\n    } else {\n      data.currentTranslate = data.startTranslate;\n      return;\n    }\n  }\n\n  if (!params.followFinger || params.cssMode) return; // Update active index in free mode\n\n  if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  }\n\n  if (params.freeMode) {\n    // Velocity\n    if (data.velocities.length === 0) {\n      data.velocities.push({\n        position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n        time: data.touchStartTime\n      });\n    }\n\n    data.velocities.push({\n      position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n      time: now()\n    });\n  } // Update progress\n\n\n  swiper.updateProgress(data.currentTranslate); // Update translate\n\n  swiper.setTranslate(data.currentTranslate);\n}","import { now, nextTick } from '../../../utils/utils';\nexport default function onTouchEnd(event) {\n  var swiper = this;\n  var data = swiper.touchEventsData;\n  var params = swiper.params,\n      touches = swiper.touches,\n      rtl = swiper.rtlTranslate,\n      $wrapperEl = swiper.$wrapperEl,\n      slidesGrid = swiper.slidesGrid,\n      snapGrid = swiper.snapGrid,\n      enabled = swiper.enabled;\n  if (!enabled) return;\n  var e = event;\n  if (e.originalEvent) e = e.originalEvent;\n\n  if (data.allowTouchCallbacks) {\n    swiper.emit('touchEnd', e);\n  }\n\n  data.allowTouchCallbacks = false;\n\n  if (!data.isTouched) {\n    if (data.isMoved && params.grabCursor) {\n      swiper.setGrabCursor(false);\n    }\n\n    data.isMoved = false;\n    data.startMoving = false;\n    return;\n  } // Return Grab Cursor\n\n\n  if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n    swiper.setGrabCursor(false);\n  } // Time diff\n\n\n  var touchEndTime = now();\n  var timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click\n\n  if (swiper.allowClick) {\n    swiper.updateClickedSlide(e);\n    swiper.emit('tap click', e);\n\n    if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n      swiper.emit('doubleTap doubleClick', e);\n    }\n  }\n\n  data.lastClickTime = now();\n  nextTick(function () {\n    if (!swiper.destroyed) swiper.allowClick = true;\n  });\n\n  if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n    data.isTouched = false;\n    data.isMoved = false;\n    data.startMoving = false;\n    return;\n  }\n\n  data.isTouched = false;\n  data.isMoved = false;\n  data.startMoving = false;\n  var currentPos;\n\n  if (params.followFinger) {\n    currentPos = rtl ? swiper.translate : -swiper.translate;\n  } else {\n    currentPos = -data.currentTranslate;\n  }\n\n  if (params.cssMode) {\n    return;\n  }\n\n  if (params.freeMode) {\n    if (currentPos < -swiper.minTranslate()) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n\n    if (currentPos > -swiper.maxTranslate()) {\n      if (swiper.slides.length < snapGrid.length) {\n        swiper.slideTo(snapGrid.length - 1);\n      } else {\n        swiper.slideTo(swiper.slides.length - 1);\n      }\n\n      return;\n    }\n\n    if (params.freeModeMomentum) {\n      if (data.velocities.length > 1) {\n        var lastMoveEvent = data.velocities.pop();\n        var velocityEvent = data.velocities.pop();\n        var distance = lastMoveEvent.position - velocityEvent.position;\n        var time = lastMoveEvent.time - velocityEvent.time;\n        swiper.velocity = distance / time;\n        swiper.velocity /= 2;\n\n        if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {\n          swiper.velocity = 0;\n        } // this implies that the user stopped moving a finger then released.\n        // There would be no events with distance zero, so the last event is stale.\n\n\n        if (time > 150 || now() - lastMoveEvent.time > 300) {\n          swiper.velocity = 0;\n        }\n      } else {\n        swiper.velocity = 0;\n      }\n\n      swiper.velocity *= params.freeModeMomentumVelocityRatio;\n      data.velocities.length = 0;\n      var momentumDuration = 1000 * params.freeModeMomentumRatio;\n      var momentumDistance = swiper.velocity * momentumDuration;\n      var newPosition = swiper.translate + momentumDistance;\n      if (rtl) newPosition = -newPosition;\n      var doBounce = false;\n      var afterBouncePosition;\n      var bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;\n      var needsLoopFix;\n\n      if (newPosition < swiper.maxTranslate()) {\n        if (params.freeModeMomentumBounce) {\n          if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n            newPosition = swiper.maxTranslate() - bounceAmount;\n          }\n\n          afterBouncePosition = swiper.maxTranslate();\n          doBounce = true;\n          data.allowMomentumBounce = true;\n        } else {\n          newPosition = swiper.maxTranslate();\n        }\n\n        if (params.loop && params.centeredSlides) needsLoopFix = true;\n      } else if (newPosition > swiper.minTranslate()) {\n        if (params.freeModeMomentumBounce) {\n          if (newPosition - swiper.minTranslate() > bounceAmount) {\n            newPosition = swiper.minTranslate() + bounceAmount;\n          }\n\n          afterBouncePosition = swiper.minTranslate();\n          doBounce = true;\n          data.allowMomentumBounce = true;\n        } else {\n          newPosition = swiper.minTranslate();\n        }\n\n        if (params.loop && params.centeredSlides) needsLoopFix = true;\n      } else if (params.freeModeSticky) {\n        var nextSlide;\n\n        for (var j = 0; j < snapGrid.length; j += 1) {\n          if (snapGrid[j] > -newPosition) {\n            nextSlide = j;\n            break;\n          }\n        }\n\n        if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n          newPosition = snapGrid[nextSlide];\n        } else {\n          newPosition = snapGrid[nextSlide - 1];\n        }\n\n        newPosition = -newPosition;\n      }\n\n      if (needsLoopFix) {\n        swiper.once('transitionEnd', function () {\n          swiper.loopFix();\n        });\n      } // Fix duration\n\n\n      if (swiper.velocity !== 0) {\n        if (rtl) {\n          momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n        } else {\n          momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n        }\n\n        if (params.freeModeSticky) {\n          // If freeModeSticky is active and the user ends a swipe with a slow-velocity\n          // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n          // It's easy to see this when simulating touch with mouse events. To fix this,\n          // limit single-slide swipes to the default slide duration. This also has the\n          // nice side effect of matching slide speed if the user stopped moving before\n          // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n          // For faster swipes, also apply limits (albeit higher ones).\n          var moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n          var currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n\n          if (moveDistance < currentSlideSize) {\n            momentumDuration = params.speed;\n          } else if (moveDistance < 2 * currentSlideSize) {\n            momentumDuration = params.speed * 1.5;\n          } else {\n            momentumDuration = params.speed * 2.5;\n          }\n        }\n      } else if (params.freeModeSticky) {\n        swiper.slideToClosest();\n        return;\n      }\n\n      if (params.freeModeMomentumBounce && doBounce) {\n        swiper.updateProgress(afterBouncePosition);\n        swiper.setTransition(momentumDuration);\n        swiper.setTranslate(newPosition);\n        swiper.transitionStart(true, swiper.swipeDirection);\n        swiper.animating = true;\n        $wrapperEl.transitionEnd(function () {\n          if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n          swiper.emit('momentumBounce');\n          swiper.setTransition(params.speed);\n          setTimeout(function () {\n            swiper.setTranslate(afterBouncePosition);\n            $wrapperEl.transitionEnd(function () {\n              if (!swiper || swiper.destroyed) return;\n              swiper.transitionEnd();\n            });\n          }, 0);\n        });\n      } else if (swiper.velocity) {\n        swiper.updateProgress(newPosition);\n        swiper.setTransition(momentumDuration);\n        swiper.setTranslate(newPosition);\n        swiper.transitionStart(true, swiper.swipeDirection);\n\n        if (!swiper.animating) {\n          swiper.animating = true;\n          $wrapperEl.transitionEnd(function () {\n            if (!swiper || swiper.destroyed) return;\n            swiper.transitionEnd();\n          });\n        }\n      } else {\n        swiper.emit('_freeModeNoMomentumRelease');\n        swiper.updateProgress(newPosition);\n      }\n\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    } else if (params.freeModeSticky) {\n      swiper.slideToClosest();\n      return;\n    } else if (params.freeMode) {\n      swiper.emit('_freeModeNoMomentumRelease');\n    }\n\n    if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {\n      swiper.updateProgress();\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    }\n\n    return;\n  } // Find current slide\n\n\n  var stopIndex = 0;\n  var groupSize = swiper.slidesSizesGrid[0];\n\n  for (var i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n    var _increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n    if (typeof slidesGrid[i + _increment] !== 'undefined') {\n      if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + _increment]) {\n        stopIndex = i;\n        groupSize = slidesGrid[i + _increment] - slidesGrid[i];\n      }\n    } else if (currentPos >= slidesGrid[i]) {\n      stopIndex = i;\n      groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n    }\n  } // Find current slide size\n\n\n  var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n  var increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n  if (timeDiff > params.longSwipesMs) {\n    // Long touches\n    if (!params.longSwipes) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n\n    if (swiper.swipeDirection === 'next') {\n      if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);\n    }\n\n    if (swiper.swipeDirection === 'prev') {\n      if (ratio > 1 - params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);\n    }\n  } else {\n    // Short swipes\n    if (!params.shortSwipes) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n\n    var isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n\n    if (!isNavButtonTarget) {\n      if (swiper.swipeDirection === 'next') {\n        swiper.slideTo(stopIndex + increment);\n      }\n\n      if (swiper.swipeDirection === 'prev') {\n        swiper.slideTo(stopIndex);\n      }\n    } else if (e.target === swiper.navigation.nextEl) {\n      swiper.slideTo(stopIndex + increment);\n    } else {\n      swiper.slideTo(stopIndex);\n    }\n  }\n}","export default function onResize() {\n  var swiper = this;\n  var params = swiper.params,\n      el = swiper.el;\n  if (el && el.offsetWidth === 0) return; // Breakpoints\n\n  if (params.breakpoints) {\n    swiper.setBreakpoint();\n  } // Save locks\n\n\n  var allowSlideNext = swiper.allowSlideNext,\n      allowSlidePrev = swiper.allowSlidePrev,\n      snapGrid = swiper.snapGrid; // Disable locks on resize\n\n  swiper.allowSlideNext = true;\n  swiper.allowSlidePrev = true;\n  swiper.updateSize();\n  swiper.updateSlides();\n  swiper.updateSlidesClasses();\n\n  if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {\n    swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n  } else {\n    swiper.slideTo(swiper.activeIndex, 0, false, true);\n  }\n\n  if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n    swiper.autoplay.run();\n  } // Return locks after resize\n\n\n  swiper.allowSlidePrev = allowSlidePrev;\n  swiper.allowSlideNext = allowSlideNext;\n\n  if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n    swiper.checkOverflow();\n  }\n}","export default function onClick(e) {\n  var swiper = this;\n  if (!swiper.enabled) return;\n\n  if (!swiper.allowClick) {\n    if (swiper.params.preventClicks) e.preventDefault();\n\n    if (swiper.params.preventClicksPropagation && swiper.animating) {\n      e.stopPropagation();\n      e.stopImmediatePropagation();\n    }\n  }\n}","export default function onScroll() {\n  var swiper = this;\n  var wrapperEl = swiper.wrapperEl,\n      rtlTranslate = swiper.rtlTranslate,\n      enabled = swiper.enabled;\n  if (!enabled) return;\n  swiper.previousTranslate = swiper.translate;\n\n  if (swiper.isHorizontal()) {\n    if (rtlTranslate) {\n      swiper.translate = wrapperEl.scrollWidth - wrapperEl.offsetWidth - wrapperEl.scrollLeft;\n    } else {\n      swiper.translate = -wrapperEl.scrollLeft;\n    }\n  } else {\n    swiper.translate = -wrapperEl.scrollTop;\n  } // eslint-disable-next-line\n\n\n  if (swiper.translate === -0) swiper.translate = 0;\n  swiper.updateActiveIndex();\n  swiper.updateSlidesClasses();\n  var newProgress;\n  var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n  if (translatesDiff === 0) {\n    newProgress = 0;\n  } else {\n    newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n  }\n\n  if (newProgress !== swiper.progress) {\n    swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n  }\n\n  swiper.emit('setTranslate', swiper.translate, false);\n}","import { getDocument } from 'ssr-window';\nimport onTouchStart from './onTouchStart';\nimport onTouchMove from './onTouchMove';\nimport onTouchEnd from './onTouchEnd';\nimport onResize from './onResize';\nimport onClick from './onClick';\nimport onScroll from './onScroll';\nvar dummyEventAttached = false;\n\nfunction dummyEventListener() {}\n\nfunction attachEvents() {\n  var swiper = this;\n  var document = getDocument();\n  var params = swiper.params,\n      touchEvents = swiper.touchEvents,\n      el = swiper.el,\n      wrapperEl = swiper.wrapperEl,\n      device = swiper.device,\n      support = swiper.support;\n  swiper.onTouchStart = onTouchStart.bind(swiper);\n  swiper.onTouchMove = onTouchMove.bind(swiper);\n  swiper.onTouchEnd = onTouchEnd.bind(swiper);\n\n  if (params.cssMode) {\n    swiper.onScroll = onScroll.bind(swiper);\n  }\n\n  swiper.onClick = onClick.bind(swiper);\n  var capture = !!params.nested; // Touch Events\n\n  if (!support.touch && support.pointerEvents) {\n    el.addEventListener(touchEvents.start, swiper.onTouchStart, false);\n    document.addEventListener(touchEvents.move, swiper.onTouchMove, capture);\n    document.addEventListener(touchEvents.end, swiper.onTouchEnd, false);\n  } else {\n    if (support.touch) {\n      var passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {\n        passive: true,\n        capture: false\n      } : false;\n      el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n      el.addEventListener(touchEvents.move, swiper.onTouchMove, support.passiveListener ? {\n        passive: false,\n        capture: capture\n      } : capture);\n      el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n      if (touchEvents.cancel) {\n        el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n      }\n\n      if (!dummyEventAttached) {\n        document.addEventListener('touchstart', dummyEventListener);\n        dummyEventAttached = true;\n      }\n    }\n\n    if (params.simulateTouch && !device.ios && !device.android || params.simulateTouch && !support.touch && device.ios) {\n      el.addEventListener('mousedown', swiper.onTouchStart, false);\n      document.addEventListener('mousemove', swiper.onTouchMove, capture);\n      document.addEventListener('mouseup', swiper.onTouchEnd, false);\n    }\n  } // Prevent Links Clicks\n\n\n  if (params.preventClicks || params.preventClicksPropagation) {\n    el.addEventListener('click', swiper.onClick, true);\n  }\n\n  if (params.cssMode) {\n    wrapperEl.addEventListener('scroll', swiper.onScroll);\n  } // Resize handler\n\n\n  if (params.updateOnWindowResize) {\n    swiper.on(device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n  } else {\n    swiper.on('observerUpdate', onResize, true);\n  }\n}\n\nfunction detachEvents() {\n  var swiper = this;\n  var document = getDocument();\n  var params = swiper.params,\n      touchEvents = swiper.touchEvents,\n      el = swiper.el,\n      wrapperEl = swiper.wrapperEl,\n      device = swiper.device,\n      support = swiper.support;\n  var capture = !!params.nested; // Touch Events\n\n  if (!support.touch && support.pointerEvents) {\n    el.removeEventListener(touchEvents.start, swiper.onTouchStart, false);\n    document.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n    document.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);\n  } else {\n    if (support.touch) {\n      var passiveListener = touchEvents.start === 'onTouchStart' && support.passiveListener && params.passiveListeners ? {\n        passive: true,\n        capture: false\n      } : false;\n      el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n      el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n      el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n      if (touchEvents.cancel) {\n        el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n      }\n    }\n\n    if (params.simulateTouch && !device.ios && !device.android || params.simulateTouch && !support.touch && device.ios) {\n      el.removeEventListener('mousedown', swiper.onTouchStart, false);\n      document.removeEventListener('mousemove', swiper.onTouchMove, capture);\n      document.removeEventListener('mouseup', swiper.onTouchEnd, false);\n    }\n  } // Prevent Links Clicks\n\n\n  if (params.preventClicks || params.preventClicksPropagation) {\n    el.removeEventListener('click', swiper.onClick, true);\n  }\n\n  if (params.cssMode) {\n    wrapperEl.removeEventListener('scroll', swiper.onScroll);\n  } // Resize handler\n\n\n  swiper.off(device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize);\n}\n\nexport default {\n  attachEvents: attachEvents,\n  detachEvents: detachEvents\n};","import addClasses from './addClasses';\nimport removeClasses from './removeClasses';\nexport default {\n  addClasses: addClasses,\n  removeClasses: removeClasses\n};","function prepareClasses(entries, prefix) {\n  var resultClasses = [];\n  entries.forEach(function (item) {\n    if (typeof item === 'object') {\n      Object.keys(item).forEach(function (classNames) {\n        if (item[classNames]) {\n          resultClasses.push(prefix + classNames);\n        }\n      });\n    } else if (typeof item === 'string') {\n      resultClasses.push(prefix + item);\n    }\n  });\n  return resultClasses;\n}\n\nexport default function addClasses() {\n  var swiper = this;\n  var classNames = swiper.classNames,\n      params = swiper.params,\n      rtl = swiper.rtl,\n      $el = swiper.$el,\n      device = swiper.device,\n      support = swiper.support; // prettier-ignore\n\n  var suffixes = prepareClasses(['initialized', params.direction, {\n    'pointer-events': support.pointerEvents && !support.touch\n  }, {\n    'free-mode': params.freeMode\n  }, {\n    'autoheight': params.autoHeight\n  }, {\n    'rtl': rtl\n  }, {\n    'multirow': params.slidesPerColumn > 1\n  }, {\n    'multirow-column': params.slidesPerColumn > 1 && params.slidesPerColumnFill === 'column'\n  }, {\n    'android': device.android\n  }, {\n    'ios': device.ios\n  }, {\n    'css-mode': params.cssMode\n  }], params.containerModifierClass);\n  classNames.push.apply(classNames, suffixes);\n  $el.addClass([].concat(classNames).join(' '));\n  swiper.emitContainerClasses();\n}","export default function removeClasses() {\n  var swiper = this;\n  var $el = swiper.$el,\n      classNames = swiper.classNames;\n  $el.removeClass(classNames.join(' '));\n  swiper.emitContainerClasses();\n}","export default {\n  init: true,\n  direction: 'horizontal',\n  touchEventsTarget: 'container',\n  initialSlide: 0,\n  speed: 300,\n  cssMode: false,\n  updateOnWindowResize: true,\n  resizeObserver: false,\n  nested: false,\n  createElements: false,\n  enabled: true,\n  focusableElements: 'input, select, option, textarea, button, video, label',\n  // Overrides\n  width: null,\n  height: null,\n  //\n  preventInteractionOnTransition: false,\n  // ssr\n  userAgent: null,\n  url: null,\n  // To support iOS's swipe-to-go-back gesture (when being used in-app).\n  edgeSwipeDetection: false,\n  edgeSwipeThreshold: 20,\n  // Free mode\n  freeMode: false,\n  freeModeMomentum: true,\n  freeModeMomentumRatio: 1,\n  freeModeMomentumBounce: true,\n  freeModeMomentumBounceRatio: 1,\n  freeModeMomentumVelocityRatio: 1,\n  freeModeSticky: false,\n  freeModeMinimumVelocity: 0.02,\n  // Autoheight\n  autoHeight: false,\n  // Set wrapper width\n  setWrapperSize: false,\n  // Virtual Translate\n  virtualTranslate: false,\n  // Effects\n  effect: 'slide',\n  // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n  // Breakpoints\n  breakpoints: undefined,\n  breakpointsBase: 'window',\n  // Slides grid\n  spaceBetween: 0,\n  slidesPerView: 1,\n  slidesPerColumn: 1,\n  slidesPerColumnFill: 'column',\n  slidesPerGroup: 1,\n  slidesPerGroupSkip: 0,\n  centeredSlides: false,\n  centeredSlidesBounds: false,\n  slidesOffsetBefore: 0,\n  // in px\n  slidesOffsetAfter: 0,\n  // in px\n  normalizeSlideIndex: true,\n  centerInsufficientSlides: false,\n  // Disable swiper and hide navigation when container not overflow\n  watchOverflow: false,\n  // Round length\n  roundLengths: false,\n  // Touches\n  touchRatio: 1,\n  touchAngle: 45,\n  simulateTouch: true,\n  shortSwipes: true,\n  longSwipes: true,\n  longSwipesRatio: 0.5,\n  longSwipesMs: 300,\n  followFinger: true,\n  allowTouchMove: true,\n  threshold: 0,\n  touchMoveStopPropagation: false,\n  touchStartPreventDefault: true,\n  touchStartForcePreventDefault: false,\n  touchReleaseOnEdges: false,\n  // Unique Navigation Elements\n  uniqueNavElements: true,\n  // Resistance\n  resistance: true,\n  resistanceRatio: 0.85,\n  // Progress\n  watchSlidesProgress: false,\n  watchSlidesVisibility: false,\n  // Cursor\n  grabCursor: false,\n  // Clicks\n  preventClicks: true,\n  preventClicksPropagation: true,\n  slideToClickedSlide: false,\n  // Images\n  preloadImages: true,\n  updateOnImagesReady: true,\n  // loop\n  loop: false,\n  loopAdditionalSlides: 0,\n  loopedSlides: null,\n  loopFillGroupWithBlank: false,\n  loopPreventsSlide: true,\n  // Swiping/no swiping\n  allowSlidePrev: true,\n  allowSlideNext: true,\n  swipeHandler: null,\n  // '.swipe-handler',\n  noSwiping: true,\n  noSwipingClass: 'swiper-no-swiping',\n  noSwipingSelector: null,\n  // Passive Listeners\n  passiveListeners: true,\n  // NS\n  containerModifierClass: 'swiper-container-',\n  // NEW\n  slideClass: 'swiper-slide',\n  slideBlankClass: 'swiper-slide-invisible-blank',\n  slideActiveClass: 'swiper-slide-active',\n  slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n  slideVisibleClass: 'swiper-slide-visible',\n  slideDuplicateClass: 'swiper-slide-duplicate',\n  slideNextClass: 'swiper-slide-next',\n  slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n  slidePrevClass: 'swiper-slide-prev',\n  slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n  wrapperClass: 'swiper-wrapper',\n  // Callbacks\n  runCallbacksOnInit: true,\n  // Internals\n  _emitClasses: false\n};","function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/* eslint no-param-reassign: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport { extend, now, deleteProps } from '../../utils/utils';\nimport { getSupport } from '../../utils/get-support';\nimport { getDevice } from '../../utils/get-device';\nimport { getBrowser } from '../../utils/get-browser';\nimport Resize from '../../modules/resize/resize';\nimport Observer from '../../modules/observer/observer';\nimport modular from './modular';\nimport eventsEmitter from './events-emitter';\nimport update from './update/index';\nimport translate from './translate/index';\nimport transition from './transition/index';\nimport slide from './slide/index';\nimport loop from './loop/index';\nimport grabCursor from './grab-cursor/index';\nimport manipulation from './manipulation/index';\nimport events from './events/index';\nimport breakpoints from './breakpoints/index';\nimport classes from './classes/index';\nimport images from './images/index';\nimport checkOverflow from './check-overflow/index';\nimport defaults from './defaults';\nvar prototypes = {\n  modular: modular,\n  eventsEmitter: eventsEmitter,\n  update: update,\n  translate: translate,\n  transition: transition,\n  slide: slide,\n  loop: loop,\n  grabCursor: grabCursor,\n  manipulation: manipulation,\n  events: events,\n  breakpoints: breakpoints,\n  checkOverflow: checkOverflow,\n  classes: classes,\n  images: images\n};\nvar extendedDefaults = {};\n\nvar Swiper = /*#__PURE__*/function () {\n  function Swiper() {\n    var el;\n    var params;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n      params = args[0];\n    } else {\n      el = args[0];\n      params = args[1];\n    }\n\n    if (!params) params = {};\n    params = extend({}, params);\n    if (el && !params.el) params.el = el;\n\n    if (params.el && $(params.el).length > 1) {\n      var swipers = [];\n      $(params.el).each(function (containerEl) {\n        var newParams = extend({}, params, {\n          el: containerEl\n        });\n        swipers.push(new Swiper(newParams));\n      });\n      return swipers;\n    } // Swiper Instance\n\n\n    var swiper = this;\n    swiper.__swiper__ = true;\n    swiper.support = getSupport();\n    swiper.device = getDevice({\n      userAgent: params.userAgent\n    });\n    swiper.browser = getBrowser();\n    swiper.eventsListeners = {};\n    swiper.eventsAnyListeners = [];\n\n    if (typeof swiper.modules === 'undefined') {\n      swiper.modules = {};\n    }\n\n    Object.keys(swiper.modules).forEach(function (moduleName) {\n      var module = swiper.modules[moduleName];\n\n      if (module.params) {\n        var moduleParamName = Object.keys(module.params)[0];\n        var moduleParams = module.params[moduleParamName];\n        if (typeof moduleParams !== 'object' || moduleParams === null) return;\n\n        if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n          params[moduleParamName] = {\n            auto: true\n          };\n        }\n\n        if (!(moduleParamName in params && 'enabled' in moduleParams)) return;\n\n        if (params[moduleParamName] === true) {\n          params[moduleParamName] = {\n            enabled: true\n          };\n        }\n\n        if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n          params[moduleParamName].enabled = true;\n        }\n\n        if (!params[moduleParamName]) params[moduleParamName] = {\n          enabled: false\n        };\n      }\n    }); // Extend defaults with modules params\n\n    var swiperParams = extend({}, defaults);\n    swiper.useParams(swiperParams); // Extend defaults with passed params\n\n    swiper.params = extend({}, swiperParams, extendedDefaults, params);\n    swiper.originalParams = extend({}, swiper.params);\n    swiper.passedParams = extend({}, params); // add event listeners\n\n    if (swiper.params && swiper.params.on) {\n      Object.keys(swiper.params.on).forEach(function (eventName) {\n        swiper.on(eventName, swiper.params.on[eventName]);\n      });\n    }\n\n    if (swiper.params && swiper.params.onAny) {\n      swiper.onAny(swiper.params.onAny);\n    } // Save Dom lib\n\n\n    swiper.$ = $; // Extend Swiper\n\n    extend(swiper, {\n      enabled: swiper.params.enabled,\n      el: el,\n      // Classes\n      classNames: [],\n      // Slides\n      slides: $(),\n      slidesGrid: [],\n      snapGrid: [],\n      slidesSizesGrid: [],\n      // isDirection\n      isHorizontal: function isHorizontal() {\n        return swiper.params.direction === 'horizontal';\n      },\n      isVertical: function isVertical() {\n        return swiper.params.direction === 'vertical';\n      },\n      // Indexes\n      activeIndex: 0,\n      realIndex: 0,\n      //\n      isBeginning: true,\n      isEnd: false,\n      // Props\n      translate: 0,\n      previousTranslate: 0,\n      progress: 0,\n      velocity: 0,\n      animating: false,\n      // Locks\n      allowSlideNext: swiper.params.allowSlideNext,\n      allowSlidePrev: swiper.params.allowSlidePrev,\n      // Touch Events\n      touchEvents: function touchEvents() {\n        var touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n        var desktop = ['mousedown', 'mousemove', 'mouseup'];\n\n        if (swiper.support.pointerEvents) {\n          desktop = ['pointerdown', 'pointermove', 'pointerup'];\n        }\n\n        swiper.touchEventsTouch = {\n          start: touch[0],\n          move: touch[1],\n          end: touch[2],\n          cancel: touch[3]\n        };\n        swiper.touchEventsDesktop = {\n          start: desktop[0],\n          move: desktop[1],\n          end: desktop[2]\n        };\n        return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n      }(),\n      touchEventsData: {\n        isTouched: undefined,\n        isMoved: undefined,\n        allowTouchCallbacks: undefined,\n        touchStartTime: undefined,\n        isScrolling: undefined,\n        currentTranslate: undefined,\n        startTranslate: undefined,\n        allowThresholdMove: undefined,\n        // Form elements to match\n        focusableElements: swiper.params.focusableElements,\n        // Last click time\n        lastClickTime: now(),\n        clickTimeout: undefined,\n        // Velocities\n        velocities: [],\n        allowMomentumBounce: undefined,\n        isTouchEvent: undefined,\n        startMoving: undefined\n      },\n      // Clicks\n      allowClick: true,\n      // Touches\n      allowTouchMove: swiper.params.allowTouchMove,\n      touches: {\n        startX: 0,\n        startY: 0,\n        currentX: 0,\n        currentY: 0,\n        diff: 0\n      },\n      // Images\n      imagesToLoad: [],\n      imagesLoaded: 0\n    }); // Install Modules\n\n    swiper.useModules();\n    swiper.emit('_swiper'); // Init\n\n    if (swiper.params.init) {\n      swiper.init();\n    } // Return app instance\n\n\n    return swiper;\n  }\n\n  var _proto = Swiper.prototype;\n\n  _proto.enable = function enable() {\n    var swiper = this;\n    if (swiper.enabled) return;\n    swiper.enabled = true;\n\n    if (swiper.params.grabCursor) {\n      swiper.setGrabCursor();\n    }\n\n    swiper.emit('enable');\n  };\n\n  _proto.disable = function disable() {\n    var swiper = this;\n    if (!swiper.enabled) return;\n    swiper.enabled = false;\n\n    if (swiper.params.grabCursor) {\n      swiper.unsetGrabCursor();\n    }\n\n    swiper.emit('disable');\n  };\n\n  _proto.setProgress = function setProgress(progress, speed) {\n    var swiper = this;\n    progress = Math.min(Math.max(progress, 0), 1);\n    var min = swiper.minTranslate();\n    var max = swiper.maxTranslate();\n    var current = (max - min) * progress + min;\n    swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  };\n\n  _proto.emitContainerClasses = function emitContainerClasses() {\n    var swiper = this;\n    if (!swiper.params._emitClasses || !swiper.el) return;\n    var classes = swiper.el.className.split(' ').filter(function (className) {\n      return className.indexOf('swiper-container') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n    });\n    swiper.emit('_containerClasses', classes.join(' '));\n  };\n\n  _proto.getSlideClasses = function getSlideClasses(slideEl) {\n    var swiper = this;\n    return slideEl.className.split(' ').filter(function (className) {\n      return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n    }).join(' ');\n  };\n\n  _proto.emitSlidesClasses = function emitSlidesClasses() {\n    var swiper = this;\n    if (!swiper.params._emitClasses || !swiper.el) return;\n    var updates = [];\n    swiper.slides.each(function (slideEl) {\n      var classNames = swiper.getSlideClasses(slideEl);\n      updates.push({\n        slideEl: slideEl,\n        classNames: classNames\n      });\n      swiper.emit('_slideClass', slideEl, classNames);\n    });\n    swiper.emit('_slideClasses', updates);\n  };\n\n  _proto.slidesPerViewDynamic = function slidesPerViewDynamic() {\n    var swiper = this;\n    var params = swiper.params,\n        slides = swiper.slides,\n        slidesGrid = swiper.slidesGrid,\n        swiperSize = swiper.size,\n        activeIndex = swiper.activeIndex;\n    var spv = 1;\n\n    if (params.centeredSlides) {\n      var slideSize = slides[activeIndex].swiperSlideSize;\n      var breakLoop;\n\n      for (var i = activeIndex + 1; i < slides.length; i += 1) {\n        if (slides[i] && !breakLoop) {\n          slideSize += slides[i].swiperSlideSize;\n          spv += 1;\n          if (slideSize > swiperSize) breakLoop = true;\n        }\n      }\n\n      for (var _i = activeIndex - 1; _i >= 0; _i -= 1) {\n        if (slides[_i] && !breakLoop) {\n          slideSize += slides[_i].swiperSlideSize;\n          spv += 1;\n          if (slideSize > swiperSize) breakLoop = true;\n        }\n      }\n    } else {\n      for (var _i2 = activeIndex + 1; _i2 < slides.length; _i2 += 1) {\n        if (slidesGrid[_i2] - slidesGrid[activeIndex] < swiperSize) {\n          spv += 1;\n        }\n      }\n    }\n\n    return spv;\n  };\n\n  _proto.update = function update() {\n    var swiper = this;\n    if (!swiper || swiper.destroyed) return;\n    var snapGrid = swiper.snapGrid,\n        params = swiper.params; // Breakpoints\n\n    if (params.breakpoints) {\n      swiper.setBreakpoint();\n    }\n\n    swiper.updateSize();\n    swiper.updateSlides();\n    swiper.updateProgress();\n    swiper.updateSlidesClasses();\n\n    function setTranslate() {\n      var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n      var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n      swiper.setTranslate(newTranslate);\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    }\n\n    var translated;\n\n    if (swiper.params.freeMode) {\n      setTranslate();\n\n      if (swiper.params.autoHeight) {\n        swiper.updateAutoHeight();\n      }\n    } else {\n      if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n        translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n      } else {\n        translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n      }\n\n      if (!translated) {\n        setTranslate();\n      }\n    }\n\n    if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n      swiper.checkOverflow();\n    }\n\n    swiper.emit('update');\n  };\n\n  _proto.changeDirection = function changeDirection(newDirection, needUpdate) {\n    if (needUpdate === void 0) {\n      needUpdate = true;\n    }\n\n    var swiper = this;\n    var currentDirection = swiper.params.direction;\n\n    if (!newDirection) {\n      // eslint-disable-next-line\n      newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n    }\n\n    if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n      return swiper;\n    }\n\n    swiper.$el.removeClass(\"\" + swiper.params.containerModifierClass + currentDirection).addClass(\"\" + swiper.params.containerModifierClass + newDirection);\n    swiper.emitContainerClasses();\n    swiper.params.direction = newDirection;\n    swiper.slides.each(function (slideEl) {\n      if (newDirection === 'vertical') {\n        slideEl.style.width = '';\n      } else {\n        slideEl.style.height = '';\n      }\n    });\n    swiper.emit('changeDirection');\n    if (needUpdate) swiper.update();\n    return swiper;\n  };\n\n  _proto.mount = function mount(el) {\n    var swiper = this;\n    if (swiper.mounted) return true; // Find el\n\n    var $el = $(el || swiper.params.el);\n    el = $el[0];\n\n    if (!el) {\n      return false;\n    }\n\n    el.swiper = swiper;\n\n    var getWrapperSelector = function getWrapperSelector() {\n      return \".\" + (swiper.params.wrapperClass || '').trim().split(' ').join('.');\n    };\n\n    var getWrapper = function getWrapper() {\n      if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n        var res = $(el.shadowRoot.querySelector(getWrapperSelector())); // Children needs to return slot items\n\n        res.children = function (options) {\n          return $el.children(options);\n        };\n\n        return res;\n      }\n\n      return $el.children(getWrapperSelector());\n    }; // Find Wrapper\n\n\n    var $wrapperEl = getWrapper();\n\n    if ($wrapperEl.length === 0 && swiper.params.createElements) {\n      var document = getDocument();\n      var wrapper = document.createElement('div');\n      $wrapperEl = $(wrapper);\n      wrapper.className = swiper.params.wrapperClass;\n      $el.append(wrapper);\n      $el.children(\".\" + swiper.params.slideClass).each(function (slideEl) {\n        $wrapperEl.append(slideEl);\n      });\n    }\n\n    extend(swiper, {\n      $el: $el,\n      el: el,\n      $wrapperEl: $wrapperEl,\n      wrapperEl: $wrapperEl[0],\n      mounted: true,\n      // RTL\n      rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n      rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n      wrongRTL: $wrapperEl.css('display') === '-webkit-box'\n    });\n    return true;\n  };\n\n  _proto.init = function init(el) {\n    var swiper = this;\n    if (swiper.initialized) return swiper;\n    var mounted = swiper.mount(el);\n    if (mounted === false) return swiper;\n    swiper.emit('beforeInit'); // Set breakpoint\n\n    if (swiper.params.breakpoints) {\n      swiper.setBreakpoint();\n    } // Add Classes\n\n\n    swiper.addClasses(); // Create loop\n\n    if (swiper.params.loop) {\n      swiper.loopCreate();\n    } // Update size\n\n\n    swiper.updateSize(); // Update slides\n\n    swiper.updateSlides();\n\n    if (swiper.params.watchOverflow) {\n      swiper.checkOverflow();\n    } // Set Grab Cursor\n\n\n    if (swiper.params.grabCursor && swiper.enabled) {\n      swiper.setGrabCursor();\n    }\n\n    if (swiper.params.preloadImages) {\n      swiper.preloadImages();\n    } // Slide To Initial Slide\n\n\n    if (swiper.params.loop) {\n      swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit, false, true);\n    } else {\n      swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n    } // Attach events\n\n\n    swiper.attachEvents(); // Init Flag\n\n    swiper.initialized = true; // Emit\n\n    swiper.emit('init');\n    swiper.emit('afterInit');\n    return swiper;\n  };\n\n  _proto.destroy = function destroy(deleteInstance, cleanStyles) {\n    if (deleteInstance === void 0) {\n      deleteInstance = true;\n    }\n\n    if (cleanStyles === void 0) {\n      cleanStyles = true;\n    }\n\n    var swiper = this;\n    var params = swiper.params,\n        $el = swiper.$el,\n        $wrapperEl = swiper.$wrapperEl,\n        slides = swiper.slides;\n\n    if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n      return null;\n    }\n\n    swiper.emit('beforeDestroy'); // Init Flag\n\n    swiper.initialized = false; // Detach events\n\n    swiper.detachEvents(); // Destroy loop\n\n    if (params.loop) {\n      swiper.loopDestroy();\n    } // Cleanup styles\n\n\n    if (cleanStyles) {\n      swiper.removeClasses();\n      $el.removeAttr('style');\n      $wrapperEl.removeAttr('style');\n\n      if (slides && slides.length) {\n        slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index');\n      }\n    }\n\n    swiper.emit('destroy'); // Detach emitter events\n\n    Object.keys(swiper.eventsListeners).forEach(function (eventName) {\n      swiper.off(eventName);\n    });\n\n    if (deleteInstance !== false) {\n      swiper.$el[0].swiper = null;\n      deleteProps(swiper);\n    }\n\n    swiper.destroyed = true;\n    return null;\n  };\n\n  Swiper.extendDefaults = function extendDefaults(newDefaults) {\n    extend(extendedDefaults, newDefaults);\n  };\n\n  Swiper.installModule = function installModule(module) {\n    if (!Swiper.prototype.modules) Swiper.prototype.modules = {};\n    var name = module.name || Object.keys(Swiper.prototype.modules).length + \"_\" + now();\n    Swiper.prototype.modules[name] = module;\n  };\n\n  Swiper.use = function use(module) {\n    if (Array.isArray(module)) {\n      module.forEach(function (m) {\n        return Swiper.installModule(m);\n      });\n      return Swiper;\n    }\n\n    Swiper.installModule(module);\n    return Swiper;\n  };\n\n  _createClass(Swiper, null, [{\n    key: \"extendedDefaults\",\n    get: function get() {\n      return extendedDefaults;\n    }\n  }, {\n    key: \"defaults\",\n    get: function get() {\n      return defaults;\n    }\n  }]);\n\n  return Swiper;\n}();\n\nObject.keys(prototypes).forEach(function (prototypeGroup) {\n  Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) {\n    Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n  });\n});\nSwiper.use([Resize, Observer]);\nexport default Swiper;","import { extend } from '../../utils/utils';\nexport default {\n  useParams: function useParams(instanceParams) {\n    var instance = this;\n    if (!instance.modules) return;\n    Object.keys(instance.modules).forEach(function (moduleName) {\n      var module = instance.modules[moduleName]; // Extend params\n\n      if (module.params) {\n        extend(instanceParams, module.params);\n      }\n    });\n  },\n  useModules: function useModules(modulesParams) {\n    if (modulesParams === void 0) {\n      modulesParams = {};\n    }\n\n    var instance = this;\n    if (!instance.modules) return;\n    Object.keys(instance.modules).forEach(function (moduleName) {\n      var module = instance.modules[moduleName];\n      var moduleParams = modulesParams[moduleName] || {}; // Add event listeners\n\n      if (module.on && instance.on) {\n        Object.keys(module.on).forEach(function (moduleEventName) {\n          instance.on(moduleEventName, module.on[moduleEventName]);\n        });\n      } // Module create callback\n\n\n      if (module.create) {\n        module.create.bind(instance)(moduleParams);\n      }\n    });\n  }\n};","import getTranslate from './getTranslate';\nimport setTranslate from './setTranslate';\nimport minTranslate from './minTranslate';\nimport maxTranslate from './maxTranslate';\nimport translateTo from './translateTo';\nexport default {\n  getTranslate: getTranslate,\n  setTranslate: setTranslate,\n  minTranslate: minTranslate,\n  maxTranslate: maxTranslate,\n  translateTo: translateTo\n};","import { getTranslate } from '../../../utils/utils';\nexport default function getSwiperTranslate(axis) {\n  if (axis === void 0) {\n    axis = this.isHorizontal() ? 'x' : 'y';\n  }\n\n  var swiper = this;\n  var params = swiper.params,\n      rtl = swiper.rtlTranslate,\n      translate = swiper.translate,\n      $wrapperEl = swiper.$wrapperEl;\n\n  if (params.virtualTranslate) {\n    return rtl ? -translate : translate;\n  }\n\n  if (params.cssMode) {\n    return translate;\n  }\n\n  var currentTranslate = getTranslate($wrapperEl[0], axis);\n  if (rtl) currentTranslate = -currentTranslate;\n  return currentTranslate || 0;\n}","export default function setTranslate(translate, byController) {\n  var swiper = this;\n  var rtl = swiper.rtlTranslate,\n      params = swiper.params,\n      $wrapperEl = swiper.$wrapperEl,\n      wrapperEl = swiper.wrapperEl,\n      progress = swiper.progress;\n  var x = 0;\n  var y = 0;\n  var z = 0;\n\n  if (swiper.isHorizontal()) {\n    x = rtl ? -translate : translate;\n  } else {\n    y = translate;\n  }\n\n  if (params.roundLengths) {\n    x = Math.floor(x);\n    y = Math.floor(y);\n  }\n\n  if (params.cssMode) {\n    wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n  } else if (!params.virtualTranslate) {\n    $wrapperEl.transform(\"translate3d(\" + x + \"px, \" + y + \"px, \" + z + \"px)\");\n  }\n\n  swiper.previousTranslate = swiper.translate;\n  swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress\n\n  var newProgress;\n  var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n  if (translatesDiff === 0) {\n    newProgress = 0;\n  } else {\n    newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n  }\n\n  if (newProgress !== progress) {\n    swiper.updateProgress(translate);\n  }\n\n  swiper.emit('setTranslate', swiper.translate, byController);\n}","export default function minTranslate() {\n  return -this.snapGrid[0];\n}","export default function maxTranslate() {\n  return -this.snapGrid[this.snapGrid.length - 1];\n}","export default function translateTo(translate, speed, runCallbacks, translateBounds, internal) {\n  if (translate === void 0) {\n    translate = 0;\n  }\n\n  if (speed === void 0) {\n    speed = this.params.speed;\n  }\n\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n\n  if (translateBounds === void 0) {\n    translateBounds = true;\n  }\n\n  var swiper = this;\n  var params = swiper.params,\n      wrapperEl = swiper.wrapperEl;\n\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return false;\n  }\n\n  var minTranslate = swiper.minTranslate();\n  var maxTranslate = swiper.maxTranslate();\n  var newTranslate;\n  if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress\n\n  swiper.updateProgress(newTranslate);\n\n  if (params.cssMode) {\n    var isH = swiper.isHorizontal();\n\n    if (speed === 0) {\n      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n    } else {\n      // eslint-disable-next-line\n      if (wrapperEl.scrollTo) {\n        var _wrapperEl$scrollTo;\n\n        wrapperEl.scrollTo((_wrapperEl$scrollTo = {}, _wrapperEl$scrollTo[isH ? 'left' : 'top'] = -newTranslate, _wrapperEl$scrollTo.behavior = 'smooth', _wrapperEl$scrollTo));\n      } else {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n      }\n    }\n\n    return true;\n  }\n\n  if (speed === 0) {\n    swiper.setTransition(0);\n    swiper.setTranslate(newTranslate);\n\n    if (runCallbacks) {\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.emit('transitionEnd');\n    }\n  } else {\n    swiper.setTransition(speed);\n    swiper.setTranslate(newTranslate);\n\n    if (runCallbacks) {\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.emit('transitionStart');\n    }\n\n    if (!swiper.animating) {\n      swiper.animating = true;\n\n      if (!swiper.onTranslateToWrapperTransitionEnd) {\n        swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n          if (!swiper || swiper.destroyed) return;\n          if (e.target !== this) return;\n          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n          swiper.onTranslateToWrapperTransitionEnd = null;\n          delete swiper.onTranslateToWrapperTransitionEnd;\n\n          if (runCallbacks) {\n            swiper.emit('transitionEnd');\n          }\n        };\n      }\n\n      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n    }\n  }\n\n  return true;\n}","import setTransition from './setTransition';\nimport transitionStart from './transitionStart';\nimport transitionEnd from './transitionEnd';\nexport default {\n  setTransition: setTransition,\n  transitionStart: transitionStart,\n  transitionEnd: transitionEnd\n};","export default function setTransition(duration, byController) {\n  var swiper = this;\n\n  if (!swiper.params.cssMode) {\n    swiper.$wrapperEl.transition(duration);\n  }\n\n  swiper.emit('setTransition', duration, byController);\n}","export default function transitionStart(runCallbacks, direction) {\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n\n  var swiper = this;\n  var activeIndex = swiper.activeIndex,\n      params = swiper.params,\n      previousIndex = swiper.previousIndex;\n  if (params.cssMode) return;\n\n  if (params.autoHeight) {\n    swiper.updateAutoHeight();\n  }\n\n  var dir = direction;\n\n  if (!dir) {\n    if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n  }\n\n  swiper.emit('transitionStart');\n\n  if (runCallbacks && activeIndex !== previousIndex) {\n    if (dir === 'reset') {\n      swiper.emit('slideResetTransitionStart');\n      return;\n    }\n\n    swiper.emit('slideChangeTransitionStart');\n\n    if (dir === 'next') {\n      swiper.emit('slideNextTransitionStart');\n    } else {\n      swiper.emit('slidePrevTransitionStart');\n    }\n  }\n}","export default function transitionEnd(runCallbacks, direction) {\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n\n  var swiper = this;\n  var activeIndex = swiper.activeIndex,\n      previousIndex = swiper.previousIndex,\n      params = swiper.params;\n  swiper.animating = false;\n  if (params.cssMode) return;\n  swiper.setTransition(0);\n  var dir = direction;\n\n  if (!dir) {\n    if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n  }\n\n  swiper.emit('transitionEnd');\n\n  if (runCallbacks && activeIndex !== previousIndex) {\n    if (dir === 'reset') {\n      swiper.emit('slideResetTransitionEnd');\n      return;\n    }\n\n    swiper.emit('slideChangeTransitionEnd');\n\n    if (dir === 'next') {\n      swiper.emit('slideNextTransitionEnd');\n    } else {\n      swiper.emit('slidePrevTransitionEnd');\n    }\n  }\n}","import setGrabCursor from './setGrabCursor';\nimport unsetGrabCursor from './unsetGrabCursor';\nexport default {\n  setGrabCursor: setGrabCursor,\n  unsetGrabCursor: unsetGrabCursor\n};","export default function setGrabCursor(moving) {\n  var swiper = this;\n  if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n  var el = swiper.el;\n  el.style.cursor = 'move';\n  el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n  el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n  el.style.cursor = moving ? 'grabbing' : 'grab';\n}","export default function unsetGrabCursor() {\n  var swiper = this;\n\n  if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n    return;\n  }\n\n  swiper.el.style.cursor = '';\n}","import appendSlide from './appendSlide';\nimport prependSlide from './prependSlide';\nimport addSlide from './addSlide';\nimport removeSlide from './removeSlide';\nimport removeAllSlides from './removeAllSlides';\nexport default {\n  appendSlide: appendSlide,\n  prependSlide: prependSlide,\n  addSlide: addSlide,\n  removeSlide: removeSlide,\n  removeAllSlides: removeAllSlides\n};","export default function appendSlide(slides) {\n  var swiper = this;\n  var $wrapperEl = swiper.$wrapperEl,\n      params = swiper.params;\n\n  if (params.loop) {\n    swiper.loopDestroy();\n  }\n\n  if (typeof slides === 'object' && 'length' in slides) {\n    for (var i = 0; i < slides.length; i += 1) {\n      if (slides[i]) $wrapperEl.append(slides[i]);\n    }\n  } else {\n    $wrapperEl.append(slides);\n  }\n\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n\n  if (!(params.observer && swiper.support.observer)) {\n    swiper.update();\n  }\n}","export default function prependSlide(slides) {\n  var swiper = this;\n  var params = swiper.params,\n      $wrapperEl = swiper.$wrapperEl,\n      activeIndex = swiper.activeIndex;\n\n  if (params.loop) {\n    swiper.loopDestroy();\n  }\n\n  var newActiveIndex = activeIndex + 1;\n\n  if (typeof slides === 'object' && 'length' in slides) {\n    for (var i = 0; i < slides.length; i += 1) {\n      if (slides[i]) $wrapperEl.prepend(slides[i]);\n    }\n\n    newActiveIndex = activeIndex + slides.length;\n  } else {\n    $wrapperEl.prepend(slides);\n  }\n\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n\n  if (!(params.observer && swiper.support.observer)) {\n    swiper.update();\n  }\n\n  swiper.slideTo(newActiveIndex, 0, false);\n}","export default function addSlide(index, slides) {\n  var swiper = this;\n  var $wrapperEl = swiper.$wrapperEl,\n      params = swiper.params,\n      activeIndex = swiper.activeIndex;\n  var activeIndexBuffer = activeIndex;\n\n  if (params.loop) {\n    activeIndexBuffer -= swiper.loopedSlides;\n    swiper.loopDestroy();\n    swiper.slides = $wrapperEl.children(\".\" + params.slideClass);\n  }\n\n  var baseLength = swiper.slides.length;\n\n  if (index <= 0) {\n    swiper.prependSlide(slides);\n    return;\n  }\n\n  if (index >= baseLength) {\n    swiper.appendSlide(slides);\n    return;\n  }\n\n  var newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n  var slidesBuffer = [];\n\n  for (var i = baseLength - 1; i >= index; i -= 1) {\n    var currentSlide = swiper.slides.eq(i);\n    currentSlide.remove();\n    slidesBuffer.unshift(currentSlide);\n  }\n\n  if (typeof slides === 'object' && 'length' in slides) {\n    for (var _i = 0; _i < slides.length; _i += 1) {\n      if (slides[_i]) $wrapperEl.append(slides[_i]);\n    }\n\n    newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n  } else {\n    $wrapperEl.append(slides);\n  }\n\n  for (var _i2 = 0; _i2 < slidesBuffer.length; _i2 += 1) {\n    $wrapperEl.append(slidesBuffer[_i2]);\n  }\n\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n\n  if (!(params.observer && swiper.support.observer)) {\n    swiper.update();\n  }\n\n  if (params.loop) {\n    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n  } else {\n    swiper.slideTo(newActiveIndex, 0, false);\n  }\n}","export default function removeSlide(slidesIndexes) {\n  var swiper = this;\n  var params = swiper.params,\n      $wrapperEl = swiper.$wrapperEl,\n      activeIndex = swiper.activeIndex;\n  var activeIndexBuffer = activeIndex;\n\n  if (params.loop) {\n    activeIndexBuffer -= swiper.loopedSlides;\n    swiper.loopDestroy();\n    swiper.slides = $wrapperEl.children(\".\" + params.slideClass);\n  }\n\n  var newActiveIndex = activeIndexBuffer;\n  var indexToRemove;\n\n  if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n    for (var i = 0; i < slidesIndexes.length; i += 1) {\n      indexToRemove = slidesIndexes[i];\n      if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n      if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n    }\n\n    newActiveIndex = Math.max(newActiveIndex, 0);\n  } else {\n    indexToRemove = slidesIndexes;\n    if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n    if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n    newActiveIndex = Math.max(newActiveIndex, 0);\n  }\n\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n\n  if (!(params.observer && swiper.support.observer)) {\n    swiper.update();\n  }\n\n  if (params.loop) {\n    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n  } else {\n    swiper.slideTo(newActiveIndex, 0, false);\n  }\n}","export default function removeAllSlides() {\n  var swiper = this;\n  var slidesIndexes = [];\n\n  for (var i = 0; i < swiper.slides.length; i += 1) {\n    slidesIndexes.push(i);\n  }\n\n  swiper.removeSlide(slidesIndexes);\n}","import setBreakpoint from './setBreakpoint';\nimport getBreakpoint from './getBreakpoint';\nexport default {\n  setBreakpoint: setBreakpoint,\n  getBreakpoint: getBreakpoint\n};","import { extend } from '../../../utils/utils';\nexport default function setBreakpoint() {\n  var swiper = this;\n  var activeIndex = swiper.activeIndex,\n      initialized = swiper.initialized,\n      _swiper$loopedSlides = swiper.loopedSlides,\n      loopedSlides = _swiper$loopedSlides === void 0 ? 0 : _swiper$loopedSlides,\n      params = swiper.params,\n      $el = swiper.$el;\n  var breakpoints = params.breakpoints;\n  if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters\n\n  var breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n  if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n  var breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n\n  if (breakpointOnlyParams) {\n    ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerGroupSkip', 'slidesPerColumn'].forEach(function (param) {\n      var paramValue = breakpointOnlyParams[param];\n      if (typeof paramValue === 'undefined') return;\n\n      if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {\n        breakpointOnlyParams[param] = 'auto';\n      } else if (param === 'slidesPerView') {\n        breakpointOnlyParams[param] = parseFloat(paramValue);\n      } else {\n        breakpointOnlyParams[param] = parseInt(paramValue, 10);\n      }\n    });\n  }\n\n  var breakpointParams = breakpointOnlyParams || swiper.originalParams;\n  var wasMultiRow = params.slidesPerColumn > 1;\n  var isMultiRow = breakpointParams.slidesPerColumn > 1;\n  var wasEnabled = params.enabled;\n\n  if (wasMultiRow && !isMultiRow) {\n    $el.removeClass(params.containerModifierClass + \"multirow \" + params.containerModifierClass + \"multirow-column\");\n    swiper.emitContainerClasses();\n  } else if (!wasMultiRow && isMultiRow) {\n    $el.addClass(params.containerModifierClass + \"multirow\");\n\n    if (breakpointParams.slidesPerColumnFill && breakpointParams.slidesPerColumnFill === 'column' || !breakpointParams.slidesPerColumnFill && params.slidesPerColumnFill === 'column') {\n      $el.addClass(params.containerModifierClass + \"multirow-column\");\n    }\n\n    swiper.emitContainerClasses();\n  }\n\n  var directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n  var needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n  if (directionChanged && initialized) {\n    swiper.changeDirection();\n  }\n\n  extend(swiper.params, breakpointParams);\n  var isEnabled = swiper.params.enabled;\n  extend(swiper, {\n    allowTouchMove: swiper.params.allowTouchMove,\n    allowSlideNext: swiper.params.allowSlideNext,\n    allowSlidePrev: swiper.params.allowSlidePrev\n  });\n\n  if (wasEnabled && !isEnabled) {\n    swiper.disable();\n  } else if (!wasEnabled && isEnabled) {\n    swiper.enable();\n  }\n\n  swiper.currentBreakpoint = breakpoint;\n  swiper.emit('_beforeBreakpoint', breakpointParams);\n\n  if (needsReLoop && initialized) {\n    swiper.loopDestroy();\n    swiper.loopCreate();\n    swiper.updateSlides();\n    swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n  }\n\n  swiper.emit('breakpoint', breakpointParams);\n}","import { getWindow } from 'ssr-window';\nexport default function getBreakpoint(breakpoints, base, containerEl) {\n  if (base === void 0) {\n    base = 'window';\n  }\n\n  if (!breakpoints || base === 'container' && !containerEl) return undefined;\n  var breakpoint = false;\n  var window = getWindow();\n  var currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n  var points = Object.keys(breakpoints).map(function (point) {\n    if (typeof point === 'string' && point.indexOf('@') === 0) {\n      var minRatio = parseFloat(point.substr(1));\n      var value = currentHeight * minRatio;\n      return {\n        value: value,\n        point: point\n      };\n    }\n\n    return {\n      value: point,\n      point: point\n    };\n  });\n  points.sort(function (a, b) {\n    return parseInt(a.value, 10) - parseInt(b.value, 10);\n  });\n\n  for (var i = 0; i < points.length; i += 1) {\n    var _points$i = points[i],\n        point = _points$i.point,\n        value = _points$i.value;\n\n    if (base === 'window') {\n      if (window.matchMedia(\"(min-width: \" + value + \"px)\").matches) {\n        breakpoint = point;\n      }\n    } else if (value <= containerEl.clientWidth) {\n      breakpoint = point;\n    }\n  }\n\n  return breakpoint || 'max';\n}","function checkOverflow() {\n  var swiper = this;\n  var params = swiper.params;\n  var wasLocked = swiper.isLocked;\n  var lastSlidePosition = swiper.slides.length > 0 && params.slidesOffsetBefore + params.spaceBetween * (swiper.slides.length - 1) + swiper.slides[0].offsetWidth * swiper.slides.length;\n\n  if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) {\n    swiper.isLocked = lastSlidePosition <= swiper.size;\n  } else {\n    swiper.isLocked = swiper.snapGrid.length === 1;\n  }\n\n  swiper.allowSlideNext = !swiper.isLocked;\n  swiper.allowSlidePrev = !swiper.isLocked; // events\n\n  if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n\n  if (wasLocked && wasLocked !== swiper.isLocked) {\n    swiper.isEnd = false;\n    if (swiper.navigation) swiper.navigation.update();\n  }\n}\n\nexport default {\n  checkOverflow: checkOverflow\n};","import loadImage from './loadImage';\nimport preloadImages from './preloadImages';\nexport default {\n  loadImage: loadImage,\n  preloadImages: preloadImages\n};","import { getWindow } from 'ssr-window';\nimport $ from '../../../utils/dom';\nexport default function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n  var window = getWindow();\n  var image;\n\n  function onReady() {\n    if (callback) callback();\n  }\n\n  var isPicture = $(imageEl).parent('picture')[0];\n\n  if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n    if (src) {\n      image = new window.Image();\n      image.onload = onReady;\n      image.onerror = onReady;\n\n      if (sizes) {\n        image.sizes = sizes;\n      }\n\n      if (srcset) {\n        image.srcset = srcset;\n      }\n\n      if (src) {\n        image.src = src;\n      }\n    } else {\n      onReady();\n    }\n  } else {\n    // image already loaded...\n    onReady();\n  }\n}","export default function preloadImages() {\n  var swiper = this;\n  swiper.imagesToLoad = swiper.$el.find('img');\n\n  function onReady() {\n    if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n    if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n\n    if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n      if (swiper.params.updateOnImagesReady) swiper.update();\n      swiper.emit('imagesReady');\n    }\n  }\n\n  for (var i = 0; i < swiper.imagesToLoad.length; i += 1) {\n    var imageEl = swiper.imagesToLoad[i];\n    swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);\n  }\n}","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport $ from '../../utils/dom';\nimport { extend, bindModuleMethods } from '../../utils/utils';\nvar Virtual = {\n  update: function update(force) {\n    var swiper = this;\n    var _swiper$params = swiper.params,\n        slidesPerView = _swiper$params.slidesPerView,\n        slidesPerGroup = _swiper$params.slidesPerGroup,\n        centeredSlides = _swiper$params.centeredSlides;\n    var _swiper$params$virtua = swiper.params.virtual,\n        addSlidesBefore = _swiper$params$virtua.addSlidesBefore,\n        addSlidesAfter = _swiper$params$virtua.addSlidesAfter;\n    var _swiper$virtual = swiper.virtual,\n        previousFrom = _swiper$virtual.from,\n        previousTo = _swiper$virtual.to,\n        slides = _swiper$virtual.slides,\n        previousSlidesGrid = _swiper$virtual.slidesGrid,\n        renderSlide = _swiper$virtual.renderSlide,\n        previousOffset = _swiper$virtual.offset;\n    swiper.updateActiveIndex();\n    var activeIndex = swiper.activeIndex || 0;\n    var offsetProp;\n    if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n    var slidesAfter;\n    var slidesBefore;\n\n    if (centeredSlides) {\n      slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n      slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n    } else {\n      slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;\n      slidesBefore = slidesPerGroup + addSlidesBefore;\n    }\n\n    var from = Math.max((activeIndex || 0) - slidesBefore, 0);\n    var to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);\n    var offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n    extend(swiper.virtual, {\n      from: from,\n      to: to,\n      offset: offset,\n      slidesGrid: swiper.slidesGrid\n    });\n\n    function onRendered() {\n      swiper.updateSlides();\n      swiper.updateProgress();\n      swiper.updateSlidesClasses();\n\n      if (swiper.lazy && swiper.params.lazy.enabled) {\n        swiper.lazy.load();\n      }\n    }\n\n    if (previousFrom === from && previousTo === to && !force) {\n      if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n        swiper.slides.css(offsetProp, offset + \"px\");\n      }\n\n      swiper.updateProgress();\n      return;\n    }\n\n    if (swiper.params.virtual.renderExternal) {\n      swiper.params.virtual.renderExternal.call(swiper, {\n        offset: offset,\n        from: from,\n        to: to,\n        slides: function getSlides() {\n          var slidesToRender = [];\n\n          for (var i = from; i <= to; i += 1) {\n            slidesToRender.push(slides[i]);\n          }\n\n          return slidesToRender;\n        }()\n      });\n\n      if (swiper.params.virtual.renderExternalUpdate) {\n        onRendered();\n      }\n\n      return;\n    }\n\n    var prependIndexes = [];\n    var appendIndexes = [];\n\n    if (force) {\n      swiper.$wrapperEl.find(\".\" + swiper.params.slideClass).remove();\n    } else {\n      for (var i = previousFrom; i <= previousTo; i += 1) {\n        if (i < from || i > to) {\n          swiper.$wrapperEl.find(\".\" + swiper.params.slideClass + \"[data-swiper-slide-index=\\\"\" + i + \"\\\"]\").remove();\n        }\n      }\n    }\n\n    for (var _i = 0; _i < slides.length; _i += 1) {\n      if (_i >= from && _i <= to) {\n        if (typeof previousTo === 'undefined' || force) {\n          appendIndexes.push(_i);\n        } else {\n          if (_i > previousTo) appendIndexes.push(_i);\n          if (_i < previousFrom) prependIndexes.push(_i);\n        }\n      }\n    }\n\n    appendIndexes.forEach(function (index) {\n      swiper.$wrapperEl.append(renderSlide(slides[index], index));\n    });\n    prependIndexes.sort(function (a, b) {\n      return b - a;\n    }).forEach(function (index) {\n      swiper.$wrapperEl.prepend(renderSlide(slides[index], index));\n    });\n    swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, offset + \"px\");\n    onRendered();\n  },\n  renderSlide: function renderSlide(slide, index) {\n    var swiper = this;\n    var params = swiper.params.virtual;\n\n    if (params.cache && swiper.virtual.cache[index]) {\n      return swiper.virtual.cache[index];\n    }\n\n    var $slideEl = params.renderSlide ? $(params.renderSlide.call(swiper, slide, index)) : $(\"<div class=\\\"\" + swiper.params.slideClass + \"\\\" data-swiper-slide-index=\\\"\" + index + \"\\\">\" + slide + \"</div>\");\n    if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index);\n    if (params.cache) swiper.virtual.cache[index] = $slideEl;\n    return $slideEl;\n  },\n  appendSlide: function appendSlide(slides) {\n    var swiper = this;\n\n    if (typeof slides === 'object' && 'length' in slides) {\n      for (var i = 0; i < slides.length; i += 1) {\n        if (slides[i]) swiper.virtual.slides.push(slides[i]);\n      }\n    } else {\n      swiper.virtual.slides.push(slides);\n    }\n\n    swiper.virtual.update(true);\n  },\n  prependSlide: function prependSlide(slides) {\n    var swiper = this;\n    var activeIndex = swiper.activeIndex;\n    var newActiveIndex = activeIndex + 1;\n    var numberOfNewSlides = 1;\n\n    if (Array.isArray(slides)) {\n      for (var i = 0; i < slides.length; i += 1) {\n        if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\n      }\n\n      newActiveIndex = activeIndex + slides.length;\n      numberOfNewSlides = slides.length;\n    } else {\n      swiper.virtual.slides.unshift(slides);\n    }\n\n    if (swiper.params.virtual.cache) {\n      var cache = swiper.virtual.cache;\n      var newCache = {};\n      Object.keys(cache).forEach(function (cachedIndex) {\n        var $cachedEl = cache[cachedIndex];\n        var cachedElIndex = $cachedEl.attr('data-swiper-slide-index');\n\n        if (cachedElIndex) {\n          $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + 1);\n        }\n\n        newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;\n      });\n      swiper.virtual.cache = newCache;\n    }\n\n    swiper.virtual.update(true);\n    swiper.slideTo(newActiveIndex, 0);\n  },\n  removeSlide: function removeSlide(slidesIndexes) {\n    var swiper = this;\n    if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n    var activeIndex = swiper.activeIndex;\n\n    if (Array.isArray(slidesIndexes)) {\n      for (var i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n        swiper.virtual.slides.splice(slidesIndexes[i], 1);\n\n        if (swiper.params.virtual.cache) {\n          delete swiper.virtual.cache[slidesIndexes[i]];\n        }\n\n        if (slidesIndexes[i] < activeIndex) activeIndex -= 1;\n        activeIndex = Math.max(activeIndex, 0);\n      }\n    } else {\n      swiper.virtual.slides.splice(slidesIndexes, 1);\n\n      if (swiper.params.virtual.cache) {\n        delete swiper.virtual.cache[slidesIndexes];\n      }\n\n      if (slidesIndexes < activeIndex) activeIndex -= 1;\n      activeIndex = Math.max(activeIndex, 0);\n    }\n\n    swiper.virtual.update(true);\n    swiper.slideTo(activeIndex, 0);\n  },\n  removeAllSlides: function removeAllSlides() {\n    var swiper = this;\n    swiper.virtual.slides = [];\n\n    if (swiper.params.virtual.cache) {\n      swiper.virtual.cache = {};\n    }\n\n    swiper.virtual.update(true);\n    swiper.slideTo(0, 0);\n  }\n};\nexport default {\n  name: 'virtual',\n  params: {\n    virtual: {\n      enabled: false,\n      slides: [],\n      cache: true,\n      renderSlide: null,\n      renderExternal: null,\n      renderExternalUpdate: true,\n      addSlidesBefore: 0,\n      addSlidesAfter: 0\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      virtual: _extends({}, Virtual, {\n        slides: swiper.params.virtual.slides,\n        cache: {}\n      })\n    });\n  },\n  on: {\n    beforeInit: function beforeInit(swiper) {\n      if (!swiper.params.virtual.enabled) return;\n      swiper.classNames.push(swiper.params.containerModifierClass + \"virtual\");\n      var overwriteParams = {\n        watchSlidesProgress: true\n      };\n      extend(swiper.params, overwriteParams);\n      extend(swiper.originalParams, overwriteParams);\n\n      if (!swiper.params.initialSlide) {\n        swiper.virtual.update();\n      }\n    },\n    setTranslate: function setTranslate(swiper) {\n      if (!swiper.params.virtual.enabled) return;\n      swiper.virtual.update();\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\n/* eslint-disable consistent-return */\nimport { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport { bindModuleMethods } from '../../utils/utils';\nvar Keyboard = {\n  handle: function handle(event) {\n    var swiper = this;\n    if (!swiper.enabled) return;\n    var window = getWindow();\n    var document = getDocument();\n    var rtl = swiper.rtlTranslate;\n    var e = event;\n    if (e.originalEvent) e = e.originalEvent; // jquery fix\n\n    var kc = e.keyCode || e.charCode;\n    var pageUpDown = swiper.params.keyboard.pageUpDown;\n    var isPageUp = pageUpDown && kc === 33;\n    var isPageDown = pageUpDown && kc === 34;\n    var isArrowLeft = kc === 37;\n    var isArrowRight = kc === 39;\n    var isArrowUp = kc === 38;\n    var isArrowDown = kc === 40; // Directions locks\n\n    if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {\n      return false;\n    }\n\n    if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {\n      return false;\n    }\n\n    if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n      return undefined;\n    }\n\n    if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n      return undefined;\n    }\n\n    if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n      var inView = false; // Check that swiper should be inside of visible area of window\n\n      if (swiper.$el.parents(\".\" + swiper.params.slideClass).length > 0 && swiper.$el.parents(\".\" + swiper.params.slideActiveClass).length === 0) {\n        return undefined;\n      }\n\n      var $el = swiper.$el;\n      var swiperWidth = $el[0].clientWidth;\n      var swiperHeight = $el[0].clientHeight;\n      var windowWidth = window.innerWidth;\n      var windowHeight = window.innerHeight;\n      var swiperOffset = swiper.$el.offset();\n      if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n      var swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];\n\n      for (var i = 0; i < swiperCoord.length; i += 1) {\n        var point = swiperCoord[i];\n\n        if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n          if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n\n          inView = true;\n        }\n      }\n\n      if (!inView) return undefined;\n    }\n\n    if (swiper.isHorizontal()) {\n      if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n        if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n      }\n\n      if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();\n      if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();\n    } else {\n      if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n        if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n      }\n\n      if (isPageDown || isArrowDown) swiper.slideNext();\n      if (isPageUp || isArrowUp) swiper.slidePrev();\n    }\n\n    swiper.emit('keyPress', kc);\n    return undefined;\n  },\n  enable: function enable() {\n    var swiper = this;\n    var document = getDocument();\n    if (swiper.keyboard.enabled) return;\n    $(document).on('keydown', swiper.keyboard.handle);\n    swiper.keyboard.enabled = true;\n  },\n  disable: function disable() {\n    var swiper = this;\n    var document = getDocument();\n    if (!swiper.keyboard.enabled) return;\n    $(document).off('keydown', swiper.keyboard.handle);\n    swiper.keyboard.enabled = false;\n  }\n};\nexport default {\n  name: 'keyboard',\n  params: {\n    keyboard: {\n      enabled: false,\n      onlyInViewport: true,\n      pageUpDown: true\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      keyboard: _extends({\n        enabled: false\n      }, Keyboard)\n    });\n  },\n  on: {\n    init: function init(swiper) {\n      if (swiper.params.keyboard.enabled) {\n        swiper.keyboard.enable();\n      }\n    },\n    destroy: function destroy(swiper) {\n      if (swiper.keyboard.enabled) {\n        swiper.keyboard.disable();\n      }\n    }\n  }\n};","/* eslint-disable consistent-return */\nimport { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport { now, nextTick, bindModuleMethods } from '../../utils/utils';\n\nfunction isEventSupported() {\n  var document = getDocument();\n  var eventName = 'onwheel';\n  var isSupported = (eventName in document);\n\n  if (!isSupported) {\n    var element = document.createElement('div');\n    element.setAttribute(eventName, 'return;');\n    isSupported = typeof element[eventName] === 'function';\n  }\n\n  if (!isSupported && document.implementation && document.implementation.hasFeature && // always returns true in newer browsers as per the standard.\n  // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n  document.implementation.hasFeature('', '') !== true) {\n    // This is the only way to test support for the `wheel` event in IE9+.\n    isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n  }\n\n  return isSupported;\n}\n\nvar Mousewheel = {\n  lastScrollTime: now(),\n  lastEventBeforeSnap: undefined,\n  recentWheelEvents: [],\n  event: function event() {\n    var window = getWindow();\n    if (window.navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll';\n    return isEventSupported() ? 'wheel' : 'mousewheel';\n  },\n  normalize: function normalize(e) {\n    // Reasonable defaults\n    var PIXEL_STEP = 10;\n    var LINE_HEIGHT = 40;\n    var PAGE_HEIGHT = 800;\n    var sX = 0;\n    var sY = 0; // spinX, spinY\n\n    var pX = 0;\n    var pY = 0; // pixelX, pixelY\n    // Legacy\n\n    if ('detail' in e) {\n      sY = e.detail;\n    }\n\n    if ('wheelDelta' in e) {\n      sY = -e.wheelDelta / 120;\n    }\n\n    if ('wheelDeltaY' in e) {\n      sY = -e.wheelDeltaY / 120;\n    }\n\n    if ('wheelDeltaX' in e) {\n      sX = -e.wheelDeltaX / 120;\n    } // side scrolling on FF with DOMMouseScroll\n\n\n    if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n      sX = sY;\n      sY = 0;\n    }\n\n    pX = sX * PIXEL_STEP;\n    pY = sY * PIXEL_STEP;\n\n    if ('deltaY' in e) {\n      pY = e.deltaY;\n    }\n\n    if ('deltaX' in e) {\n      pX = e.deltaX;\n    }\n\n    if (e.shiftKey && !pX) {\n      // if user scrolls with shift he wants horizontal scroll\n      pX = pY;\n      pY = 0;\n    }\n\n    if ((pX || pY) && e.deltaMode) {\n      if (e.deltaMode === 1) {\n        // delta in LINE units\n        pX *= LINE_HEIGHT;\n        pY *= LINE_HEIGHT;\n      } else {\n        // delta in PAGE units\n        pX *= PAGE_HEIGHT;\n        pY *= PAGE_HEIGHT;\n      }\n    } // Fall-back if spin cannot be determined\n\n\n    if (pX && !sX) {\n      sX = pX < 1 ? -1 : 1;\n    }\n\n    if (pY && !sY) {\n      sY = pY < 1 ? -1 : 1;\n    }\n\n    return {\n      spinX: sX,\n      spinY: sY,\n      pixelX: pX,\n      pixelY: pY\n    };\n  },\n  handleMouseEnter: function handleMouseEnter() {\n    var swiper = this;\n    if (!swiper.enabled) return;\n    swiper.mouseEntered = true;\n  },\n  handleMouseLeave: function handleMouseLeave() {\n    var swiper = this;\n    if (!swiper.enabled) return;\n    swiper.mouseEntered = false;\n  },\n  handle: function handle(event) {\n    var e = event;\n    var disableParentSwiper = true;\n    var swiper = this;\n    if (!swiper.enabled) return;\n    var params = swiper.params.mousewheel;\n\n    if (swiper.params.cssMode) {\n      e.preventDefault();\n    }\n\n    var target = swiper.$el;\n\n    if (swiper.params.mousewheel.eventsTarget !== 'container') {\n      target = $(swiper.params.mousewheel.eventsTarget);\n    }\n\n    if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true;\n    if (e.originalEvent) e = e.originalEvent; // jquery fix\n\n    var delta = 0;\n    var rtlFactor = swiper.rtlTranslate ? -1 : 1;\n    var data = Mousewheel.normalize(e);\n\n    if (params.forceToAxis) {\n      if (swiper.isHorizontal()) {\n        if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;\n      } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;\n    } else {\n      delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n    }\n\n    if (delta === 0) return true;\n    if (params.invert) delta = -delta; // Get the scroll positions\n\n    var positions = swiper.getTranslate() + delta * params.sensitivity;\n    if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();\n    if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate(); // When loop is true:\n    //     the disableParentSwiper will be true.\n    // When loop is false:\n    //     if the scroll positions is not on edge,\n    //     then the disableParentSwiper will be true.\n    //     if the scroll on edge positions,\n    //     then the disableParentSwiper will be false.\n\n    disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\n    if (disableParentSwiper && swiper.params.nested) e.stopPropagation();\n\n    if (!swiper.params.freeMode) {\n      // Register the new event in a variable which stores the relevant data\n      var newEvent = {\n        time: now(),\n        delta: Math.abs(delta),\n        direction: Math.sign(delta),\n        raw: event\n      }; // Keep the most recent events\n\n      var recentWheelEvents = swiper.mousewheel.recentWheelEvents;\n\n      if (recentWheelEvents.length >= 2) {\n        recentWheelEvents.shift(); // only store the last N events\n      }\n\n      var prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n      recentWheelEvents.push(newEvent); // If there is at least one previous recorded event:\n      //   If direction has changed or\n      //   if the scroll is quicker than the previous one:\n      //     Animate the slider.\n      // Else (this is the first time the wheel is moved):\n      //     Animate the slider.\n\n      if (prevEvent) {\n        if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n          swiper.mousewheel.animateSlider(newEvent);\n        }\n      } else {\n        swiper.mousewheel.animateSlider(newEvent);\n      } // If it's time to release the scroll:\n      //   Return now so you don't hit the preventDefault.\n\n\n      if (swiper.mousewheel.releaseScroll(newEvent)) {\n        return true;\n      }\n    } else {\n      // Freemode or scrollContainer:\n      // If we recently snapped after a momentum scroll, then ignore wheel events\n      // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n      // or if it's a new scroll (larger delta or inverse sign as last event before\n      // an end-of-momentum snap).\n      var _newEvent = {\n        time: now(),\n        delta: Math.abs(delta),\n        direction: Math.sign(delta)\n      };\n      var lastEventBeforeSnap = swiper.mousewheel.lastEventBeforeSnap;\n      var ignoreWheelEvents = lastEventBeforeSnap && _newEvent.time < lastEventBeforeSnap.time + 500 && _newEvent.delta <= lastEventBeforeSnap.delta && _newEvent.direction === lastEventBeforeSnap.direction;\n\n      if (!ignoreWheelEvents) {\n        swiper.mousewheel.lastEventBeforeSnap = undefined;\n\n        if (swiper.params.loop) {\n          swiper.loopFix();\n        }\n\n        var position = swiper.getTranslate() + delta * params.sensitivity;\n        var wasBeginning = swiper.isBeginning;\n        var wasEnd = swiper.isEnd;\n        if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n        if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n        swiper.setTransition(0);\n        swiper.setTranslate(position);\n        swiper.updateProgress();\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n\n        if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {\n          swiper.updateSlidesClasses();\n        }\n\n        if (swiper.params.freeModeSticky) {\n          // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n          // the end of a momentum scroll by storing recent (N=15?) wheel events.\n          // 1. do all N events have decreasing or same (absolute value) delta?\n          // 2. did all N events arrive in the last M (M=500?) msecs?\n          // 3. does the earliest event have an (absolute value) delta that's\n          //    at least P (P=1?) larger than the most recent event's delta?\n          // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n          // If 1-4 are \"yes\" then we're near the end of a momentum scroll deceleration.\n          // Snap immediately and ignore remaining wheel events in this scroll.\n          // See comment above for \"remaining wheel events in this scroll\" determination.\n          // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n          clearTimeout(swiper.mousewheel.timeout);\n          swiper.mousewheel.timeout = undefined;\n          var _recentWheelEvents = swiper.mousewheel.recentWheelEvents;\n\n          if (_recentWheelEvents.length >= 15) {\n            _recentWheelEvents.shift(); // only store the last N events\n\n          }\n\n          var _prevEvent = _recentWheelEvents.length ? _recentWheelEvents[_recentWheelEvents.length - 1] : undefined;\n\n          var firstEvent = _recentWheelEvents[0];\n\n          _recentWheelEvents.push(_newEvent);\n\n          if (_prevEvent && (_newEvent.delta > _prevEvent.delta || _newEvent.direction !== _prevEvent.direction)) {\n            // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n            _recentWheelEvents.splice(0);\n          } else if (_recentWheelEvents.length >= 15 && _newEvent.time - firstEvent.time < 500 && firstEvent.delta - _newEvent.delta >= 1 && _newEvent.delta <= 6) {\n            // We're at the end of the deceleration of a momentum scroll, so there's no need\n            // to wait for more events. Snap ASAP on the next tick.\n            // Also, because there's some remaining momentum we'll bias the snap in the\n            // direction of the ongoing scroll because it's better UX for the scroll to snap\n            // in the same direction as the scroll instead of reversing to snap.  Therefore,\n            // if it's already scrolled more than 20% in the current direction, keep going.\n            var snapToThreshold = delta > 0 ? 0.8 : 0.2;\n            swiper.mousewheel.lastEventBeforeSnap = _newEvent;\n\n            _recentWheelEvents.splice(0);\n\n            swiper.mousewheel.timeout = nextTick(function () {\n              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n            }, 0); // no delay; move on next tick\n          }\n\n          if (!swiper.mousewheel.timeout) {\n            // if we get here, then we haven't detected the end of a momentum scroll, so\n            // we'll consider a scroll \"complete\" when there haven't been any wheel events\n            // for 500ms.\n            swiper.mousewheel.timeout = nextTick(function () {\n              var snapToThreshold = 0.5;\n              swiper.mousewheel.lastEventBeforeSnap = _newEvent;\n\n              _recentWheelEvents.splice(0);\n\n              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n            }, 500);\n          }\n        } // Emit event\n\n\n        if (!ignoreWheelEvents) swiper.emit('scroll', e); // Stop autoplay\n\n        if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop(); // Return page scroll on edge positions\n\n        if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\n      }\n    }\n\n    if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n    return false;\n  },\n  animateSlider: function animateSlider(newEvent) {\n    var swiper = this;\n    var window = getWindow();\n\n    if (this.params.mousewheel.thresholdDelta && newEvent.delta < this.params.mousewheel.thresholdDelta) {\n      // Prevent if delta of wheel scroll delta is below configured threshold\n      return false;\n    }\n\n    if (this.params.mousewheel.thresholdTime && now() - swiper.mousewheel.lastScrollTime < this.params.mousewheel.thresholdTime) {\n      // Prevent if time between scrolls is below configured threshold\n      return false;\n    } // If the movement is NOT big enough and\n    // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n    //   Don't go any further (avoid insignificant scroll movement).\n\n\n    if (newEvent.delta >= 6 && now() - swiper.mousewheel.lastScrollTime < 60) {\n      // Return false as a default\n      return true;\n    } // If user is scrolling towards the end:\n    //   If the slider hasn't hit the latest slide or\n    //   if the slider is a loop and\n    //   if the slider isn't moving right now:\n    //     Go to next slide and\n    //     emit a scroll event.\n    // Else (the user is scrolling towards the beginning) and\n    // if the slider hasn't hit the first slide or\n    // if the slider is a loop and\n    // if the slider isn't moving right now:\n    //   Go to prev slide and\n    //   emit a scroll event.\n\n\n    if (newEvent.direction < 0) {\n      if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n        swiper.slideNext();\n        swiper.emit('scroll', newEvent.raw);\n      }\n    } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n      swiper.slidePrev();\n      swiper.emit('scroll', newEvent.raw);\n    } // If you got here is because an animation has been triggered so store the current time\n\n\n    swiper.mousewheel.lastScrollTime = new window.Date().getTime(); // Return false as a default\n\n    return false;\n  },\n  releaseScroll: function releaseScroll(newEvent) {\n    var swiper = this;\n    var params = swiper.params.mousewheel;\n\n    if (newEvent.direction < 0) {\n      if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n        // Return true to animate scroll on edges\n        return true;\n      }\n    } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n      // Return true to animate scroll on edges\n      return true;\n    }\n\n    return false;\n  },\n  enable: function enable() {\n    var swiper = this;\n    var event = Mousewheel.event();\n\n    if (swiper.params.cssMode) {\n      swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle);\n      return true;\n    }\n\n    if (!event) return false;\n    if (swiper.mousewheel.enabled) return false;\n    var target = swiper.$el;\n\n    if (swiper.params.mousewheel.eventsTarget !== 'container') {\n      target = $(swiper.params.mousewheel.eventsTarget);\n    }\n\n    target.on('mouseenter', swiper.mousewheel.handleMouseEnter);\n    target.on('mouseleave', swiper.mousewheel.handleMouseLeave);\n    target.on(event, swiper.mousewheel.handle);\n    swiper.mousewheel.enabled = true;\n    return true;\n  },\n  disable: function disable() {\n    var swiper = this;\n    var event = Mousewheel.event();\n\n    if (swiper.params.cssMode) {\n      swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle);\n      return true;\n    }\n\n    if (!event) return false;\n    if (!swiper.mousewheel.enabled) return false;\n    var target = swiper.$el;\n\n    if (swiper.params.mousewheel.eventsTarget !== 'container') {\n      target = $(swiper.params.mousewheel.eventsTarget);\n    }\n\n    target.off(event, swiper.mousewheel.handle);\n    swiper.mousewheel.enabled = false;\n    return true;\n  }\n};\nexport default {\n  name: 'mousewheel',\n  params: {\n    mousewheel: {\n      enabled: false,\n      releaseOnEdges: false,\n      invert: false,\n      forceToAxis: false,\n      sensitivity: 1,\n      eventsTarget: 'container',\n      thresholdDelta: null,\n      thresholdTime: null\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      mousewheel: {\n        enabled: false,\n        lastScrollTime: now(),\n        lastEventBeforeSnap: undefined,\n        recentWheelEvents: [],\n        enable: Mousewheel.enable,\n        disable: Mousewheel.disable,\n        handle: Mousewheel.handle,\n        handleMouseEnter: Mousewheel.handleMouseEnter,\n        handleMouseLeave: Mousewheel.handleMouseLeave,\n        animateSlider: Mousewheel.animateSlider,\n        releaseScroll: Mousewheel.releaseScroll\n      }\n    });\n  },\n  on: {\n    init: function init(swiper) {\n      if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n        swiper.mousewheel.disable();\n      }\n\n      if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable();\n    },\n    destroy: function destroy(swiper) {\n      if (swiper.params.cssMode) {\n        swiper.mousewheel.enable();\n      }\n\n      if (swiper.mousewheel.enabled) swiper.mousewheel.disable();\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport $ from '../../utils/dom';\nimport { extend, bindModuleMethods, createElementIfNotDefined } from '../../utils/utils';\nvar Navigation = {\n  toggleEl: function toggleEl($el, disabled) {\n    $el[disabled ? 'addClass' : 'removeClass'](this.params.navigation.disabledClass);\n    if ($el[0] && $el[0].tagName === 'BUTTON') $el[0].disabled = disabled;\n  },\n  update: function update() {\n    // Update Navigation Buttons\n    var swiper = this;\n    var params = swiper.params.navigation;\n    var toggleEl = swiper.navigation.toggleEl;\n    if (swiper.params.loop) return;\n    var _swiper$navigation = swiper.navigation,\n        $nextEl = _swiper$navigation.$nextEl,\n        $prevEl = _swiper$navigation.$prevEl;\n\n    if ($prevEl && $prevEl.length > 0) {\n      if (swiper.isBeginning) {\n        toggleEl($prevEl, true);\n      } else {\n        toggleEl($prevEl, false);\n      }\n\n      if (swiper.params.watchOverflow && swiper.enabled) {\n        $prevEl[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n      }\n    }\n\n    if ($nextEl && $nextEl.length > 0) {\n      if (swiper.isEnd) {\n        toggleEl($nextEl, true);\n      } else {\n        toggleEl($nextEl, false);\n      }\n\n      if (swiper.params.watchOverflow && swiper.enabled) {\n        $nextEl[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n      }\n    }\n  },\n  onPrevClick: function onPrevClick(e) {\n    var swiper = this;\n    e.preventDefault();\n    if (swiper.isBeginning && !swiper.params.loop) return;\n    swiper.slidePrev();\n  },\n  onNextClick: function onNextClick(e) {\n    var swiper = this;\n    e.preventDefault();\n    if (swiper.isEnd && !swiper.params.loop) return;\n    swiper.slideNext();\n  },\n  init: function init() {\n    var swiper = this;\n    var params = swiper.params.navigation;\n    swiper.params.navigation = createElementIfNotDefined(swiper.$el, swiper.params.navigation, swiper.params.createElements, {\n      nextEl: 'swiper-button-next',\n      prevEl: 'swiper-button-prev'\n    });\n    if (!(params.nextEl || params.prevEl)) return;\n    var $nextEl;\n    var $prevEl;\n\n    if (params.nextEl) {\n      $nextEl = $(params.nextEl);\n\n      if (swiper.params.uniqueNavElements && typeof params.nextEl === 'string' && $nextEl.length > 1 && swiper.$el.find(params.nextEl).length === 1) {\n        $nextEl = swiper.$el.find(params.nextEl);\n      }\n    }\n\n    if (params.prevEl) {\n      $prevEl = $(params.prevEl);\n\n      if (swiper.params.uniqueNavElements && typeof params.prevEl === 'string' && $prevEl.length > 1 && swiper.$el.find(params.prevEl).length === 1) {\n        $prevEl = swiper.$el.find(params.prevEl);\n      }\n    }\n\n    if ($nextEl && $nextEl.length > 0) {\n      $nextEl.on('click', swiper.navigation.onNextClick);\n    }\n\n    if ($prevEl && $prevEl.length > 0) {\n      $prevEl.on('click', swiper.navigation.onPrevClick);\n    }\n\n    extend(swiper.navigation, {\n      $nextEl: $nextEl,\n      nextEl: $nextEl && $nextEl[0],\n      $prevEl: $prevEl,\n      prevEl: $prevEl && $prevEl[0]\n    });\n\n    if (!swiper.enabled) {\n      if ($nextEl) $nextEl.addClass(params.lockClass);\n      if ($prevEl) $prevEl.addClass(params.lockClass);\n    }\n  },\n  destroy: function destroy() {\n    var swiper = this;\n    var _swiper$navigation2 = swiper.navigation,\n        $nextEl = _swiper$navigation2.$nextEl,\n        $prevEl = _swiper$navigation2.$prevEl;\n\n    if ($nextEl && $nextEl.length) {\n      $nextEl.off('click', swiper.navigation.onNextClick);\n      $nextEl.removeClass(swiper.params.navigation.disabledClass);\n    }\n\n    if ($prevEl && $prevEl.length) {\n      $prevEl.off('click', swiper.navigation.onPrevClick);\n      $prevEl.removeClass(swiper.params.navigation.disabledClass);\n    }\n  }\n};\nexport default {\n  name: 'navigation',\n  params: {\n    navigation: {\n      nextEl: null,\n      prevEl: null,\n      hideOnClick: false,\n      disabledClass: 'swiper-button-disabled',\n      hiddenClass: 'swiper-button-hidden',\n      lockClass: 'swiper-button-lock'\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      navigation: _extends({}, Navigation)\n    });\n  },\n  on: {\n    init: function init(swiper) {\n      swiper.navigation.init();\n      swiper.navigation.update();\n    },\n    toEdge: function toEdge(swiper) {\n      swiper.navigation.update();\n    },\n    fromEdge: function fromEdge(swiper) {\n      swiper.navigation.update();\n    },\n    destroy: function destroy(swiper) {\n      swiper.navigation.destroy();\n    },\n    'enable disable': function enableDisable(swiper) {\n      var _swiper$navigation3 = swiper.navigation,\n          $nextEl = _swiper$navigation3.$nextEl,\n          $prevEl = _swiper$navigation3.$prevEl;\n\n      if ($nextEl) {\n        $nextEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n      }\n\n      if ($prevEl) {\n        $prevEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n      }\n    },\n    click: function click(swiper, e) {\n      var _swiper$navigation4 = swiper.navigation,\n          $nextEl = _swiper$navigation4.$nextEl,\n          $prevEl = _swiper$navigation4.$prevEl;\n      var targetEl = e.target;\n\n      if (swiper.params.navigation.hideOnClick && !$(targetEl).is($prevEl) && !$(targetEl).is($nextEl)) {\n        if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n        var isHidden;\n\n        if ($nextEl) {\n          isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n        } else if ($prevEl) {\n          isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n        }\n\n        if (isHidden === true) {\n          swiper.emit('navigationShow');\n        } else {\n          swiper.emit('navigationHide');\n        }\n\n        if ($nextEl) {\n          $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n        }\n\n        if ($prevEl) {\n          $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n        }\n      }\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport $ from '../../utils/dom';\nimport { extend, bindModuleMethods, classesToSelector, createElementIfNotDefined } from '../../utils/utils';\nvar Pagination = {\n  update: function update() {\n    // Render || Update Pagination bullets/items\n    var swiper = this;\n    var rtl = swiper.rtl;\n    var params = swiper.params.pagination;\n    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n    var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n    var $el = swiper.pagination.$el; // Current/Total\n\n    var current;\n    var total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n    if (swiper.params.loop) {\n      current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n\n      if (current > slidesLength - 1 - swiper.loopedSlides * 2) {\n        current -= slidesLength - swiper.loopedSlides * 2;\n      }\n\n      if (current > total - 1) current -= total;\n      if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n    } else if (typeof swiper.snapIndex !== 'undefined') {\n      current = swiper.snapIndex;\n    } else {\n      current = swiper.activeIndex || 0;\n    } // Types\n\n\n    if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n      var bullets = swiper.pagination.bullets;\n      var firstIndex;\n      var lastIndex;\n      var midIndex;\n\n      if (params.dynamicBullets) {\n        swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n        $el.css(swiper.isHorizontal() ? 'width' : 'height', swiper.pagination.bulletSize * (params.dynamicMainBullets + 4) + \"px\");\n\n        if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n          swiper.pagination.dynamicBulletIndex += current - swiper.previousIndex;\n\n          if (swiper.pagination.dynamicBulletIndex > params.dynamicMainBullets - 1) {\n            swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;\n          } else if (swiper.pagination.dynamicBulletIndex < 0) {\n            swiper.pagination.dynamicBulletIndex = 0;\n          }\n        }\n\n        firstIndex = current - swiper.pagination.dynamicBulletIndex;\n        lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n        midIndex = (lastIndex + firstIndex) / 2;\n      }\n\n      bullets.removeClass(params.bulletActiveClass + \" \" + params.bulletActiveClass + \"-next \" + params.bulletActiveClass + \"-next-next \" + params.bulletActiveClass + \"-prev \" + params.bulletActiveClass + \"-prev-prev \" + params.bulletActiveClass + \"-main\");\n\n      if ($el.length > 1) {\n        bullets.each(function (bullet) {\n          var $bullet = $(bullet);\n          var bulletIndex = $bullet.index();\n\n          if (bulletIndex === current) {\n            $bullet.addClass(params.bulletActiveClass);\n          }\n\n          if (params.dynamicBullets) {\n            if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n              $bullet.addClass(params.bulletActiveClass + \"-main\");\n            }\n\n            if (bulletIndex === firstIndex) {\n              $bullet.prev().addClass(params.bulletActiveClass + \"-prev\").prev().addClass(params.bulletActiveClass + \"-prev-prev\");\n            }\n\n            if (bulletIndex === lastIndex) {\n              $bullet.next().addClass(params.bulletActiveClass + \"-next\").next().addClass(params.bulletActiveClass + \"-next-next\");\n            }\n          }\n        });\n      } else {\n        var $bullet = bullets.eq(current);\n        var bulletIndex = $bullet.index();\n        $bullet.addClass(params.bulletActiveClass);\n\n        if (params.dynamicBullets) {\n          var $firstDisplayedBullet = bullets.eq(firstIndex);\n          var $lastDisplayedBullet = bullets.eq(lastIndex);\n\n          for (var i = firstIndex; i <= lastIndex; i += 1) {\n            bullets.eq(i).addClass(params.bulletActiveClass + \"-main\");\n          }\n\n          if (swiper.params.loop) {\n            if (bulletIndex >= bullets.length - params.dynamicMainBullets) {\n              for (var _i = params.dynamicMainBullets; _i >= 0; _i -= 1) {\n                bullets.eq(bullets.length - _i).addClass(params.bulletActiveClass + \"-main\");\n              }\n\n              bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(params.bulletActiveClass + \"-prev\");\n            } else {\n              $firstDisplayedBullet.prev().addClass(params.bulletActiveClass + \"-prev\").prev().addClass(params.bulletActiveClass + \"-prev-prev\");\n              $lastDisplayedBullet.next().addClass(params.bulletActiveClass + \"-next\").next().addClass(params.bulletActiveClass + \"-next-next\");\n            }\n          } else {\n            $firstDisplayedBullet.prev().addClass(params.bulletActiveClass + \"-prev\").prev().addClass(params.bulletActiveClass + \"-prev-prev\");\n            $lastDisplayedBullet.next().addClass(params.bulletActiveClass + \"-next\").next().addClass(params.bulletActiveClass + \"-next-next\");\n          }\n        }\n      }\n\n      if (params.dynamicBullets) {\n        var dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n        var bulletsOffset = (swiper.pagination.bulletSize * dynamicBulletsLength - swiper.pagination.bulletSize) / 2 - midIndex * swiper.pagination.bulletSize;\n        var offsetProp = rtl ? 'right' : 'left';\n        bullets.css(swiper.isHorizontal() ? offsetProp : 'top', bulletsOffset + \"px\");\n      }\n    }\n\n    if (params.type === 'fraction') {\n      $el.find(classesToSelector(params.currentClass)).text(params.formatFractionCurrent(current + 1));\n      $el.find(classesToSelector(params.totalClass)).text(params.formatFractionTotal(total));\n    }\n\n    if (params.type === 'progressbar') {\n      var progressbarDirection;\n\n      if (params.progressbarOpposite) {\n        progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n      } else {\n        progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n      }\n\n      var scale = (current + 1) / total;\n      var scaleX = 1;\n      var scaleY = 1;\n\n      if (progressbarDirection === 'horizontal') {\n        scaleX = scale;\n      } else {\n        scaleY = scale;\n      }\n\n      $el.find(classesToSelector(params.progressbarFillClass)).transform(\"translate3d(0,0,0) scaleX(\" + scaleX + \") scaleY(\" + scaleY + \")\").transition(swiper.params.speed);\n    }\n\n    if (params.type === 'custom' && params.renderCustom) {\n      $el.html(params.renderCustom(swiper, current + 1, total));\n      swiper.emit('paginationRender', $el[0]);\n    } else {\n      swiper.emit('paginationUpdate', $el[0]);\n    }\n\n    if (swiper.params.watchOverflow && swiper.enabled) {\n      $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n    }\n  },\n  render: function render() {\n    // Render Container\n    var swiper = this;\n    var params = swiper.params.pagination;\n    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n    var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n    var $el = swiper.pagination.$el;\n    var paginationHTML = '';\n\n    if (params.type === 'bullets') {\n      var numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n      if (swiper.params.freeMode && !swiper.params.loop && numberOfBullets > slidesLength) {\n        numberOfBullets = slidesLength;\n      }\n\n      for (var i = 0; i < numberOfBullets; i += 1) {\n        if (params.renderBullet) {\n          paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n        } else {\n          paginationHTML += \"<\" + params.bulletElement + \" class=\\\"\" + params.bulletClass + \"\\\"></\" + params.bulletElement + \">\";\n        }\n      }\n\n      $el.html(paginationHTML);\n      swiper.pagination.bullets = $el.find(classesToSelector(params.bulletClass));\n    }\n\n    if (params.type === 'fraction') {\n      if (params.renderFraction) {\n        paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n      } else {\n        paginationHTML = \"<span class=\\\"\" + params.currentClass + \"\\\"></span>\" + ' / ' + (\"<span class=\\\"\" + params.totalClass + \"\\\"></span>\");\n      }\n\n      $el.html(paginationHTML);\n    }\n\n    if (params.type === 'progressbar') {\n      if (params.renderProgressbar) {\n        paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n      } else {\n        paginationHTML = \"<span class=\\\"\" + params.progressbarFillClass + \"\\\"></span>\";\n      }\n\n      $el.html(paginationHTML);\n    }\n\n    if (params.type !== 'custom') {\n      swiper.emit('paginationRender', swiper.pagination.$el[0]);\n    }\n  },\n  init: function init() {\n    var swiper = this;\n    swiper.params.pagination = createElementIfNotDefined(swiper.$el, swiper.params.pagination, swiper.params.createElements, {\n      el: 'swiper-pagination'\n    });\n    var params = swiper.params.pagination;\n    if (!params.el) return;\n    var $el = $(params.el);\n    if ($el.length === 0) return;\n\n    if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) {\n      $el = swiper.$el.find(params.el);\n    }\n\n    if (params.type === 'bullets' && params.clickable) {\n      $el.addClass(params.clickableClass);\n    }\n\n    $el.addClass(params.modifierClass + params.type);\n\n    if (params.type === 'bullets' && params.dynamicBullets) {\n      $el.addClass(\"\" + params.modifierClass + params.type + \"-dynamic\");\n      swiper.pagination.dynamicBulletIndex = 0;\n\n      if (params.dynamicMainBullets < 1) {\n        params.dynamicMainBullets = 1;\n      }\n    }\n\n    if (params.type === 'progressbar' && params.progressbarOpposite) {\n      $el.addClass(params.progressbarOppositeClass);\n    }\n\n    if (params.clickable) {\n      $el.on('click', classesToSelector(params.bulletClass), function onClick(e) {\n        e.preventDefault();\n        var index = $(this).index() * swiper.params.slidesPerGroup;\n        if (swiper.params.loop) index += swiper.loopedSlides;\n        swiper.slideTo(index);\n      });\n    }\n\n    extend(swiper.pagination, {\n      $el: $el,\n      el: $el[0]\n    });\n\n    if (!swiper.enabled) {\n      $el.addClass(params.lockClass);\n    }\n  },\n  destroy: function destroy() {\n    var swiper = this;\n    var params = swiper.params.pagination;\n    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n    var $el = swiper.pagination.$el;\n    $el.removeClass(params.hiddenClass);\n    $el.removeClass(params.modifierClass + params.type);\n    if (swiper.pagination.bullets) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n\n    if (params.clickable) {\n      $el.off('click', classesToSelector(params.bulletClass));\n    }\n  }\n};\nexport default {\n  name: 'pagination',\n  params: {\n    pagination: {\n      el: null,\n      bulletElement: 'span',\n      clickable: false,\n      hideOnClick: false,\n      renderBullet: null,\n      renderProgressbar: null,\n      renderFraction: null,\n      renderCustom: null,\n      progressbarOpposite: false,\n      type: 'bullets',\n      // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n      dynamicBullets: false,\n      dynamicMainBullets: 1,\n      formatFractionCurrent: function formatFractionCurrent(number) {\n        return number;\n      },\n      formatFractionTotal: function formatFractionTotal(number) {\n        return number;\n      },\n      bulletClass: 'swiper-pagination-bullet',\n      bulletActiveClass: 'swiper-pagination-bullet-active',\n      modifierClass: 'swiper-pagination-',\n      // NEW\n      currentClass: 'swiper-pagination-current',\n      totalClass: 'swiper-pagination-total',\n      hiddenClass: 'swiper-pagination-hidden',\n      progressbarFillClass: 'swiper-pagination-progressbar-fill',\n      progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',\n      clickableClass: 'swiper-pagination-clickable',\n      // NEW\n      lockClass: 'swiper-pagination-lock'\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      pagination: _extends({\n        dynamicBulletIndex: 0\n      }, Pagination)\n    });\n  },\n  on: {\n    init: function init(swiper) {\n      swiper.pagination.init();\n      swiper.pagination.render();\n      swiper.pagination.update();\n    },\n    activeIndexChange: function activeIndexChange(swiper) {\n      if (swiper.params.loop) {\n        swiper.pagination.update();\n      } else if (typeof swiper.snapIndex === 'undefined') {\n        swiper.pagination.update();\n      }\n    },\n    snapIndexChange: function snapIndexChange(swiper) {\n      if (!swiper.params.loop) {\n        swiper.pagination.update();\n      }\n    },\n    slidesLengthChange: function slidesLengthChange(swiper) {\n      if (swiper.params.loop) {\n        swiper.pagination.render();\n        swiper.pagination.update();\n      }\n    },\n    snapGridLengthChange: function snapGridLengthChange(swiper) {\n      if (!swiper.params.loop) {\n        swiper.pagination.render();\n        swiper.pagination.update();\n      }\n    },\n    destroy: function destroy(swiper) {\n      swiper.pagination.destroy();\n    },\n    'enable disable': function enableDisable(swiper) {\n      var $el = swiper.pagination.$el;\n\n      if ($el) {\n        $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.pagination.lockClass);\n      }\n    },\n    click: function click(swiper, e) {\n      var targetEl = e.target;\n\n      if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && swiper.pagination.$el.length > 0 && !$(targetEl).hasClass(swiper.params.pagination.bulletClass)) {\n        if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n        var isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);\n\n        if (isHidden === true) {\n          swiper.emit('paginationShow');\n        } else {\n          swiper.emit('paginationHide');\n        }\n\n        swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);\n      }\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport { getDocument } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport { extend, nextTick, bindModuleMethods, createElementIfNotDefined } from '../../utils/utils';\nvar Scrollbar = {\n  setTranslate: function setTranslate() {\n    var swiper = this;\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n    var scrollbar = swiper.scrollbar,\n        rtl = swiper.rtlTranslate,\n        progress = swiper.progress;\n    var dragSize = scrollbar.dragSize,\n        trackSize = scrollbar.trackSize,\n        $dragEl = scrollbar.$dragEl,\n        $el = scrollbar.$el;\n    var params = swiper.params.scrollbar;\n    var newSize = dragSize;\n    var newPos = (trackSize - dragSize) * progress;\n\n    if (rtl) {\n      newPos = -newPos;\n\n      if (newPos > 0) {\n        newSize = dragSize - newPos;\n        newPos = 0;\n      } else if (-newPos + dragSize > trackSize) {\n        newSize = trackSize + newPos;\n      }\n    } else if (newPos < 0) {\n      newSize = dragSize + newPos;\n      newPos = 0;\n    } else if (newPos + dragSize > trackSize) {\n      newSize = trackSize - newPos;\n    }\n\n    if (swiper.isHorizontal()) {\n      $dragEl.transform(\"translate3d(\" + newPos + \"px, 0, 0)\");\n      $dragEl[0].style.width = newSize + \"px\";\n    } else {\n      $dragEl.transform(\"translate3d(0px, \" + newPos + \"px, 0)\");\n      $dragEl[0].style.height = newSize + \"px\";\n    }\n\n    if (params.hide) {\n      clearTimeout(swiper.scrollbar.timeout);\n      $el[0].style.opacity = 1;\n      swiper.scrollbar.timeout = setTimeout(function () {\n        $el[0].style.opacity = 0;\n        $el.transition(400);\n      }, 1000);\n    }\n  },\n  setTransition: function setTransition(duration) {\n    var swiper = this;\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n    swiper.scrollbar.$dragEl.transition(duration);\n  },\n  updateSize: function updateSize() {\n    var swiper = this;\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n    var scrollbar = swiper.scrollbar;\n    var $dragEl = scrollbar.$dragEl,\n        $el = scrollbar.$el;\n    $dragEl[0].style.width = '';\n    $dragEl[0].style.height = '';\n    var trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n    var divider = swiper.size / swiper.virtualSize;\n    var moveDivider = divider * (trackSize / swiper.size);\n    var dragSize;\n\n    if (swiper.params.scrollbar.dragSize === 'auto') {\n      dragSize = trackSize * divider;\n    } else {\n      dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n    }\n\n    if (swiper.isHorizontal()) {\n      $dragEl[0].style.width = dragSize + \"px\";\n    } else {\n      $dragEl[0].style.height = dragSize + \"px\";\n    }\n\n    if (divider >= 1) {\n      $el[0].style.display = 'none';\n    } else {\n      $el[0].style.display = '';\n    }\n\n    if (swiper.params.scrollbar.hide) {\n      $el[0].style.opacity = 0;\n    }\n\n    extend(scrollbar, {\n      trackSize: trackSize,\n      divider: divider,\n      moveDivider: moveDivider,\n      dragSize: dragSize\n    });\n\n    if (swiper.params.watchOverflow && swiper.enabled) {\n      scrollbar.$el[swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n    }\n  },\n  getPointerPosition: function getPointerPosition(e) {\n    var swiper = this;\n\n    if (swiper.isHorizontal()) {\n      return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientX : e.clientX;\n    }\n\n    return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientY : e.clientY;\n  },\n  setDragPosition: function setDragPosition(e) {\n    var swiper = this;\n    var scrollbar = swiper.scrollbar,\n        rtl = swiper.rtlTranslate;\n    var $el = scrollbar.$el,\n        dragSize = scrollbar.dragSize,\n        trackSize = scrollbar.trackSize,\n        dragStartPos = scrollbar.dragStartPos;\n    var positionRatio;\n    positionRatio = (scrollbar.getPointerPosition(e) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n    positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n\n    if (rtl) {\n      positionRatio = 1 - positionRatio;\n    }\n\n    var position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n    swiper.updateProgress(position);\n    swiper.setTranslate(position);\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  },\n  onDragStart: function onDragStart(e) {\n    var swiper = this;\n    var params = swiper.params.scrollbar;\n    var scrollbar = swiper.scrollbar,\n        $wrapperEl = swiper.$wrapperEl;\n    var $el = scrollbar.$el,\n        $dragEl = scrollbar.$dragEl;\n    swiper.scrollbar.isTouched = true;\n    swiper.scrollbar.dragStartPos = e.target === $dragEl[0] || e.target === $dragEl ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n    e.preventDefault();\n    e.stopPropagation();\n    $wrapperEl.transition(100);\n    $dragEl.transition(100);\n    scrollbar.setDragPosition(e);\n    clearTimeout(swiper.scrollbar.dragTimeout);\n    $el.transition(0);\n\n    if (params.hide) {\n      $el.css('opacity', 1);\n    }\n\n    if (swiper.params.cssMode) {\n      swiper.$wrapperEl.css('scroll-snap-type', 'none');\n    }\n\n    swiper.emit('scrollbarDragStart', e);\n  },\n  onDragMove: function onDragMove(e) {\n    var swiper = this;\n    var scrollbar = swiper.scrollbar,\n        $wrapperEl = swiper.$wrapperEl;\n    var $el = scrollbar.$el,\n        $dragEl = scrollbar.$dragEl;\n    if (!swiper.scrollbar.isTouched) return;\n    if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n    scrollbar.setDragPosition(e);\n    $wrapperEl.transition(0);\n    $el.transition(0);\n    $dragEl.transition(0);\n    swiper.emit('scrollbarDragMove', e);\n  },\n  onDragEnd: function onDragEnd(e) {\n    var swiper = this;\n    var params = swiper.params.scrollbar;\n    var scrollbar = swiper.scrollbar,\n        $wrapperEl = swiper.$wrapperEl;\n    var $el = scrollbar.$el;\n    if (!swiper.scrollbar.isTouched) return;\n    swiper.scrollbar.isTouched = false;\n\n    if (swiper.params.cssMode) {\n      swiper.$wrapperEl.css('scroll-snap-type', '');\n      $wrapperEl.transition('');\n    }\n\n    if (params.hide) {\n      clearTimeout(swiper.scrollbar.dragTimeout);\n      swiper.scrollbar.dragTimeout = nextTick(function () {\n        $el.css('opacity', 0);\n        $el.transition(400);\n      }, 1000);\n    }\n\n    swiper.emit('scrollbarDragEnd', e);\n\n    if (params.snapOnRelease) {\n      swiper.slideToClosest();\n    }\n  },\n  enableDraggable: function enableDraggable() {\n    var swiper = this;\n    if (!swiper.params.scrollbar.el) return;\n    var document = getDocument();\n    var scrollbar = swiper.scrollbar,\n        touchEventsTouch = swiper.touchEventsTouch,\n        touchEventsDesktop = swiper.touchEventsDesktop,\n        params = swiper.params,\n        support = swiper.support;\n    var $el = scrollbar.$el;\n    var target = $el[0];\n    var activeListener = support.passiveListener && params.passiveListeners ? {\n      passive: false,\n      capture: false\n    } : false;\n    var passiveListener = support.passiveListener && params.passiveListeners ? {\n      passive: true,\n      capture: false\n    } : false;\n    if (!target) return;\n\n    if (!support.touch) {\n      target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n      document.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n      document.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n    } else {\n      target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n      target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n      target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n    }\n  },\n  disableDraggable: function disableDraggable() {\n    var swiper = this;\n    if (!swiper.params.scrollbar.el) return;\n    var document = getDocument();\n    var scrollbar = swiper.scrollbar,\n        touchEventsTouch = swiper.touchEventsTouch,\n        touchEventsDesktop = swiper.touchEventsDesktop,\n        params = swiper.params,\n        support = swiper.support;\n    var $el = scrollbar.$el;\n    var target = $el[0];\n    var activeListener = support.passiveListener && params.passiveListeners ? {\n      passive: false,\n      capture: false\n    } : false;\n    var passiveListener = support.passiveListener && params.passiveListeners ? {\n      passive: true,\n      capture: false\n    } : false;\n    if (!target) return;\n\n    if (!support.touch) {\n      target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n      document.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n      document.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n    } else {\n      target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n      target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n      target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n    }\n  },\n  init: function init() {\n    var swiper = this;\n    var scrollbar = swiper.scrollbar,\n        $swiperEl = swiper.$el;\n    swiper.params.scrollbar = createElementIfNotDefined($swiperEl, swiper.params.scrollbar, swiper.params.createElements, {\n      el: 'swiper-scrollbar'\n    });\n    var params = swiper.params.scrollbar;\n    if (!params.el) return;\n    var $el = $(params.el);\n\n    if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {\n      $el = $swiperEl.find(params.el);\n    }\n\n    var $dragEl = $el.find(\".\" + swiper.params.scrollbar.dragClass);\n\n    if ($dragEl.length === 0) {\n      $dragEl = $(\"<div class=\\\"\" + swiper.params.scrollbar.dragClass + \"\\\"></div>\");\n      $el.append($dragEl);\n    }\n\n    extend(scrollbar, {\n      $el: $el,\n      el: $el[0],\n      $dragEl: $dragEl,\n      dragEl: $dragEl[0]\n    });\n\n    if (params.draggable) {\n      scrollbar.enableDraggable();\n    }\n\n    if ($el) {\n      $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n    }\n  },\n  destroy: function destroy() {\n    var swiper = this;\n    swiper.scrollbar.disableDraggable();\n  }\n};\nexport default {\n  name: 'scrollbar',\n  params: {\n    scrollbar: {\n      el: null,\n      dragSize: 'auto',\n      hide: false,\n      draggable: false,\n      snapOnRelease: true,\n      lockClass: 'swiper-scrollbar-lock',\n      dragClass: 'swiper-scrollbar-drag'\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      scrollbar: _extends({\n        isTouched: false,\n        timeout: null,\n        dragTimeout: null\n      }, Scrollbar)\n    });\n  },\n  on: {\n    init: function init(swiper) {\n      swiper.scrollbar.init();\n      swiper.scrollbar.updateSize();\n      swiper.scrollbar.setTranslate();\n    },\n    update: function update(swiper) {\n      swiper.scrollbar.updateSize();\n    },\n    resize: function resize(swiper) {\n      swiper.scrollbar.updateSize();\n    },\n    observerUpdate: function observerUpdate(swiper) {\n      swiper.scrollbar.updateSize();\n    },\n    setTranslate: function setTranslate(swiper) {\n      swiper.scrollbar.setTranslate();\n    },\n    setTransition: function setTransition(swiper, duration) {\n      swiper.scrollbar.setTransition(duration);\n    },\n    'enable disable': function enableDisable(swiper) {\n      var $el = swiper.scrollbar.$el;\n\n      if ($el) {\n        $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n      }\n    },\n    destroy: function destroy(swiper) {\n      swiper.scrollbar.destroy();\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport $ from '../../utils/dom';\nimport { bindModuleMethods } from '../../utils/utils';\nvar Parallax = {\n  setTransform: function setTransform(el, progress) {\n    var swiper = this;\n    var rtl = swiper.rtl;\n    var $el = $(el);\n    var rtlFactor = rtl ? -1 : 1;\n    var p = $el.attr('data-swiper-parallax') || '0';\n    var x = $el.attr('data-swiper-parallax-x');\n    var y = $el.attr('data-swiper-parallax-y');\n    var scale = $el.attr('data-swiper-parallax-scale');\n    var opacity = $el.attr('data-swiper-parallax-opacity');\n\n    if (x || y) {\n      x = x || '0';\n      y = y || '0';\n    } else if (swiper.isHorizontal()) {\n      x = p;\n      y = '0';\n    } else {\n      y = p;\n      x = '0';\n    }\n\n    if (x.indexOf('%') >= 0) {\n      x = parseInt(x, 10) * progress * rtlFactor + \"%\";\n    } else {\n      x = x * progress * rtlFactor + \"px\";\n    }\n\n    if (y.indexOf('%') >= 0) {\n      y = parseInt(y, 10) * progress + \"%\";\n    } else {\n      y = y * progress + \"px\";\n    }\n\n    if (typeof opacity !== 'undefined' && opacity !== null) {\n      var currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));\n      $el[0].style.opacity = currentOpacity;\n    }\n\n    if (typeof scale === 'undefined' || scale === null) {\n      $el.transform(\"translate3d(\" + x + \", \" + y + \", 0px)\");\n    } else {\n      var currentScale = scale - (scale - 1) * (1 - Math.abs(progress));\n      $el.transform(\"translate3d(\" + x + \", \" + y + \", 0px) scale(\" + currentScale + \")\");\n    }\n  },\n  setTranslate: function setTranslate() {\n    var swiper = this;\n    var $el = swiper.$el,\n        slides = swiper.slides,\n        progress = swiper.progress,\n        snapGrid = swiper.snapGrid;\n    $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (el) {\n      swiper.parallax.setTransform(el, progress);\n    });\n    slides.each(function (slideEl, slideIndex) {\n      var slideProgress = slideEl.progress;\n\n      if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n        slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);\n      }\n\n      slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n      $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (el) {\n        swiper.parallax.setTransform(el, slideProgress);\n      });\n    });\n  },\n  setTransition: function setTransition(duration) {\n    if (duration === void 0) {\n      duration = this.params.speed;\n    }\n\n    var swiper = this;\n    var $el = swiper.$el;\n    $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (parallaxEl) {\n      var $parallaxEl = $(parallaxEl);\n      var parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n      if (duration === 0) parallaxDuration = 0;\n      $parallaxEl.transition(parallaxDuration);\n    });\n  }\n};\nexport default {\n  name: 'parallax',\n  params: {\n    parallax: {\n      enabled: false\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      parallax: _extends({}, Parallax)\n    });\n  },\n  on: {\n    beforeInit: function beforeInit(swiper) {\n      if (!swiper.params.parallax.enabled) return;\n      swiper.params.watchSlidesProgress = true;\n      swiper.originalParams.watchSlidesProgress = true;\n    },\n    init: function init(swiper) {\n      if (!swiper.params.parallax.enabled) return;\n      swiper.parallax.setTranslate();\n    },\n    setTranslate: function setTranslate(swiper) {\n      if (!swiper.params.parallax.enabled) return;\n      swiper.parallax.setTranslate();\n    },\n    setTransition: function setTransition(swiper, duration) {\n      if (!swiper.params.parallax.enabled) return;\n      swiper.parallax.setTransition(duration);\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport { getWindow } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport { bindModuleMethods, getTranslate } from '../../utils/utils';\nvar Zoom = {\n  // Calc Scale From Multi-touches\n  getDistanceBetweenTouches: function getDistanceBetweenTouches(e) {\n    if (e.targetTouches.length < 2) return 1;\n    var x1 = e.targetTouches[0].pageX;\n    var y1 = e.targetTouches[0].pageY;\n    var x2 = e.targetTouches[1].pageX;\n    var y2 = e.targetTouches[1].pageY;\n    var distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n    return distance;\n  },\n  // Events\n  onGestureStart: function onGestureStart(e) {\n    var swiper = this;\n    var support = swiper.support;\n    var params = swiper.params.zoom;\n    var zoom = swiper.zoom;\n    var gesture = zoom.gesture;\n    zoom.fakeGestureTouched = false;\n    zoom.fakeGestureMoved = false;\n\n    if (!support.gestures) {\n      if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) {\n        return;\n      }\n\n      zoom.fakeGestureTouched = true;\n      gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);\n    }\n\n    if (!gesture.$slideEl || !gesture.$slideEl.length) {\n      gesture.$slideEl = $(e.target).closest(\".\" + swiper.params.slideClass);\n      if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n      gesture.$imageWrapEl = gesture.$imageEl.parent(\".\" + params.containerClass);\n      gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n\n      if (gesture.$imageWrapEl.length === 0) {\n        gesture.$imageEl = undefined;\n        return;\n      }\n    }\n\n    if (gesture.$imageEl) {\n      gesture.$imageEl.transition(0);\n    }\n\n    swiper.zoom.isScaling = true;\n  },\n  onGestureChange: function onGestureChange(e) {\n    var swiper = this;\n    var support = swiper.support;\n    var params = swiper.params.zoom;\n    var zoom = swiper.zoom;\n    var gesture = zoom.gesture;\n\n    if (!support.gestures) {\n      if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) {\n        return;\n      }\n\n      zoom.fakeGestureMoved = true;\n      gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);\n    }\n\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) {\n      if (e.type === 'gesturechange') zoom.onGestureStart(e);\n      return;\n    }\n\n    if (support.gestures) {\n      zoom.scale = e.scale * zoom.currentScale;\n    } else {\n      zoom.scale = gesture.scaleMove / gesture.scaleStart * zoom.currentScale;\n    }\n\n    if (zoom.scale > gesture.maxRatio) {\n      zoom.scale = gesture.maxRatio - 1 + Math.pow(zoom.scale - gesture.maxRatio + 1, 0.5);\n    }\n\n    if (zoom.scale < params.minRatio) {\n      zoom.scale = params.minRatio + 1 - Math.pow(params.minRatio - zoom.scale + 1, 0.5);\n    }\n\n    gesture.$imageEl.transform(\"translate3d(0,0,0) scale(\" + zoom.scale + \")\");\n  },\n  onGestureEnd: function onGestureEnd(e) {\n    var swiper = this;\n    var device = swiper.device;\n    var support = swiper.support;\n    var params = swiper.params.zoom;\n    var zoom = swiper.zoom;\n    var gesture = zoom.gesture;\n\n    if (!support.gestures) {\n      if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {\n        return;\n      }\n\n      if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2 && !device.android) {\n        return;\n      }\n\n      zoom.fakeGestureTouched = false;\n      zoom.fakeGestureMoved = false;\n    }\n\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n    zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n    gesture.$imageEl.transition(swiper.params.speed).transform(\"translate3d(0,0,0) scale(\" + zoom.scale + \")\");\n    zoom.currentScale = zoom.scale;\n    zoom.isScaling = false;\n    if (zoom.scale === 1) gesture.$slideEl = undefined;\n  },\n  onTouchStart: function onTouchStart(e) {\n    var swiper = this;\n    var device = swiper.device;\n    var zoom = swiper.zoom;\n    var gesture = zoom.gesture,\n        image = zoom.image;\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n    if (image.isTouched) return;\n    if (device.android && e.cancelable) e.preventDefault();\n    image.isTouched = true;\n    image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n    image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n  },\n  onTouchMove: function onTouchMove(e) {\n    var swiper = this;\n    var zoom = swiper.zoom;\n    var gesture = zoom.gesture,\n        image = zoom.image,\n        velocity = zoom.velocity;\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n    swiper.allowClick = false;\n    if (!image.isTouched || !gesture.$slideEl) return;\n\n    if (!image.isMoved) {\n      image.width = gesture.$imageEl[0].offsetWidth;\n      image.height = gesture.$imageEl[0].offsetHeight;\n      image.startX = getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n      image.startY = getTranslate(gesture.$imageWrapEl[0], 'y') || 0;\n      gesture.slideWidth = gesture.$slideEl[0].offsetWidth;\n      gesture.slideHeight = gesture.$slideEl[0].offsetHeight;\n      gesture.$imageWrapEl.transition(0);\n    } // Define if we need image drag\n\n\n    var scaledWidth = image.width * zoom.scale;\n    var scaledHeight = image.height * zoom.scale;\n    if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n    image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n    image.maxX = -image.minX;\n    image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n    image.maxY = -image.minY;\n    image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n    image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n\n    if (!image.isMoved && !zoom.isScaling) {\n      if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {\n        image.isTouched = false;\n        return;\n      }\n\n      if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {\n        image.isTouched = false;\n        return;\n      }\n    }\n\n    if (e.cancelable) {\n      e.preventDefault();\n    }\n\n    e.stopPropagation();\n    image.isMoved = true;\n    image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX;\n    image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY;\n\n    if (image.currentX < image.minX) {\n      image.currentX = image.minX + 1 - Math.pow(image.minX - image.currentX + 1, 0.8);\n    }\n\n    if (image.currentX > image.maxX) {\n      image.currentX = image.maxX - 1 + Math.pow(image.currentX - image.maxX + 1, 0.8);\n    }\n\n    if (image.currentY < image.minY) {\n      image.currentY = image.minY + 1 - Math.pow(image.minY - image.currentY + 1, 0.8);\n    }\n\n    if (image.currentY > image.maxY) {\n      image.currentY = image.maxY - 1 + Math.pow(image.currentY - image.maxY + 1, 0.8);\n    } // Velocity\n\n\n    if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n    if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n    if (!velocity.prevTime) velocity.prevTime = Date.now();\n    velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n    velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n    if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n    if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n    velocity.prevPositionX = image.touchesCurrent.x;\n    velocity.prevPositionY = image.touchesCurrent.y;\n    velocity.prevTime = Date.now();\n    gesture.$imageWrapEl.transform(\"translate3d(\" + image.currentX + \"px, \" + image.currentY + \"px,0)\");\n  },\n  onTouchEnd: function onTouchEnd() {\n    var swiper = this;\n    var zoom = swiper.zoom;\n    var gesture = zoom.gesture,\n        image = zoom.image,\n        velocity = zoom.velocity;\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n    if (!image.isTouched || !image.isMoved) {\n      image.isTouched = false;\n      image.isMoved = false;\n      return;\n    }\n\n    image.isTouched = false;\n    image.isMoved = false;\n    var momentumDurationX = 300;\n    var momentumDurationY = 300;\n    var momentumDistanceX = velocity.x * momentumDurationX;\n    var newPositionX = image.currentX + momentumDistanceX;\n    var momentumDistanceY = velocity.y * momentumDurationY;\n    var newPositionY = image.currentY + momentumDistanceY; // Fix duration\n\n    if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n    if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n    var momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n    image.currentX = newPositionX;\n    image.currentY = newPositionY; // Define if we need image drag\n\n    var scaledWidth = image.width * zoom.scale;\n    var scaledHeight = image.height * zoom.scale;\n    image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n    image.maxX = -image.minX;\n    image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n    image.maxY = -image.minY;\n    image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n    image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n    gesture.$imageWrapEl.transition(momentumDuration).transform(\"translate3d(\" + image.currentX + \"px, \" + image.currentY + \"px,0)\");\n  },\n  onTransitionEnd: function onTransitionEnd() {\n    var swiper = this;\n    var zoom = swiper.zoom;\n    var gesture = zoom.gesture;\n\n    if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n      if (gesture.$imageEl) {\n        gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n      }\n\n      if (gesture.$imageWrapEl) {\n        gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n      }\n\n      zoom.scale = 1;\n      zoom.currentScale = 1;\n      gesture.$slideEl = undefined;\n      gesture.$imageEl = undefined;\n      gesture.$imageWrapEl = undefined;\n    }\n  },\n  // Toggle Zoom\n  toggle: function toggle(e) {\n    var swiper = this;\n    var zoom = swiper.zoom;\n\n    if (zoom.scale && zoom.scale !== 1) {\n      // Zoom Out\n      zoom.out();\n    } else {\n      // Zoom In\n      zoom.in(e);\n    }\n  },\n  in: function _in(e) {\n    var swiper = this;\n    var window = getWindow();\n    var zoom = swiper.zoom;\n    var params = swiper.params.zoom;\n    var gesture = zoom.gesture,\n        image = zoom.image;\n\n    if (!gesture.$slideEl) {\n      if (e && e.target) {\n        gesture.$slideEl = $(e.target).closest(\".\" + swiper.params.slideClass);\n      }\n\n      if (!gesture.$slideEl) {\n        if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n          gesture.$slideEl = swiper.$wrapperEl.children(\".\" + swiper.params.slideActiveClass);\n        } else {\n          gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n        }\n      }\n\n      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n      gesture.$imageWrapEl = gesture.$imageEl.parent(\".\" + params.containerClass);\n    }\n\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return;\n    gesture.$slideEl.addClass(\"\" + params.zoomedSlideClass);\n    var touchX;\n    var touchY;\n    var offsetX;\n    var offsetY;\n    var diffX;\n    var diffY;\n    var translateX;\n    var translateY;\n    var imageWidth;\n    var imageHeight;\n    var scaledWidth;\n    var scaledHeight;\n    var translateMinX;\n    var translateMinY;\n    var translateMaxX;\n    var translateMaxY;\n    var slideWidth;\n    var slideHeight;\n\n    if (typeof image.touchesStart.x === 'undefined' && e) {\n      touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;\n      touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;\n    } else {\n      touchX = image.touchesStart.x;\n      touchY = image.touchesStart.y;\n    }\n\n    zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n    zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n\n    if (e) {\n      slideWidth = gesture.$slideEl[0].offsetWidth;\n      slideHeight = gesture.$slideEl[0].offsetHeight;\n      offsetX = gesture.$slideEl.offset().left + window.scrollX;\n      offsetY = gesture.$slideEl.offset().top + window.scrollY;\n      diffX = offsetX + slideWidth / 2 - touchX;\n      diffY = offsetY + slideHeight / 2 - touchY;\n      imageWidth = gesture.$imageEl[0].offsetWidth;\n      imageHeight = gesture.$imageEl[0].offsetHeight;\n      scaledWidth = imageWidth * zoom.scale;\n      scaledHeight = imageHeight * zoom.scale;\n      translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n      translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n      translateMaxX = -translateMinX;\n      translateMaxY = -translateMinY;\n      translateX = diffX * zoom.scale;\n      translateY = diffY * zoom.scale;\n\n      if (translateX < translateMinX) {\n        translateX = translateMinX;\n      }\n\n      if (translateX > translateMaxX) {\n        translateX = translateMaxX;\n      }\n\n      if (translateY < translateMinY) {\n        translateY = translateMinY;\n      }\n\n      if (translateY > translateMaxY) {\n        translateY = translateMaxY;\n      }\n    } else {\n      translateX = 0;\n      translateY = 0;\n    }\n\n    gesture.$imageWrapEl.transition(300).transform(\"translate3d(\" + translateX + \"px, \" + translateY + \"px,0)\");\n    gesture.$imageEl.transition(300).transform(\"translate3d(0,0,0) scale(\" + zoom.scale + \")\");\n  },\n  out: function out() {\n    var swiper = this;\n    var zoom = swiper.zoom;\n    var params = swiper.params.zoom;\n    var gesture = zoom.gesture;\n\n    if (!gesture.$slideEl) {\n      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n        gesture.$slideEl = swiper.$wrapperEl.children(\".\" + swiper.params.slideActiveClass);\n      } else {\n        gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n      }\n\n      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n      gesture.$imageWrapEl = gesture.$imageEl.parent(\".\" + params.containerClass);\n    }\n\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return;\n    zoom.scale = 1;\n    zoom.currentScale = 1;\n    gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');\n    gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');\n    gesture.$slideEl.removeClass(\"\" + params.zoomedSlideClass);\n    gesture.$slideEl = undefined;\n  },\n  toggleGestures: function toggleGestures(method) {\n    var swiper = this;\n    var zoom = swiper.zoom;\n    var selector = zoom.slideSelector,\n        passive = zoom.passiveListener;\n    swiper.$wrapperEl[method]('gesturestart', selector, zoom.onGestureStart, passive);\n    swiper.$wrapperEl[method]('gesturechange', selector, zoom.onGestureChange, passive);\n    swiper.$wrapperEl[method]('gestureend', selector, zoom.onGestureEnd, passive);\n  },\n  enableGestures: function enableGestures() {\n    if (this.zoom.gesturesEnabled) return;\n    this.zoom.gesturesEnabled = true;\n    this.zoom.toggleGestures('on');\n  },\n  disableGestures: function disableGestures() {\n    if (!this.zoom.gesturesEnabled) return;\n    this.zoom.gesturesEnabled = false;\n    this.zoom.toggleGestures('off');\n  },\n  // Attach/Detach Events\n  enable: function enable() {\n    var swiper = this;\n    var support = swiper.support;\n    var zoom = swiper.zoom;\n    if (zoom.enabled) return;\n    zoom.enabled = true;\n    var passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? {\n      passive: true,\n      capture: false\n    } : false;\n    var activeListenerWithCapture = support.passiveListener ? {\n      passive: false,\n      capture: true\n    } : true;\n    var slideSelector = \".\" + swiper.params.slideClass;\n    swiper.zoom.passiveListener = passiveListener;\n    swiper.zoom.slideSelector = slideSelector; // Scale image\n\n    if (support.gestures) {\n      swiper.$wrapperEl.on(swiper.touchEvents.start, swiper.zoom.enableGestures, passiveListener);\n      swiper.$wrapperEl.on(swiper.touchEvents.end, swiper.zoom.disableGestures, passiveListener);\n    } else if (swiper.touchEvents.start === 'touchstart') {\n      swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);\n      swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);\n      swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);\n\n      if (swiper.touchEvents.cancel) {\n        swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);\n      }\n    } // Move image\n\n\n    swiper.$wrapperEl.on(swiper.touchEvents.move, \".\" + swiper.params.zoom.containerClass, zoom.onTouchMove, activeListenerWithCapture);\n  },\n  disable: function disable() {\n    var swiper = this;\n    var zoom = swiper.zoom;\n    if (!zoom.enabled) return;\n    var support = swiper.support;\n    swiper.zoom.enabled = false;\n    var passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? {\n      passive: true,\n      capture: false\n    } : false;\n    var activeListenerWithCapture = support.passiveListener ? {\n      passive: false,\n      capture: true\n    } : true;\n    var slideSelector = \".\" + swiper.params.slideClass; // Scale image\n\n    if (support.gestures) {\n      swiper.$wrapperEl.off(swiper.touchEvents.start, swiper.zoom.enableGestures, passiveListener);\n      swiper.$wrapperEl.off(swiper.touchEvents.end, swiper.zoom.disableGestures, passiveListener);\n    } else if (swiper.touchEvents.start === 'touchstart') {\n      swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);\n      swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);\n      swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);\n\n      if (swiper.touchEvents.cancel) {\n        swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);\n      }\n    } // Move image\n\n\n    swiper.$wrapperEl.off(swiper.touchEvents.move, \".\" + swiper.params.zoom.containerClass, zoom.onTouchMove, activeListenerWithCapture);\n  }\n};\nexport default {\n  name: 'zoom',\n  params: {\n    zoom: {\n      enabled: false,\n      maxRatio: 3,\n      minRatio: 1,\n      toggle: true,\n      containerClass: 'swiper-zoom-container',\n      zoomedSlideClass: 'swiper-slide-zoomed'\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      zoom: _extends({\n        enabled: false,\n        scale: 1,\n        currentScale: 1,\n        isScaling: false,\n        gesture: {\n          $slideEl: undefined,\n          slideWidth: undefined,\n          slideHeight: undefined,\n          $imageEl: undefined,\n          $imageWrapEl: undefined,\n          maxRatio: 3\n        },\n        image: {\n          isTouched: undefined,\n          isMoved: undefined,\n          currentX: undefined,\n          currentY: undefined,\n          minX: undefined,\n          minY: undefined,\n          maxX: undefined,\n          maxY: undefined,\n          width: undefined,\n          height: undefined,\n          startX: undefined,\n          startY: undefined,\n          touchesStart: {},\n          touchesCurrent: {}\n        },\n        velocity: {\n          x: undefined,\n          y: undefined,\n          prevPositionX: undefined,\n          prevPositionY: undefined,\n          prevTime: undefined\n        }\n      }, Zoom)\n    });\n    var scale = 1;\n    Object.defineProperty(swiper.zoom, 'scale', {\n      get: function get() {\n        return scale;\n      },\n      set: function set(value) {\n        if (scale !== value) {\n          var imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined;\n          var slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined;\n          swiper.emit('zoomChange', value, imageEl, slideEl);\n        }\n\n        scale = value;\n      }\n    });\n  },\n  on: {\n    init: function init(swiper) {\n      if (swiper.params.zoom.enabled) {\n        swiper.zoom.enable();\n      }\n    },\n    destroy: function destroy(swiper) {\n      swiper.zoom.disable();\n    },\n    touchStart: function touchStart(swiper, e) {\n      if (!swiper.zoom.enabled) return;\n      swiper.zoom.onTouchStart(e);\n    },\n    touchEnd: function touchEnd(swiper, e) {\n      if (!swiper.zoom.enabled) return;\n      swiper.zoom.onTouchEnd(e);\n    },\n    doubleTap: function doubleTap(swiper, e) {\n      if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n        swiper.zoom.toggle(e);\n      }\n    },\n    transitionEnd: function transitionEnd(swiper) {\n      if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n        swiper.zoom.onTransitionEnd();\n      }\n    },\n    slideChange: function slideChange(swiper) {\n      if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n        swiper.zoom.onTransitionEnd();\n      }\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport { getWindow } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport { bindModuleMethods } from '../../utils/utils';\nvar Lazy = {\n  loadInSlide: function loadInSlide(index, loadInDuplicate) {\n    if (loadInDuplicate === void 0) {\n      loadInDuplicate = true;\n    }\n\n    var swiper = this;\n    var params = swiper.params.lazy;\n    if (typeof index === 'undefined') return;\n    if (swiper.slides.length === 0) return;\n    var isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n    var $slideEl = isVirtual ? swiper.$wrapperEl.children(\".\" + swiper.params.slideClass + \"[data-swiper-slide-index=\\\"\" + index + \"\\\"]\") : swiper.slides.eq(index);\n    var $images = $slideEl.find(\".\" + params.elementClass + \":not(.\" + params.loadedClass + \"):not(.\" + params.loadingClass + \")\");\n\n    if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {\n      $images.push($slideEl[0]);\n    }\n\n    if ($images.length === 0) return;\n    $images.each(function (imageEl) {\n      var $imageEl = $(imageEl);\n      $imageEl.addClass(params.loadingClass);\n      var background = $imageEl.attr('data-background');\n      var src = $imageEl.attr('data-src');\n      var srcset = $imageEl.attr('data-srcset');\n      var sizes = $imageEl.attr('data-sizes');\n      var $pictureEl = $imageEl.parent('picture');\n      swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, function () {\n        if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper && !swiper.params || swiper.destroyed) return;\n\n        if (background) {\n          $imageEl.css('background-image', \"url(\\\"\" + background + \"\\\")\");\n          $imageEl.removeAttr('data-background');\n        } else {\n          if (srcset) {\n            $imageEl.attr('srcset', srcset);\n            $imageEl.removeAttr('data-srcset');\n          }\n\n          if (sizes) {\n            $imageEl.attr('sizes', sizes);\n            $imageEl.removeAttr('data-sizes');\n          }\n\n          if ($pictureEl.length) {\n            $pictureEl.children('source').each(function (sourceEl) {\n              var $source = $(sourceEl);\n\n              if ($source.attr('data-srcset')) {\n                $source.attr('srcset', $source.attr('data-srcset'));\n                $source.removeAttr('data-srcset');\n              }\n            });\n          }\n\n          if (src) {\n            $imageEl.attr('src', src);\n            $imageEl.removeAttr('data-src');\n          }\n        }\n\n        $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);\n        $slideEl.find(\".\" + params.preloaderClass).remove();\n\n        if (swiper.params.loop && loadInDuplicate) {\n          var slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n\n          if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n            var originalSlide = swiper.$wrapperEl.children(\"[data-swiper-slide-index=\\\"\" + slideOriginalIndex + \"\\\"]:not(.\" + swiper.params.slideDuplicateClass + \")\");\n            swiper.lazy.loadInSlide(originalSlide.index(), false);\n          } else {\n            var duplicatedSlide = swiper.$wrapperEl.children(\".\" + swiper.params.slideDuplicateClass + \"[data-swiper-slide-index=\\\"\" + slideOriginalIndex + \"\\\"]\");\n            swiper.lazy.loadInSlide(duplicatedSlide.index(), false);\n          }\n        }\n\n        swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n\n        if (swiper.params.autoHeight) {\n          swiper.updateAutoHeight();\n        }\n      });\n      swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n    });\n  },\n  load: function load() {\n    var swiper = this;\n    var $wrapperEl = swiper.$wrapperEl,\n        swiperParams = swiper.params,\n        slides = swiper.slides,\n        activeIndex = swiper.activeIndex;\n    var isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n    var params = swiperParams.lazy;\n    var slidesPerView = swiperParams.slidesPerView;\n\n    if (slidesPerView === 'auto') {\n      slidesPerView = 0;\n    }\n\n    function slideExist(index) {\n      if (isVirtual) {\n        if ($wrapperEl.children(\".\" + swiperParams.slideClass + \"[data-swiper-slide-index=\\\"\" + index + \"\\\"]\").length) {\n          return true;\n        }\n      } else if (slides[index]) return true;\n\n      return false;\n    }\n\n    function slideIndex(slideEl) {\n      if (isVirtual) {\n        return $(slideEl).attr('data-swiper-slide-index');\n      }\n\n      return $(slideEl).index();\n    }\n\n    if (!swiper.lazy.initialImageLoaded) swiper.lazy.initialImageLoaded = true;\n\n    if (swiper.params.watchSlidesVisibility) {\n      $wrapperEl.children(\".\" + swiperParams.slideVisibleClass).each(function (slideEl) {\n        var index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n        swiper.lazy.loadInSlide(index);\n      });\n    } else if (slidesPerView > 1) {\n      for (var i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n        if (slideExist(i)) swiper.lazy.loadInSlide(i);\n      }\n    } else {\n      swiper.lazy.loadInSlide(activeIndex);\n    }\n\n    if (params.loadPrevNext) {\n      if (slidesPerView > 1 || params.loadPrevNextAmount && params.loadPrevNextAmount > 1) {\n        var amount = params.loadPrevNextAmount;\n        var spv = slidesPerView;\n        var maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n        var minIndex = Math.max(activeIndex - Math.max(spv, amount), 0); // Next Slides\n\n        for (var _i = activeIndex + slidesPerView; _i < maxIndex; _i += 1) {\n          if (slideExist(_i)) swiper.lazy.loadInSlide(_i);\n        } // Prev Slides\n\n\n        for (var _i2 = minIndex; _i2 < activeIndex; _i2 += 1) {\n          if (slideExist(_i2)) swiper.lazy.loadInSlide(_i2);\n        }\n      } else {\n        var nextSlide = $wrapperEl.children(\".\" + swiperParams.slideNextClass);\n        if (nextSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(nextSlide));\n        var prevSlide = $wrapperEl.children(\".\" + swiperParams.slidePrevClass);\n        if (prevSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(prevSlide));\n      }\n    }\n  },\n  checkInViewOnLoad: function checkInViewOnLoad() {\n    var window = getWindow();\n    var swiper = this;\n    if (!swiper || swiper.destroyed) return;\n    var $scrollElement = swiper.params.lazy.scrollingElement ? $(swiper.params.lazy.scrollingElement) : $(window);\n    var isWindow = $scrollElement[0] === window;\n    var scrollElementWidth = isWindow ? window.innerWidth : $scrollElement[0].offsetWidth;\n    var scrollElementHeight = isWindow ? window.innerHeight : $scrollElement[0].offsetHeight;\n    var swiperOffset = swiper.$el.offset();\n    var rtl = swiper.rtlTranslate;\n    var inView = false;\n    if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n    var swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiper.width, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiper.height], [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height]];\n\n    for (var i = 0; i < swiperCoord.length; i += 1) {\n      var point = swiperCoord[i];\n\n      if (point[0] >= 0 && point[0] <= scrollElementWidth && point[1] >= 0 && point[1] <= scrollElementHeight) {\n        if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n\n        inView = true;\n      }\n    }\n\n    var passiveListener = swiper.touchEvents.start === 'touchstart' && swiper.support.passiveListener && swiper.params.passiveListeners ? {\n      passive: true,\n      capture: false\n    } : false;\n\n    if (inView) {\n      swiper.lazy.load();\n      $scrollElement.off('scroll', swiper.lazy.checkInViewOnLoad, passiveListener);\n    } else if (!swiper.lazy.scrollHandlerAttached) {\n      swiper.lazy.scrollHandlerAttached = true;\n      $scrollElement.on('scroll', swiper.lazy.checkInViewOnLoad, passiveListener);\n    }\n  }\n};\nexport default {\n  name: 'lazy',\n  params: {\n    lazy: {\n      checkInView: false,\n      enabled: false,\n      loadPrevNext: false,\n      loadPrevNextAmount: 1,\n      loadOnTransitionStart: false,\n      scrollingElement: '',\n      elementClass: 'swiper-lazy',\n      loadingClass: 'swiper-lazy-loading',\n      loadedClass: 'swiper-lazy-loaded',\n      preloaderClass: 'swiper-lazy-preloader'\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      lazy: _extends({\n        initialImageLoaded: false\n      }, Lazy)\n    });\n  },\n  on: {\n    beforeInit: function beforeInit(swiper) {\n      if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n        swiper.params.preloadImages = false;\n      }\n    },\n    init: function init(swiper) {\n      if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {\n        if (swiper.params.lazy.checkInView) {\n          swiper.lazy.checkInViewOnLoad();\n        } else {\n          swiper.lazy.load();\n        }\n      }\n    },\n    scroll: function scroll(swiper) {\n      if (swiper.params.freeMode && !swiper.params.freeModeSticky) {\n        swiper.lazy.load();\n      }\n    },\n    'scrollbarDragMove resize _freeModeNoMomentumRelease': function lazyLoad(swiper) {\n      if (swiper.params.lazy.enabled) {\n        swiper.lazy.load();\n      }\n    },\n    transitionStart: function transitionStart(swiper) {\n      if (swiper.params.lazy.enabled) {\n        if (swiper.params.lazy.loadOnTransitionStart || !swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded) {\n          swiper.lazy.load();\n        }\n      }\n    },\n    transitionEnd: function transitionEnd(swiper) {\n      if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n        swiper.lazy.load();\n      }\n    },\n    slideChange: function slideChange(swiper) {\n      var _swiper$params = swiper.params,\n          lazy = _swiper$params.lazy,\n          cssMode = _swiper$params.cssMode,\n          watchSlidesVisibility = _swiper$params.watchSlidesVisibility,\n          watchSlidesProgress = _swiper$params.watchSlidesProgress,\n          touchReleaseOnEdges = _swiper$params.touchReleaseOnEdges,\n          resistanceRatio = _swiper$params.resistanceRatio;\n\n      if (lazy.enabled && (cssMode || (watchSlidesVisibility || watchSlidesProgress) && (touchReleaseOnEdges || resistanceRatio === 0))) {\n        swiper.lazy.load();\n      }\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\n/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\nimport { nextTick, bindModuleMethods } from '../../utils/utils';\nvar Controller = {\n  LinearSpline: function LinearSpline(x, y) {\n    var binarySearch = function search() {\n      var maxIndex;\n      var minIndex;\n      var guess;\n      return function (array, val) {\n        minIndex = -1;\n        maxIndex = array.length;\n\n        while (maxIndex - minIndex > 1) {\n          guess = maxIndex + minIndex >> 1;\n\n          if (array[guess] <= val) {\n            minIndex = guess;\n          } else {\n            maxIndex = guess;\n          }\n        }\n\n        return maxIndex;\n      };\n    }();\n\n    this.x = x;\n    this.y = y;\n    this.lastIndex = x.length - 1; // Given an x value (x2), return the expected y2 value:\n    // (x1,y1) is the known point before given value,\n    // (x3,y3) is the known point after given value.\n\n    var i1;\n    var i3;\n\n    this.interpolate = function interpolate(x2) {\n      if (!x2) return 0; // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n\n      i3 = binarySearch(this.x, x2);\n      i1 = i3 - 1; // We have our indexes i1 & i3, so we can calculate already:\n      // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n\n      return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];\n    };\n\n    return this;\n  },\n  // xxx: for now i will just save one spline function to to\n  getInterpolateFunction: function getInterpolateFunction(c) {\n    var swiper = this;\n\n    if (!swiper.controller.spline) {\n      swiper.controller.spline = swiper.params.loop ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid) : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);\n    }\n  },\n  setTranslate: function setTranslate(_setTranslate, byController) {\n    var swiper = this;\n    var controlled = swiper.controller.control;\n    var multiplier;\n    var controlledTranslate;\n    var Swiper = swiper.constructor;\n\n    function setControlledTranslate(c) {\n      // this will create an Interpolate function based on the snapGrids\n      // x is the Grid of the scrolled scroller and y will be the controlled scroller\n      // it makes sense to create this only once and recall it for the interpolation\n      // the function does a lot of value caching for performance\n      var translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n\n      if (swiper.params.controller.by === 'slide') {\n        swiper.controller.getInterpolateFunction(c); // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n        // but it did not work out\n\n        controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n      }\n\n      if (!controlledTranslate || swiper.params.controller.by === 'container') {\n        multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n        controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();\n      }\n\n      if (swiper.params.controller.inverse) {\n        controlledTranslate = c.maxTranslate() - controlledTranslate;\n      }\n\n      c.updateProgress(controlledTranslate);\n      c.setTranslate(controlledTranslate, swiper);\n      c.updateActiveIndex();\n      c.updateSlidesClasses();\n    }\n\n    if (Array.isArray(controlled)) {\n      for (var i = 0; i < controlled.length; i += 1) {\n        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n          setControlledTranslate(controlled[i]);\n        }\n      }\n    } else if (controlled instanceof Swiper && byController !== controlled) {\n      setControlledTranslate(controlled);\n    }\n  },\n  setTransition: function setTransition(duration, byController) {\n    var swiper = this;\n    var Swiper = swiper.constructor;\n    var controlled = swiper.controller.control;\n    var i;\n\n    function setControlledTransition(c) {\n      c.setTransition(duration, swiper);\n\n      if (duration !== 0) {\n        c.transitionStart();\n\n        if (c.params.autoHeight) {\n          nextTick(function () {\n            c.updateAutoHeight();\n          });\n        }\n\n        c.$wrapperEl.transitionEnd(function () {\n          if (!controlled) return;\n\n          if (c.params.loop && swiper.params.controller.by === 'slide') {\n            c.loopFix();\n          }\n\n          c.transitionEnd();\n        });\n      }\n    }\n\n    if (Array.isArray(controlled)) {\n      for (i = 0; i < controlled.length; i += 1) {\n        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n          setControlledTransition(controlled[i]);\n        }\n      }\n    } else if (controlled instanceof Swiper && byController !== controlled) {\n      setControlledTransition(controlled);\n    }\n  }\n};\nexport default {\n  name: 'controller',\n  params: {\n    controller: {\n      control: undefined,\n      inverse: false,\n      by: 'slide' // or 'container'\n\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      controller: _extends({\n        control: swiper.params.controller.control\n      }, Controller)\n    });\n  },\n  on: {\n    update: function update(swiper) {\n      if (!swiper.controller.control) return;\n\n      if (swiper.controller.spline) {\n        swiper.controller.spline = undefined;\n        delete swiper.controller.spline;\n      }\n    },\n    resize: function resize(swiper) {\n      if (!swiper.controller.control) return;\n\n      if (swiper.controller.spline) {\n        swiper.controller.spline = undefined;\n        delete swiper.controller.spline;\n      }\n    },\n    observerUpdate: function observerUpdate(swiper) {\n      if (!swiper.controller.control) return;\n\n      if (swiper.controller.spline) {\n        swiper.controller.spline = undefined;\n        delete swiper.controller.spline;\n      }\n    },\n    setTranslate: function setTranslate(swiper, translate, byController) {\n      if (!swiper.controller.control) return;\n      swiper.controller.setTranslate(translate, byController);\n    },\n    setTransition: function setTransition(swiper, duration, byController) {\n      if (!swiper.controller.control) return;\n      swiper.controller.setTransition(duration, byController);\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport $ from '../../utils/dom';\nimport { bindModuleMethods, classesToSelector } from '../../utils/utils';\nvar A11y = {\n  getRandomNumber: function getRandomNumber(size) {\n    if (size === void 0) {\n      size = 16;\n    }\n\n    var randomChar = function randomChar() {\n      return Math.round(16 * Math.random()).toString(16);\n    };\n\n    return 'x'.repeat(size).replace(/x/g, randomChar);\n  },\n  makeElFocusable: function makeElFocusable($el) {\n    $el.attr('tabIndex', '0');\n    return $el;\n  },\n  makeElNotFocusable: function makeElNotFocusable($el) {\n    $el.attr('tabIndex', '-1');\n    return $el;\n  },\n  addElRole: function addElRole($el, role) {\n    $el.attr('role', role);\n    return $el;\n  },\n  addElRoleDescription: function addElRoleDescription($el, description) {\n    $el.attr('aria-roledescription', description);\n    return $el;\n  },\n  addElControls: function addElControls($el, controls) {\n    $el.attr('aria-controls', controls);\n    return $el;\n  },\n  addElLabel: function addElLabel($el, label) {\n    $el.attr('aria-label', label);\n    return $el;\n  },\n  addElId: function addElId($el, id) {\n    $el.attr('id', id);\n    return $el;\n  },\n  addElLive: function addElLive($el, live) {\n    $el.attr('aria-live', live);\n    return $el;\n  },\n  disableEl: function disableEl($el) {\n    $el.attr('aria-disabled', true);\n    return $el;\n  },\n  enableEl: function enableEl($el) {\n    $el.attr('aria-disabled', false);\n    return $el;\n  },\n  onEnterOrSpaceKey: function onEnterOrSpaceKey(e) {\n    if (e.keyCode !== 13 && e.keyCode !== 32) return;\n    var swiper = this;\n    var params = swiper.params.a11y;\n    var $targetEl = $(e.target);\n\n    if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n      if (!(swiper.isEnd && !swiper.params.loop)) {\n        swiper.slideNext();\n      }\n\n      if (swiper.isEnd) {\n        swiper.a11y.notify(params.lastSlideMessage);\n      } else {\n        swiper.a11y.notify(params.nextSlideMessage);\n      }\n    }\n\n    if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n      if (!(swiper.isBeginning && !swiper.params.loop)) {\n        swiper.slidePrev();\n      }\n\n      if (swiper.isBeginning) {\n        swiper.a11y.notify(params.firstSlideMessage);\n      } else {\n        swiper.a11y.notify(params.prevSlideMessage);\n      }\n    }\n\n    if (swiper.pagination && $targetEl.is(classesToSelector(swiper.params.pagination.bulletClass))) {\n      $targetEl[0].click();\n    }\n  },\n  notify: function notify(message) {\n    var swiper = this;\n    var notification = swiper.a11y.liveRegion;\n    if (notification.length === 0) return;\n    notification.html('');\n    notification.html(message);\n  },\n  updateNavigation: function updateNavigation() {\n    var swiper = this;\n    if (swiper.params.loop || !swiper.navigation) return;\n    var _swiper$navigation = swiper.navigation,\n        $nextEl = _swiper$navigation.$nextEl,\n        $prevEl = _swiper$navigation.$prevEl;\n\n    if ($prevEl && $prevEl.length > 0) {\n      if (swiper.isBeginning) {\n        swiper.a11y.disableEl($prevEl);\n        swiper.a11y.makeElNotFocusable($prevEl);\n      } else {\n        swiper.a11y.enableEl($prevEl);\n        swiper.a11y.makeElFocusable($prevEl);\n      }\n    }\n\n    if ($nextEl && $nextEl.length > 0) {\n      if (swiper.isEnd) {\n        swiper.a11y.disableEl($nextEl);\n        swiper.a11y.makeElNotFocusable($nextEl);\n      } else {\n        swiper.a11y.enableEl($nextEl);\n        swiper.a11y.makeElFocusable($nextEl);\n      }\n    }\n  },\n  updatePagination: function updatePagination() {\n    var swiper = this;\n    var params = swiper.params.a11y;\n\n    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n      swiper.pagination.bullets.each(function (bulletEl) {\n        var $bulletEl = $(bulletEl);\n        swiper.a11y.makeElFocusable($bulletEl);\n\n        if (!swiper.params.pagination.renderBullet) {\n          swiper.a11y.addElRole($bulletEl, 'button');\n          swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, $bulletEl.index() + 1));\n        }\n      });\n    }\n  },\n  init: function init() {\n    var swiper = this;\n    var params = swiper.params.a11y;\n    swiper.$el.append(swiper.a11y.liveRegion); // Container\n\n    var $containerEl = swiper.$el;\n\n    if (params.containerRoleDescriptionMessage) {\n      swiper.a11y.addElRoleDescription($containerEl, params.containerRoleDescriptionMessage);\n    }\n\n    if (params.containerMessage) {\n      swiper.a11y.addElLabel($containerEl, params.containerMessage);\n    } // Wrapper\n\n\n    var $wrapperEl = swiper.$wrapperEl;\n    var wrapperId = $wrapperEl.attr('id') || \"swiper-wrapper-\" + swiper.a11y.getRandomNumber(16);\n    var live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';\n    swiper.a11y.addElId($wrapperEl, wrapperId);\n    swiper.a11y.addElLive($wrapperEl, live); // Slide\n\n    if (params.itemRoleDescriptionMessage) {\n      swiper.a11y.addElRoleDescription($(swiper.slides), params.itemRoleDescriptionMessage);\n    }\n\n    swiper.a11y.addElRole($(swiper.slides), params.slideRole);\n    var slidesLength = swiper.params.loop ? swiper.slides.filter(function (el) {\n      return !el.classList.contains(swiper.params.slideDuplicateClass);\n    }).length : swiper.slides.length;\n    swiper.slides.each(function (slideEl, index) {\n      var $slideEl = $(slideEl);\n      var slideIndex = swiper.params.loop ? parseInt($slideEl.attr('data-swiper-slide-index'), 10) : index;\n      var ariaLabelMessage = params.slideLabelMessage.replace(/\\{\\{index\\}\\}/, slideIndex + 1).replace(/\\{\\{slidesLength\\}\\}/, slidesLength);\n      swiper.a11y.addElLabel($slideEl, ariaLabelMessage);\n    }); // Navigation\n\n    var $nextEl;\n    var $prevEl;\n\n    if (swiper.navigation && swiper.navigation.$nextEl) {\n      $nextEl = swiper.navigation.$nextEl;\n    }\n\n    if (swiper.navigation && swiper.navigation.$prevEl) {\n      $prevEl = swiper.navigation.$prevEl;\n    }\n\n    if ($nextEl && $nextEl.length) {\n      swiper.a11y.makeElFocusable($nextEl);\n\n      if ($nextEl[0].tagName !== 'BUTTON') {\n        swiper.a11y.addElRole($nextEl, 'button');\n        $nextEl.on('keydown', swiper.a11y.onEnterOrSpaceKey);\n      }\n\n      swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);\n      swiper.a11y.addElControls($nextEl, wrapperId);\n    }\n\n    if ($prevEl && $prevEl.length) {\n      swiper.a11y.makeElFocusable($prevEl);\n\n      if ($prevEl[0].tagName !== 'BUTTON') {\n        swiper.a11y.addElRole($prevEl, 'button');\n        $prevEl.on('keydown', swiper.a11y.onEnterOrSpaceKey);\n      }\n\n      swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);\n      swiper.a11y.addElControls($prevEl, wrapperId);\n    } // Pagination\n\n\n    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n      swiper.pagination.$el.on('keydown', classesToSelector(swiper.params.pagination.bulletClass), swiper.a11y.onEnterOrSpaceKey);\n    }\n  },\n  destroy: function destroy() {\n    var swiper = this;\n    if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) swiper.a11y.liveRegion.remove();\n    var $nextEl;\n    var $prevEl;\n\n    if (swiper.navigation && swiper.navigation.$nextEl) {\n      $nextEl = swiper.navigation.$nextEl;\n    }\n\n    if (swiper.navigation && swiper.navigation.$prevEl) {\n      $prevEl = swiper.navigation.$prevEl;\n    }\n\n    if ($nextEl) {\n      $nextEl.off('keydown', swiper.a11y.onEnterOrSpaceKey);\n    }\n\n    if ($prevEl) {\n      $prevEl.off('keydown', swiper.a11y.onEnterOrSpaceKey);\n    } // Pagination\n\n\n    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n      swiper.pagination.$el.off('keydown', classesToSelector(swiper.params.pagination.bulletClass), swiper.a11y.onEnterOrSpaceKey);\n    }\n  }\n};\nexport default {\n  name: 'a11y',\n  params: {\n    a11y: {\n      enabled: true,\n      notificationClass: 'swiper-notification',\n      prevSlideMessage: 'Previous slide',\n      nextSlideMessage: 'Next slide',\n      firstSlideMessage: 'This is the first slide',\n      lastSlideMessage: 'This is the last slide',\n      paginationBulletMessage: 'Go to slide {{index}}',\n      slideLabelMessage: '{{index}} / {{slidesLength}}',\n      containerMessage: null,\n      containerRoleDescriptionMessage: null,\n      itemRoleDescriptionMessage: null,\n      slideRole: 'group'\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      a11y: _extends({}, A11y, {\n        liveRegion: $(\"<span class=\\\"\" + swiper.params.a11y.notificationClass + \"\\\" aria-live=\\\"assertive\\\" aria-atomic=\\\"true\\\"></span>\")\n      })\n    });\n  },\n  on: {\n    afterInit: function afterInit(swiper) {\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.init();\n      swiper.a11y.updateNavigation();\n    },\n    toEdge: function toEdge(swiper) {\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.updateNavigation();\n    },\n    fromEdge: function fromEdge(swiper) {\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.updateNavigation();\n    },\n    paginationUpdate: function paginationUpdate(swiper) {\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.updatePagination();\n    },\n    destroy: function destroy(swiper) {\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.destroy();\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport { getWindow } from 'ssr-window';\nimport { bindModuleMethods } from '../../utils/utils';\nvar History = {\n  init: function init() {\n    var swiper = this;\n    var window = getWindow();\n    if (!swiper.params.history) return;\n\n    if (!window.history || !window.history.pushState) {\n      swiper.params.history.enabled = false;\n      swiper.params.hashNavigation.enabled = true;\n      return;\n    }\n\n    var history = swiper.history;\n    history.initialized = true;\n    history.paths = History.getPathValues(swiper.params.url);\n    if (!history.paths.key && !history.paths.value) return;\n    history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);\n\n    if (!swiper.params.history.replaceState) {\n      window.addEventListener('popstate', swiper.history.setHistoryPopState);\n    }\n  },\n  destroy: function destroy() {\n    var swiper = this;\n    var window = getWindow();\n\n    if (!swiper.params.history.replaceState) {\n      window.removeEventListener('popstate', swiper.history.setHistoryPopState);\n    }\n  },\n  setHistoryPopState: function setHistoryPopState() {\n    var swiper = this;\n    swiper.history.paths = History.getPathValues(swiper.params.url);\n    swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);\n  },\n  getPathValues: function getPathValues(urlOverride) {\n    var window = getWindow();\n    var location;\n\n    if (urlOverride) {\n      location = new URL(urlOverride);\n    } else {\n      location = window.location;\n    }\n\n    var pathArray = location.pathname.slice(1).split('/').filter(function (part) {\n      return part !== '';\n    });\n    var total = pathArray.length;\n    var key = pathArray[total - 2];\n    var value = pathArray[total - 1];\n    return {\n      key: key,\n      value: value\n    };\n  },\n  setHistory: function setHistory(key, index) {\n    var swiper = this;\n    var window = getWindow();\n    if (!swiper.history.initialized || !swiper.params.history.enabled) return;\n    var location;\n\n    if (swiper.params.url) {\n      location = new URL(swiper.params.url);\n    } else {\n      location = window.location;\n    }\n\n    var slide = swiper.slides.eq(index);\n    var value = History.slugify(slide.attr('data-history'));\n\n    if (swiper.params.history.root.length > 0) {\n      var root = swiper.params.history.root;\n      if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1);\n      value = root + \"/\" + key + \"/\" + value;\n    } else if (!location.pathname.includes(key)) {\n      value = key + \"/\" + value;\n    }\n\n    var currentState = window.history.state;\n\n    if (currentState && currentState.value === value) {\n      return;\n    }\n\n    if (swiper.params.history.replaceState) {\n      window.history.replaceState({\n        value: value\n      }, null, value);\n    } else {\n      window.history.pushState({\n        value: value\n      }, null, value);\n    }\n  },\n  slugify: function slugify(text) {\n    return text.toString().replace(/\\s+/g, '-').replace(/[^\\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');\n  },\n  scrollToSlide: function scrollToSlide(speed, value, runCallbacks) {\n    var swiper = this;\n\n    if (value) {\n      for (var i = 0, length = swiper.slides.length; i < length; i += 1) {\n        var slide = swiper.slides.eq(i);\n        var slideHistory = History.slugify(slide.attr('data-history'));\n\n        if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n          var index = slide.index();\n          swiper.slideTo(index, speed, runCallbacks);\n        }\n      }\n    } else {\n      swiper.slideTo(0, speed, runCallbacks);\n    }\n  }\n};\nexport default {\n  name: 'history',\n  params: {\n    history: {\n      enabled: false,\n      root: '',\n      replaceState: false,\n      key: 'slides'\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      history: _extends({}, History)\n    });\n  },\n  on: {\n    init: function init(swiper) {\n      if (swiper.params.history.enabled) {\n        swiper.history.init();\n      }\n    },\n    destroy: function destroy(swiper) {\n      if (swiper.params.history.enabled) {\n        swiper.history.destroy();\n      }\n    },\n    'transitionEnd _freeModeNoMomentumRelease': function transitionEnd_freeModeNoMomentumRelease(swiper) {\n      if (swiper.history.initialized) {\n        swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n      }\n    },\n    slideChange: function slideChange(swiper) {\n      if (swiper.history.initialized && swiper.params.cssMode) {\n        swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n      }\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport { bindModuleMethods } from '../../utils/utils';\nvar HashNavigation = {\n  onHashChange: function onHashChange() {\n    var swiper = this;\n    var document = getDocument();\n    swiper.emit('hashChange');\n    var newHash = document.location.hash.replace('#', '');\n    var activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');\n\n    if (newHash !== activeSlideHash) {\n      var newIndex = swiper.$wrapperEl.children(\".\" + swiper.params.slideClass + \"[data-hash=\\\"\" + newHash + \"\\\"]\").index();\n      if (typeof newIndex === 'undefined') return;\n      swiper.slideTo(newIndex);\n    }\n  },\n  setHash: function setHash() {\n    var swiper = this;\n    var window = getWindow();\n    var document = getDocument();\n    if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) return;\n\n    if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {\n      window.history.replaceState(null, null, \"#\" + swiper.slides.eq(swiper.activeIndex).attr('data-hash') || '');\n      swiper.emit('hashSet');\n    } else {\n      var slide = swiper.slides.eq(swiper.activeIndex);\n      var hash = slide.attr('data-hash') || slide.attr('data-history');\n      document.location.hash = hash || '';\n      swiper.emit('hashSet');\n    }\n  },\n  init: function init() {\n    var swiper = this;\n    var document = getDocument();\n    var window = getWindow();\n    if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;\n    swiper.hashNavigation.initialized = true;\n    var hash = document.location.hash.replace('#', '');\n\n    if (hash) {\n      var speed = 0;\n\n      for (var i = 0, length = swiper.slides.length; i < length; i += 1) {\n        var slide = swiper.slides.eq(i);\n        var slideHash = slide.attr('data-hash') || slide.attr('data-history');\n\n        if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n          var index = slide.index();\n          swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);\n        }\n      }\n    }\n\n    if (swiper.params.hashNavigation.watchState) {\n      $(window).on('hashchange', swiper.hashNavigation.onHashChange);\n    }\n  },\n  destroy: function destroy() {\n    var swiper = this;\n    var window = getWindow();\n\n    if (swiper.params.hashNavigation.watchState) {\n      $(window).off('hashchange', swiper.hashNavigation.onHashChange);\n    }\n  }\n};\nexport default {\n  name: 'hash-navigation',\n  params: {\n    hashNavigation: {\n      enabled: false,\n      replaceState: false,\n      watchState: false\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      hashNavigation: _extends({\n        initialized: false\n      }, HashNavigation)\n    });\n  },\n  on: {\n    init: function init(swiper) {\n      if (swiper.params.hashNavigation.enabled) {\n        swiper.hashNavigation.init();\n      }\n    },\n    destroy: function destroy(swiper) {\n      if (swiper.params.hashNavigation.enabled) {\n        swiper.hashNavigation.destroy();\n      }\n    },\n    'transitionEnd _freeModeNoMomentumRelease': function transitionEnd_freeModeNoMomentumRelease(swiper) {\n      if (swiper.hashNavigation.initialized) {\n        swiper.hashNavigation.setHash();\n      }\n    },\n    slideChange: function slideChange(swiper) {\n      if (swiper.hashNavigation.initialized && swiper.params.cssMode) {\n        swiper.hashNavigation.setHash();\n      }\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\n/* eslint no-underscore-dangle: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport { nextTick, bindModuleMethods } from '../../utils/utils';\nvar Autoplay = {\n  run: function run() {\n    var swiper = this;\n    var $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n    var delay = swiper.params.autoplay.delay;\n\n    if ($activeSlideEl.attr('data-swiper-autoplay')) {\n      delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n    }\n\n    clearTimeout(swiper.autoplay.timeout);\n    swiper.autoplay.timeout = nextTick(function () {\n      var autoplayResult;\n\n      if (swiper.params.autoplay.reverseDirection) {\n        if (swiper.params.loop) {\n          swiper.loopFix();\n          autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else if (!swiper.isBeginning) {\n          autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else if (!swiper.params.autoplay.stopOnLastSlide) {\n          autoplayResult = swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else {\n          swiper.autoplay.stop();\n        }\n      } else if (swiper.params.loop) {\n        swiper.loopFix();\n        autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n        swiper.emit('autoplay');\n      } else if (!swiper.isEnd) {\n        autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n        swiper.emit('autoplay');\n      } else if (!swiper.params.autoplay.stopOnLastSlide) {\n        autoplayResult = swiper.slideTo(0, swiper.params.speed, true, true);\n        swiper.emit('autoplay');\n      } else {\n        swiper.autoplay.stop();\n      }\n\n      if (swiper.params.cssMode && swiper.autoplay.running) swiper.autoplay.run();else if (autoplayResult === false) {\n        swiper.autoplay.run();\n      }\n    }, delay);\n  },\n  start: function start() {\n    var swiper = this;\n    if (typeof swiper.autoplay.timeout !== 'undefined') return false;\n    if (swiper.autoplay.running) return false;\n    swiper.autoplay.running = true;\n    swiper.emit('autoplayStart');\n    swiper.autoplay.run();\n    return true;\n  },\n  stop: function stop() {\n    var swiper = this;\n    if (!swiper.autoplay.running) return false;\n    if (typeof swiper.autoplay.timeout === 'undefined') return false;\n\n    if (swiper.autoplay.timeout) {\n      clearTimeout(swiper.autoplay.timeout);\n      swiper.autoplay.timeout = undefined;\n    }\n\n    swiper.autoplay.running = false;\n    swiper.emit('autoplayStop');\n    return true;\n  },\n  pause: function pause(speed) {\n    var swiper = this;\n    if (!swiper.autoplay.running) return;\n    if (swiper.autoplay.paused) return;\n    if (swiper.autoplay.timeout) clearTimeout(swiper.autoplay.timeout);\n    swiper.autoplay.paused = true;\n\n    if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n      swiper.autoplay.paused = false;\n      swiper.autoplay.run();\n    } else {\n      ['transitionend', 'webkitTransitionEnd'].forEach(function (event) {\n        swiper.$wrapperEl[0].addEventListener(event, swiper.autoplay.onTransitionEnd);\n      });\n    }\n  },\n  onVisibilityChange: function onVisibilityChange() {\n    var swiper = this;\n    var document = getDocument();\n\n    if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n      swiper.autoplay.pause();\n    }\n\n    if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n      swiper.autoplay.run();\n      swiper.autoplay.paused = false;\n    }\n  },\n  onTransitionEnd: function onTransitionEnd(e) {\n    var swiper = this;\n    if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;\n    if (e.target !== swiper.$wrapperEl[0]) return;\n    ['transitionend', 'webkitTransitionEnd'].forEach(function (event) {\n      swiper.$wrapperEl[0].removeEventListener(event, swiper.autoplay.onTransitionEnd);\n    });\n    swiper.autoplay.paused = false;\n\n    if (!swiper.autoplay.running) {\n      swiper.autoplay.stop();\n    } else {\n      swiper.autoplay.run();\n    }\n  },\n  onMouseEnter: function onMouseEnter() {\n    var swiper = this;\n\n    if (swiper.params.autoplay.disableOnInteraction) {\n      swiper.autoplay.stop();\n    } else {\n      swiper.autoplay.pause();\n    }\n\n    ['transitionend', 'webkitTransitionEnd'].forEach(function (event) {\n      swiper.$wrapperEl[0].removeEventListener(event, swiper.autoplay.onTransitionEnd);\n    });\n  },\n  onMouseLeave: function onMouseLeave() {\n    var swiper = this;\n\n    if (swiper.params.autoplay.disableOnInteraction) {\n      return;\n    }\n\n    swiper.autoplay.paused = false;\n    swiper.autoplay.run();\n  },\n  attachMouseEvents: function attachMouseEvents() {\n    var swiper = this;\n\n    if (swiper.params.autoplay.pauseOnMouseEnter) {\n      swiper.$el.on('mouseenter', swiper.autoplay.onMouseEnter);\n      swiper.$el.on('mouseleave', swiper.autoplay.onMouseLeave);\n    }\n  },\n  detachMouseEvents: function detachMouseEvents() {\n    var swiper = this;\n    swiper.$el.off('mouseenter', swiper.autoplay.onMouseEnter);\n    swiper.$el.off('mouseleave', swiper.autoplay.onMouseLeave);\n  }\n};\nexport default {\n  name: 'autoplay',\n  params: {\n    autoplay: {\n      enabled: false,\n      delay: 3000,\n      waitForTransition: true,\n      disableOnInteraction: true,\n      stopOnLastSlide: false,\n      reverseDirection: false,\n      pauseOnMouseEnter: false\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      autoplay: _extends({}, Autoplay, {\n        running: false,\n        paused: false\n      })\n    });\n  },\n  on: {\n    init: function init(swiper) {\n      if (swiper.params.autoplay.enabled) {\n        swiper.autoplay.start();\n        var document = getDocument();\n        document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n        swiper.autoplay.attachMouseEvents();\n      }\n    },\n    beforeTransitionStart: function beforeTransitionStart(swiper, speed, internal) {\n      if (swiper.autoplay.running) {\n        if (internal || !swiper.params.autoplay.disableOnInteraction) {\n          swiper.autoplay.pause(speed);\n        } else {\n          swiper.autoplay.stop();\n        }\n      }\n    },\n    sliderFirstMove: function sliderFirstMove(swiper) {\n      if (swiper.autoplay.running) {\n        if (swiper.params.autoplay.disableOnInteraction) {\n          swiper.autoplay.stop();\n        } else {\n          swiper.autoplay.pause();\n        }\n      }\n    },\n    touchEnd: function touchEnd(swiper) {\n      if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {\n        swiper.autoplay.run();\n      }\n    },\n    destroy: function destroy(swiper) {\n      swiper.autoplay.detachMouseEvents();\n\n      if (swiper.autoplay.running) {\n        swiper.autoplay.stop();\n      }\n\n      var document = getDocument();\n      document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport { extend, bindModuleMethods } from '../../utils/utils';\nvar Fade = {\n  setTranslate: function setTranslate() {\n    var swiper = this;\n    var slides = swiper.slides;\n\n    for (var i = 0; i < slides.length; i += 1) {\n      var $slideEl = swiper.slides.eq(i);\n      var offset = $slideEl[0].swiperSlideOffset;\n      var tx = -offset;\n      if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n      var ty = 0;\n\n      if (!swiper.isHorizontal()) {\n        ty = tx;\n        tx = 0;\n      }\n\n      var slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs($slideEl[0].progress), 0) : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n      $slideEl.css({\n        opacity: slideOpacity\n      }).transform(\"translate3d(\" + tx + \"px, \" + ty + \"px, 0px)\");\n    }\n  },\n  setTransition: function setTransition(duration) {\n    var swiper = this;\n    var slides = swiper.slides,\n        $wrapperEl = swiper.$wrapperEl;\n    slides.transition(duration);\n\n    if (swiper.params.virtualTranslate && duration !== 0) {\n      var eventTriggered = false;\n      slides.transitionEnd(function () {\n        if (eventTriggered) return;\n        if (!swiper || swiper.destroyed) return;\n        eventTriggered = true;\n        swiper.animating = false;\n        var triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n\n        for (var i = 0; i < triggerEvents.length; i += 1) {\n          $wrapperEl.trigger(triggerEvents[i]);\n        }\n      });\n    }\n  }\n};\nexport default {\n  name: 'effect-fade',\n  params: {\n    fadeEffect: {\n      crossFade: false\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      fadeEffect: _extends({}, Fade)\n    });\n  },\n  on: {\n    beforeInit: function beforeInit(swiper) {\n      if (swiper.params.effect !== 'fade') return;\n      swiper.classNames.push(swiper.params.containerModifierClass + \"fade\");\n      var overwriteParams = {\n        slidesPerView: 1,\n        slidesPerColumn: 1,\n        slidesPerGroup: 1,\n        watchSlidesProgress: true,\n        spaceBetween: 0,\n        virtualTranslate: true\n      };\n      extend(swiper.params, overwriteParams);\n      extend(swiper.originalParams, overwriteParams);\n    },\n    setTranslate: function setTranslate(swiper) {\n      if (swiper.params.effect !== 'fade') return;\n      swiper.fadeEffect.setTranslate();\n    },\n    setTransition: function setTransition(swiper, duration) {\n      if (swiper.params.effect !== 'fade') return;\n      swiper.fadeEffect.setTransition(duration);\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport $ from '../../utils/dom';\nimport { extend, bindModuleMethods } from '../../utils/utils';\nvar Cube = {\n  setTranslate: function setTranslate() {\n    var swiper = this;\n    var $el = swiper.$el,\n        $wrapperEl = swiper.$wrapperEl,\n        slides = swiper.slides,\n        swiperWidth = swiper.width,\n        swiperHeight = swiper.height,\n        rtl = swiper.rtlTranslate,\n        swiperSize = swiper.size,\n        browser = swiper.browser;\n    var params = swiper.params.cubeEffect;\n    var isHorizontal = swiper.isHorizontal();\n    var isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n    var wrapperRotate = 0;\n    var $cubeShadowEl;\n\n    if (params.shadow) {\n      if (isHorizontal) {\n        $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');\n\n        if ($cubeShadowEl.length === 0) {\n          $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n          $wrapperEl.append($cubeShadowEl);\n        }\n\n        $cubeShadowEl.css({\n          height: swiperWidth + \"px\"\n        });\n      } else {\n        $cubeShadowEl = $el.find('.swiper-cube-shadow');\n\n        if ($cubeShadowEl.length === 0) {\n          $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n          $el.append($cubeShadowEl);\n        }\n      }\n    }\n\n    for (var i = 0; i < slides.length; i += 1) {\n      var $slideEl = slides.eq(i);\n      var slideIndex = i;\n\n      if (isVirtual) {\n        slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);\n      }\n\n      var slideAngle = slideIndex * 90;\n      var round = Math.floor(slideAngle / 360);\n\n      if (rtl) {\n        slideAngle = -slideAngle;\n        round = Math.floor(-slideAngle / 360);\n      }\n\n      var progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n      var tx = 0;\n      var ty = 0;\n      var tz = 0;\n\n      if (slideIndex % 4 === 0) {\n        tx = -round * 4 * swiperSize;\n        tz = 0;\n      } else if ((slideIndex - 1) % 4 === 0) {\n        tx = 0;\n        tz = -round * 4 * swiperSize;\n      } else if ((slideIndex - 2) % 4 === 0) {\n        tx = swiperSize + round * 4 * swiperSize;\n        tz = swiperSize;\n      } else if ((slideIndex - 3) % 4 === 0) {\n        tx = -swiperSize;\n        tz = 3 * swiperSize + swiperSize * 4 * round;\n      }\n\n      if (rtl) {\n        tx = -tx;\n      }\n\n      if (!isHorizontal) {\n        ty = tx;\n        tx = 0;\n      }\n\n      var transform = \"rotateX(\" + (isHorizontal ? 0 : -slideAngle) + \"deg) rotateY(\" + (isHorizontal ? slideAngle : 0) + \"deg) translate3d(\" + tx + \"px, \" + ty + \"px, \" + tz + \"px)\";\n\n      if (progress <= 1 && progress > -1) {\n        wrapperRotate = slideIndex * 90 + progress * 90;\n        if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;\n      }\n\n      $slideEl.transform(transform);\n\n      if (params.slideShadows) {\n        // Set shadows\n        var shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n        var shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n        if (shadowBefore.length === 0) {\n          shadowBefore = $(\"<div class=\\\"swiper-slide-shadow-\" + (isHorizontal ? 'left' : 'top') + \"\\\"></div>\");\n          $slideEl.append(shadowBefore);\n        }\n\n        if (shadowAfter.length === 0) {\n          shadowAfter = $(\"<div class=\\\"swiper-slide-shadow-\" + (isHorizontal ? 'right' : 'bottom') + \"\\\"></div>\");\n          $slideEl.append(shadowAfter);\n        }\n\n        if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n        if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n      }\n    }\n\n    $wrapperEl.css({\n      '-webkit-transform-origin': \"50% 50% -\" + swiperSize / 2 + \"px\",\n      '-moz-transform-origin': \"50% 50% -\" + swiperSize / 2 + \"px\",\n      '-ms-transform-origin': \"50% 50% -\" + swiperSize / 2 + \"px\",\n      'transform-origin': \"50% 50% -\" + swiperSize / 2 + \"px\"\n    });\n\n    if (params.shadow) {\n      if (isHorizontal) {\n        $cubeShadowEl.transform(\"translate3d(0px, \" + (swiperWidth / 2 + params.shadowOffset) + \"px, \" + -swiperWidth / 2 + \"px) rotateX(90deg) rotateZ(0deg) scale(\" + params.shadowScale + \")\");\n      } else {\n        var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n        var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);\n        var scale1 = params.shadowScale;\n        var scale2 = params.shadowScale / multiplier;\n        var offset = params.shadowOffset;\n        $cubeShadowEl.transform(\"scale3d(\" + scale1 + \", 1, \" + scale2 + \") translate3d(0px, \" + (swiperHeight / 2 + offset) + \"px, \" + -swiperHeight / 2 / scale2 + \"px) rotateX(-90deg)\");\n      }\n    }\n\n    var zFactor = browser.isSafari || browser.isWebView ? -swiperSize / 2 : 0;\n    $wrapperEl.transform(\"translate3d(0px,0,\" + zFactor + \"px) rotateX(\" + (swiper.isHorizontal() ? 0 : wrapperRotate) + \"deg) rotateY(\" + (swiper.isHorizontal() ? -wrapperRotate : 0) + \"deg)\");\n  },\n  setTransition: function setTransition(duration) {\n    var swiper = this;\n    var $el = swiper.$el,\n        slides = swiper.slides;\n    slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n\n    if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n      $el.find('.swiper-cube-shadow').transition(duration);\n    }\n  }\n};\nexport default {\n  name: 'effect-cube',\n  params: {\n    cubeEffect: {\n      slideShadows: true,\n      shadow: true,\n      shadowOffset: 20,\n      shadowScale: 0.94\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      cubeEffect: _extends({}, Cube)\n    });\n  },\n  on: {\n    beforeInit: function beforeInit(swiper) {\n      if (swiper.params.effect !== 'cube') return;\n      swiper.classNames.push(swiper.params.containerModifierClass + \"cube\");\n      swiper.classNames.push(swiper.params.containerModifierClass + \"3d\");\n      var overwriteParams = {\n        slidesPerView: 1,\n        slidesPerColumn: 1,\n        slidesPerGroup: 1,\n        watchSlidesProgress: true,\n        resistanceRatio: 0,\n        spaceBetween: 0,\n        centeredSlides: false,\n        virtualTranslate: true\n      };\n      extend(swiper.params, overwriteParams);\n      extend(swiper.originalParams, overwriteParams);\n    },\n    setTranslate: function setTranslate(swiper) {\n      if (swiper.params.effect !== 'cube') return;\n      swiper.cubeEffect.setTranslate();\n    },\n    setTransition: function setTransition(swiper, duration) {\n      if (swiper.params.effect !== 'cube') return;\n      swiper.cubeEffect.setTransition(duration);\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport $ from '../../utils/dom';\nimport { extend, bindModuleMethods } from '../../utils/utils';\nvar Flip = {\n  setTranslate: function setTranslate() {\n    var swiper = this;\n    var slides = swiper.slides,\n        rtl = swiper.rtlTranslate;\n\n    for (var i = 0; i < slides.length; i += 1) {\n      var $slideEl = slides.eq(i);\n      var progress = $slideEl[0].progress;\n\n      if (swiper.params.flipEffect.limitRotation) {\n        progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n      }\n\n      var offset = $slideEl[0].swiperSlideOffset;\n      var rotate = -180 * progress;\n      var rotateY = rotate;\n      var rotateX = 0;\n      var tx = -offset;\n      var ty = 0;\n\n      if (!swiper.isHorizontal()) {\n        ty = tx;\n        tx = 0;\n        rotateX = -rotateY;\n        rotateY = 0;\n      } else if (rtl) {\n        rotateY = -rotateY;\n      }\n\n      $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n\n      if (swiper.params.flipEffect.slideShadows) {\n        // Set shadows\n        var shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n        var shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n        if (shadowBefore.length === 0) {\n          shadowBefore = $(\"<div class=\\\"swiper-slide-shadow-\" + (swiper.isHorizontal() ? 'left' : 'top') + \"\\\"></div>\");\n          $slideEl.append(shadowBefore);\n        }\n\n        if (shadowAfter.length === 0) {\n          shadowAfter = $(\"<div class=\\\"swiper-slide-shadow-\" + (swiper.isHorizontal() ? 'right' : 'bottom') + \"\\\"></div>\");\n          $slideEl.append(shadowAfter);\n        }\n\n        if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n        if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n      }\n\n      $slideEl.transform(\"translate3d(\" + tx + \"px, \" + ty + \"px, 0px) rotateX(\" + rotateX + \"deg) rotateY(\" + rotateY + \"deg)\");\n    }\n  },\n  setTransition: function setTransition(duration) {\n    var swiper = this;\n    var slides = swiper.slides,\n        activeIndex = swiper.activeIndex,\n        $wrapperEl = swiper.$wrapperEl;\n    slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n\n    if (swiper.params.virtualTranslate && duration !== 0) {\n      var eventTriggered = false; // eslint-disable-next-line\n\n      slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {\n        if (eventTriggered) return;\n        if (!swiper || swiper.destroyed) return; // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;\n\n        eventTriggered = true;\n        swiper.animating = false;\n        var triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n\n        for (var i = 0; i < triggerEvents.length; i += 1) {\n          $wrapperEl.trigger(triggerEvents[i]);\n        }\n      });\n    }\n  }\n};\nexport default {\n  name: 'effect-flip',\n  params: {\n    flipEffect: {\n      slideShadows: true,\n      limitRotation: true\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      flipEffect: _extends({}, Flip)\n    });\n  },\n  on: {\n    beforeInit: function beforeInit(swiper) {\n      if (swiper.params.effect !== 'flip') return;\n      swiper.classNames.push(swiper.params.containerModifierClass + \"flip\");\n      swiper.classNames.push(swiper.params.containerModifierClass + \"3d\");\n      var overwriteParams = {\n        slidesPerView: 1,\n        slidesPerColumn: 1,\n        slidesPerGroup: 1,\n        watchSlidesProgress: true,\n        spaceBetween: 0,\n        virtualTranslate: true\n      };\n      extend(swiper.params, overwriteParams);\n      extend(swiper.originalParams, overwriteParams);\n    },\n    setTranslate: function setTranslate(swiper) {\n      if (swiper.params.effect !== 'flip') return;\n      swiper.flipEffect.setTranslate();\n    },\n    setTransition: function setTransition(swiper, duration) {\n      if (swiper.params.effect !== 'flip') return;\n      swiper.flipEffect.setTransition(duration);\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport $ from '../../utils/dom';\nimport { bindModuleMethods } from '../../utils/utils';\nvar Coverflow = {\n  setTranslate: function setTranslate() {\n    var swiper = this;\n    var swiperWidth = swiper.width,\n        swiperHeight = swiper.height,\n        slides = swiper.slides,\n        slidesSizesGrid = swiper.slidesSizesGrid;\n    var params = swiper.params.coverflowEffect;\n    var isHorizontal = swiper.isHorizontal();\n    var transform = swiper.translate;\n    var center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;\n    var rotate = isHorizontal ? params.rotate : -params.rotate;\n    var translate = params.depth; // Each slide offset from center\n\n    for (var i = 0, length = slides.length; i < length; i += 1) {\n      var $slideEl = slides.eq(i);\n      var slideSize = slidesSizesGrid[i];\n      var slideOffset = $slideEl[0].swiperSlideOffset;\n      var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * params.modifier;\n      var rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n      var rotateX = isHorizontal ? 0 : rotate * offsetMultiplier; // var rotateZ = 0\n\n      var translateZ = -translate * Math.abs(offsetMultiplier);\n      var stretch = params.stretch; // Allow percentage to make a relative stretch for responsive sliders\n\n      if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n        stretch = parseFloat(params.stretch) / 100 * slideSize;\n      }\n\n      var translateY = isHorizontal ? 0 : stretch * offsetMultiplier;\n      var translateX = isHorizontal ? stretch * offsetMultiplier : 0;\n      var scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier); // Fix for ultra small values\n\n      if (Math.abs(translateX) < 0.001) translateX = 0;\n      if (Math.abs(translateY) < 0.001) translateY = 0;\n      if (Math.abs(translateZ) < 0.001) translateZ = 0;\n      if (Math.abs(rotateY) < 0.001) rotateY = 0;\n      if (Math.abs(rotateX) < 0.001) rotateX = 0;\n      if (Math.abs(scale) < 0.001) scale = 0;\n      var slideTransform = \"translate3d(\" + translateX + \"px,\" + translateY + \"px,\" + translateZ + \"px)  rotateX(\" + rotateX + \"deg) rotateY(\" + rotateY + \"deg) scale(\" + scale + \")\";\n      $slideEl.transform(slideTransform);\n      $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n\n      if (params.slideShadows) {\n        // Set shadows\n        var $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n        var $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n        if ($shadowBeforeEl.length === 0) {\n          $shadowBeforeEl = $(\"<div class=\\\"swiper-slide-shadow-\" + (isHorizontal ? 'left' : 'top') + \"\\\"></div>\");\n          $slideEl.append($shadowBeforeEl);\n        }\n\n        if ($shadowAfterEl.length === 0) {\n          $shadowAfterEl = $(\"<div class=\\\"swiper-slide-shadow-\" + (isHorizontal ? 'right' : 'bottom') + \"\\\"></div>\");\n          $slideEl.append($shadowAfterEl);\n        }\n\n        if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n        if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;\n      }\n    }\n  },\n  setTransition: function setTransition(duration) {\n    var swiper = this;\n    swiper.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n  }\n};\nexport default {\n  name: 'effect-coverflow',\n  params: {\n    coverflowEffect: {\n      rotate: 50,\n      stretch: 0,\n      depth: 100,\n      scale: 1,\n      modifier: 1,\n      slideShadows: true\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      coverflowEffect: _extends({}, Coverflow)\n    });\n  },\n  on: {\n    beforeInit: function beforeInit(swiper) {\n      if (swiper.params.effect !== 'coverflow') return;\n      swiper.classNames.push(swiper.params.containerModifierClass + \"coverflow\");\n      swiper.classNames.push(swiper.params.containerModifierClass + \"3d\");\n      swiper.params.watchSlidesProgress = true;\n      swiper.originalParams.watchSlidesProgress = true;\n    },\n    setTranslate: function setTranslate(swiper) {\n      if (swiper.params.effect !== 'coverflow') return;\n      swiper.coverflowEffect.setTranslate();\n    },\n    setTransition: function setTransition(swiper, duration) {\n      if (swiper.params.effect !== 'coverflow') return;\n      swiper.coverflowEffect.setTransition(duration);\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport { extend, isObject, bindModuleMethods } from '../../utils/utils';\nimport $ from '../../utils/dom';\nvar Thumbs = {\n  init: function init() {\n    var swiper = this;\n    var thumbsParams = swiper.params.thumbs;\n    if (swiper.thumbs.initialized) return false;\n    swiper.thumbs.initialized = true;\n    var SwiperClass = swiper.constructor;\n\n    if (thumbsParams.swiper instanceof SwiperClass) {\n      swiper.thumbs.swiper = thumbsParams.swiper;\n      extend(swiper.thumbs.swiper.originalParams, {\n        watchSlidesProgress: true,\n        slideToClickedSlide: false\n      });\n      extend(swiper.thumbs.swiper.params, {\n        watchSlidesProgress: true,\n        slideToClickedSlide: false\n      });\n    } else if (isObject(thumbsParams.swiper)) {\n      swiper.thumbs.swiper = new SwiperClass(extend({}, thumbsParams.swiper, {\n        watchSlidesVisibility: true,\n        watchSlidesProgress: true,\n        slideToClickedSlide: false\n      }));\n      swiper.thumbs.swiperCreated = true;\n    }\n\n    swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n    swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick);\n    return true;\n  },\n  onThumbClick: function onThumbClick() {\n    var swiper = this;\n    var thumbsSwiper = swiper.thumbs.swiper;\n    if (!thumbsSwiper) return;\n    var clickedIndex = thumbsSwiper.clickedIndex;\n    var clickedSlide = thumbsSwiper.clickedSlide;\n    if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;\n    if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n    var slideToIndex;\n\n    if (thumbsSwiper.params.loop) {\n      slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n    } else {\n      slideToIndex = clickedIndex;\n    }\n\n    if (swiper.params.loop) {\n      var currentIndex = swiper.activeIndex;\n\n      if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n        swiper.loopFix(); // eslint-disable-next-line\n\n        swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n        currentIndex = swiper.activeIndex;\n      }\n\n      var prevIndex = swiper.slides.eq(currentIndex).prevAll(\"[data-swiper-slide-index=\\\"\" + slideToIndex + \"\\\"]\").eq(0).index();\n      var nextIndex = swiper.slides.eq(currentIndex).nextAll(\"[data-swiper-slide-index=\\\"\" + slideToIndex + \"\\\"]\").eq(0).index();\n      if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;else slideToIndex = prevIndex;\n    }\n\n    swiper.slideTo(slideToIndex);\n  },\n  update: function update(initial) {\n    var swiper = this;\n    var thumbsSwiper = swiper.thumbs.swiper;\n    if (!thumbsSwiper) return;\n    var slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;\n    var autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n    var useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n\n    if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n      var currentThumbsIndex = thumbsSwiper.activeIndex;\n      var newThumbsIndex;\n      var direction;\n\n      if (thumbsSwiper.params.loop) {\n        if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {\n          thumbsSwiper.loopFix(); // eslint-disable-next-line\n\n          thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n          currentThumbsIndex = thumbsSwiper.activeIndex;\n        } // Find actual thumbs index to slide to\n\n\n        var prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll(\"[data-swiper-slide-index=\\\"\" + swiper.realIndex + \"\\\"]\").eq(0).index();\n        var nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll(\"[data-swiper-slide-index=\\\"\" + swiper.realIndex + \"\\\"]\").eq(0).index();\n\n        if (typeof prevThumbsIndex === 'undefined') {\n          newThumbsIndex = nextThumbsIndex;\n        } else if (typeof nextThumbsIndex === 'undefined') {\n          newThumbsIndex = prevThumbsIndex;\n        } else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) {\n          newThumbsIndex = thumbsSwiper.params.slidesPerGroup > 1 ? nextThumbsIndex : currentThumbsIndex;\n        } else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) {\n          newThumbsIndex = nextThumbsIndex;\n        } else {\n          newThumbsIndex = prevThumbsIndex;\n        }\n\n        direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n      } else {\n        newThumbsIndex = swiper.realIndex;\n        direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n      }\n\n      if (useOffset) {\n        newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n      }\n\n      if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n        if (thumbsSwiper.params.centeredSlides) {\n          if (newThumbsIndex > currentThumbsIndex) {\n            newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n          } else {\n            newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n          }\n        } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) {// newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n        }\n\n        thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n      }\n    } // Activate thumbs\n\n\n    var thumbsToActivate = 1;\n    var thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n    if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n      thumbsToActivate = swiper.params.slidesPerView;\n    }\n\n    if (!swiper.params.thumbs.multipleActiveThumbs) {\n      thumbsToActivate = 1;\n    }\n\n    thumbsToActivate = Math.floor(thumbsToActivate);\n    thumbsSwiper.slides.removeClass(thumbActiveClass);\n\n    if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {\n      for (var i = 0; i < thumbsToActivate; i += 1) {\n        thumbsSwiper.$wrapperEl.children(\"[data-swiper-slide-index=\\\"\" + (swiper.realIndex + i) + \"\\\"]\").addClass(thumbActiveClass);\n      }\n    } else {\n      for (var _i = 0; _i < thumbsToActivate; _i += 1) {\n        thumbsSwiper.slides.eq(swiper.realIndex + _i).addClass(thumbActiveClass);\n      }\n    }\n  }\n};\nexport default {\n  name: 'thumbs',\n  params: {\n    thumbs: {\n      swiper: null,\n      multipleActiveThumbs: true,\n      autoScrollOffset: 0,\n      slideThumbActiveClass: 'swiper-slide-thumb-active',\n      thumbsContainerClass: 'swiper-container-thumbs'\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      thumbs: _extends({\n        swiper: null,\n        initialized: false\n      }, Thumbs)\n    });\n  },\n  on: {\n    beforeInit: function beforeInit(swiper) {\n      var thumbs = swiper.params.thumbs;\n      if (!thumbs || !thumbs.swiper) return;\n      swiper.thumbs.init();\n      swiper.thumbs.update(true);\n    },\n    slideChange: function slideChange(swiper) {\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    update: function update(swiper) {\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    resize: function resize(swiper) {\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    observerUpdate: function observerUpdate(swiper) {\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    setTransition: function setTransition(swiper, duration) {\n      var thumbsSwiper = swiper.thumbs.swiper;\n      if (!thumbsSwiper) return;\n      thumbsSwiper.setTransition(duration);\n    },\n    beforeDestroy: function beforeDestroy(swiper) {\n      var thumbsSwiper = swiper.thumbs.swiper;\n      if (!thumbsSwiper) return;\n\n      if (swiper.thumbs.swiperCreated && thumbsSwiper) {\n        thumbsSwiper.destroy();\n      }\n    }\n  }\n};","export default typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n","import isBrowser from './isBrowser';\n\nconst timeoutDuration = (function(){\n  const longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n  for (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n    if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n      return 1;\n    }\n  }\n  return 0;\n}());\n\nexport function microtaskDebounce(fn) {\n  let called = false\n  return () => {\n    if (called) {\n      return\n    }\n    called = true\n    window.Promise.resolve().then(() => {\n      called = false\n      fn()\n    })\n  }\n}\n\nexport function taskDebounce(fn) {\n  let scheduled = false;\n  return () => {\n    if (!scheduled) {\n      scheduled = true;\n      setTimeout(() => {\n        scheduled = false;\n        fn();\n      }, timeoutDuration);\n    }\n  };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n  ? microtaskDebounce\n  : taskDebounce);\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n  const getType = {};\n  return (\n    functionToCheck &&\n    getType.toString.call(functionToCheck) === '[object Function]'\n  );\n}\n","/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n  if (element.nodeType !== 1) {\n    return [];\n  }\n  // NOTE: 1 DOM access here\n  const window = element.ownerDocument.defaultView;\n  const css = window.getComputedStyle(element, null);\n  return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n  if (element.nodeName === 'HTML') {\n    return element;\n  }\n  return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n  // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n  if (!element) {\n    return document.body\n  }\n\n  switch (element.nodeName) {\n    case 'HTML':\n    case 'BODY':\n      return element.ownerDocument.body\n    case '#document':\n      return element.body\n  }\n\n  // Firefox want us to check `-x` and `-y` variations as well\n  const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n  if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n    return element;\n  }\n\n  return getScrollParent(getParentNode(element));\n}\n","/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nexport default function getReferenceNode(reference) {\n  return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n","import isBrowser from './isBrowser';\n\nconst isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nconst isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nexport default function isIE(version) {\n  if (version === 11) {\n    return isIE11;\n  }\n  if (version === 10) {\n    return isIE10;\n  }\n  return isIE11 || isIE10;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n  if (!element) {\n    return document.documentElement;\n  }\n\n  const noOffsetParent = isIE(10) ? document.body : null;\n\n  // NOTE: 1 DOM access here\n  let offsetParent = element.offsetParent || null;\n  // Skip hidden elements which don't have an offsetParent\n  while (offsetParent === noOffsetParent && element.nextElementSibling) {\n    offsetParent = (element = element.nextElementSibling).offsetParent;\n  }\n\n  const nodeName = offsetParent && offsetParent.nodeName;\n\n  if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n    return element ? element.ownerDocument.documentElement : document.documentElement;\n  }\n\n  // .offsetParent will return the closest TH, TD or TABLE in case\n  // no offsetParent is present, I hate this job...\n  if (\n    ['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n    getStyleComputedProperty(offsetParent, 'position') === 'static'\n  ) {\n    return getOffsetParent(offsetParent);\n  }\n\n  return offsetParent;\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n  if (node.parentNode !== null) {\n    return getRoot(node.parentNode);\n  }\n\n  return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n  if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n    return document.documentElement;\n  }\n\n  // Here we make sure to give as \"start\" the element that comes first in the DOM\n  const order =\n    element1.compareDocumentPosition(element2) &\n    Node.DOCUMENT_POSITION_FOLLOWING;\n  const start = order ? element1 : element2;\n  const end = order ? element2 : element1;\n\n  // Get common ancestor container\n  const range = document.createRange();\n  range.setStart(start, 0);\n  range.setEnd(end, 0);\n  const { commonAncestorContainer } = range;\n\n  // Both nodes are inside #document\n  if (\n    (element1 !== commonAncestorContainer &&\n      element2 !== commonAncestorContainer) ||\n    start.contains(end)\n  ) {\n    if (isOffsetContainer(commonAncestorContainer)) {\n      return commonAncestorContainer;\n    }\n\n    return getOffsetParent(commonAncestorContainer);\n  }\n\n  // one of the nodes is inside shadowDOM, find which one\n  const element1root = getRoot(element1);\n  if (element1root.host) {\n    return findCommonOffsetParent(element1root.host, element2);\n  } else {\n    return findCommonOffsetParent(element1, getRoot(element2).host);\n  }\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n  const { nodeName } = element;\n  if (nodeName === 'BODY') {\n    return false;\n  }\n  return (\n    nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n  );\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n  const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n  const nodeName = element.nodeName;\n\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    const html = element.ownerDocument.documentElement;\n    const scrollingElement = element.ownerDocument.scrollingElement || html;\n    return scrollingElement[upperSide];\n  }\n\n  return element[upperSide];\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n  const sideA = axis === 'x' ? 'Left' : 'Top';\n  const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n  return (\n    parseFloat(styles[`border${sideA}Width`]) +\n    parseFloat(styles[`border${sideB}Width`])\n  );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n  return Math.max(\n    body[`offset${axis}`],\n    body[`scroll${axis}`],\n    html[`client${axis}`],\n    html[`offset${axis}`],\n    html[`scroll${axis}`],\n    isIE(10)\n      ? (parseInt(html[`offset${axis}`]) + \n      parseInt(computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`]) + \n      parseInt(computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]))\n    : 0 \n  );\n}\n\nexport default function getWindowSizes(document) {\n  const body = document.body;\n  const html = document.documentElement;\n  const computedStyle = isIE(10) && getComputedStyle(html);\n\n  return {\n    height: getSize('Height', body, html, computedStyle),\n    width: getSize('Width', body, html, computedStyle),\n  };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n  return {\n    ...offsets,\n    right: offsets.left + offsets.width,\n    bottom: offsets.top + offsets.height,\n  };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n  let rect = {};\n\n  // IE10 10 FIX: Please, don't ask, the element isn't\n  // considered in DOM in some circumstances...\n  // This isn't reproducible in IE10 compatibility mode of IE11\n  try {\n    if (isIE(10)) {\n      rect = element.getBoundingClientRect();\n      const scrollTop = getScroll(element, 'top');\n      const scrollLeft = getScroll(element, 'left');\n      rect.top += scrollTop;\n      rect.left += scrollLeft;\n      rect.bottom += scrollTop;\n      rect.right += scrollLeft;\n    }\n    else {\n      rect = element.getBoundingClientRect();\n    }\n  }\n  catch(e){}\n\n  const result = {\n    left: rect.left,\n    top: rect.top,\n    width: rect.right - rect.left,\n    height: rect.bottom - rect.top,\n  };\n\n  // subtract scrollbar size from sizes\n  const sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n  const width =\n    sizes.width || element.clientWidth || result.width;\n  const height =\n    sizes.height || element.clientHeight || result.height;\n\n  let horizScrollbar = element.offsetWidth - width;\n  let vertScrollbar = element.offsetHeight - height;\n\n  // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n  // we make this check conditional for performance reasons\n  if (horizScrollbar || vertScrollbar) {\n    const styles = getStyleComputedProperty(element);\n    horizScrollbar -= getBordersSize(styles, 'x');\n    vertScrollbar -= getBordersSize(styles, 'y');\n\n    result.width -= horizScrollbar;\n    result.height -= vertScrollbar;\n  }\n\n  return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n  const isIE10 = runIsIE(10);\n  const isHTML = parent.nodeName === 'HTML';\n  const childrenRect = getBoundingClientRect(children);\n  const parentRect = getBoundingClientRect(parent);\n  const scrollParent = getScrollParent(children);\n\n  const styles = getStyleComputedProperty(parent);\n  const borderTopWidth = parseFloat(styles.borderTopWidth);\n  const borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n  // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n  if(fixedPosition && isHTML) {\n    parentRect.top = Math.max(parentRect.top, 0);\n    parentRect.left = Math.max(parentRect.left, 0);\n  }\n  let offsets = getClientRect({\n    top: childrenRect.top - parentRect.top - borderTopWidth,\n    left: childrenRect.left - parentRect.left - borderLeftWidth,\n    width: childrenRect.width,\n    height: childrenRect.height,\n  });\n  offsets.marginTop = 0;\n  offsets.marginLeft = 0;\n\n  // Subtract margins of documentElement in case it's being used as parent\n  // we do this only on HTML because it's the only element that behaves\n  // differently when margins are applied to it. The margins are included in\n  // the box of the documentElement, in the other cases not.\n  if (!isIE10 && isHTML) {\n    const marginTop = parseFloat(styles.marginTop);\n    const marginLeft = parseFloat(styles.marginLeft);\n\n    offsets.top -= borderTopWidth - marginTop;\n    offsets.bottom -= borderTopWidth - marginTop;\n    offsets.left -= borderLeftWidth - marginLeft;\n    offsets.right -= borderLeftWidth - marginLeft;\n\n    // Attach marginTop and marginLeft because in some circumstances we may need them\n    offsets.marginTop = marginTop;\n    offsets.marginLeft = marginLeft;\n  }\n\n  if (\n    isIE10 && !fixedPosition\n      ? parent.contains(scrollParent)\n      : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n  ) {\n    offsets = includeScroll(offsets, parent);\n  }\n\n  return offsets;\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n  const scrollTop = getScroll(element, 'top');\n  const scrollLeft = getScroll(element, 'left');\n  const modifier = subtract ? -1 : 1;\n  rect.top += scrollTop * modifier;\n  rect.bottom += scrollTop * modifier;\n  rect.left += scrollLeft * modifier;\n  rect.right += scrollLeft * modifier;\n  return rect;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n  const nodeName = element.nodeName;\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    return false;\n  }\n  if (getStyleComputedProperty(element, 'position') === 'fixed') {\n    return true;\n  }\n  const parentNode = getParentNode(element);\n  if (!parentNode) {\n    return false;\n  }\n  return isFixed(parentNode);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n   if (!element || !element.parentElement || isIE()) {\n    return document.documentElement;\n  }\n  let el = element.parentElement;\n  while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n    el = el.parentElement;\n  }\n  return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport getReferenceNode from './getReferenceNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n  popper,\n  reference,\n  padding,\n  boundariesElement,\n  fixedPosition = false\n) {\n  // NOTE: 1 DOM access here\n\n  let boundaries = { top: 0, left: 0 };\n  const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n  // Handle viewport case\n  if (boundariesElement === 'viewport' ) {\n    boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n  }\n\n  else {\n    // Handle other cases based on DOM element used as boundaries\n    let boundariesNode;\n    if (boundariesElement === 'scrollParent') {\n      boundariesNode = getScrollParent(getParentNode(reference));\n      if (boundariesNode.nodeName === 'BODY') {\n        boundariesNode = popper.ownerDocument.documentElement;\n      }\n    } else if (boundariesElement === 'window') {\n      boundariesNode = popper.ownerDocument.documentElement;\n    } else {\n      boundariesNode = boundariesElement;\n    }\n\n    const offsets = getOffsetRectRelativeToArbitraryNode(\n      boundariesNode,\n      offsetParent,\n      fixedPosition\n    );\n\n    // In case of HTML, we need a different computation\n    if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n      const { height, width } = getWindowSizes(popper.ownerDocument);\n      boundaries.top += offsets.top - offsets.marginTop;\n      boundaries.bottom = height + offsets.top;\n      boundaries.left += offsets.left - offsets.marginLeft;\n      boundaries.right = width + offsets.left;\n    } else {\n      // for all the other DOM elements, this one is good\n      boundaries = offsets;\n    }\n  }\n\n  // Add paddings\n  padding = padding || 0;\n  const isPaddingNumber = typeof padding === 'number';\n  boundaries.left += isPaddingNumber ? padding : padding.left || 0; \n  boundaries.top += isPaddingNumber ? padding : padding.top || 0; \n  boundaries.right -= isPaddingNumber ? padding : padding.right || 0; \n  boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0; \n\n  return boundaries;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n  const html = element.ownerDocument.documentElement;\n  const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n  const width = Math.max(html.clientWidth, window.innerWidth || 0);\n  const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n  const scrollTop = !excludeScroll ? getScroll(html) : 0;\n  const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n  const offset = {\n    top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n    left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n    width,\n    height,\n  };\n\n  return getClientRect(offset);\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n  return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n  placement,\n  refRect,\n  popper,\n  reference,\n  boundariesElement,\n  padding = 0\n) {\n  if (placement.indexOf('auto') === -1) {\n    return placement;\n  }\n\n  const boundaries = getBoundaries(\n    popper,\n    reference,\n    padding,\n    boundariesElement\n  );\n\n  const rects = {\n    top: {\n      width: boundaries.width,\n      height: refRect.top - boundaries.top,\n    },\n    right: {\n      width: boundaries.right - refRect.right,\n      height: boundaries.height,\n    },\n    bottom: {\n      width: boundaries.width,\n      height: boundaries.bottom - refRect.bottom,\n    },\n    left: {\n      width: refRect.left - boundaries.left,\n      height: boundaries.height,\n    },\n  };\n\n  const sortedAreas = Object.keys(rects)\n    .map(key => ({\n      key,\n      ...rects[key],\n      area: getArea(rects[key]),\n    }))\n    .sort((a, b) => b.area - a.area);\n\n  const filteredAreas = sortedAreas.filter(\n    ({ width, height }) =>\n      width >= popper.clientWidth && height >= popper.clientHeight\n  );\n\n  const computedPlacement = filteredAreas.length > 0\n    ? filteredAreas[0].key\n    : sortedAreas[0].key;\n\n  const variation = placement.split('-')[1];\n\n  return computedPlacement + (variation ? `-${variation}` : '');\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\nimport getReferenceNode from './getReferenceNode';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n  const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n  return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n  const window = element.ownerDocument.defaultView;\n  const styles = window.getComputedStyle(element);\n  const x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n  const y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n  const result = {\n    width: element.offsetWidth + y,\n    height: element.offsetHeight + x,\n  };\n  return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n  const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n  return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n  placement = placement.split('-')[0];\n\n  // Get popper node sizes\n  const popperRect = getOuterSizes(popper);\n\n  // Add position, width and height to our offsets object\n  const popperOffsets = {\n    width: popperRect.width,\n    height: popperRect.height,\n  };\n\n  // depending by the popper placement we have to compute its offsets slightly differently\n  const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n  const mainSide = isHoriz ? 'top' : 'left';\n  const secondarySide = isHoriz ? 'left' : 'top';\n  const measurement = isHoriz ? 'height' : 'width';\n  const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n  popperOffsets[mainSide] =\n    referenceOffsets[mainSide] +\n    referenceOffsets[measurement] / 2 -\n    popperRect[measurement] / 2;\n  if (placement === secondarySide) {\n    popperOffsets[secondarySide] =\n      referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n  } else {\n    popperOffsets[secondarySide] =\n      referenceOffsets[getOppositePlacement(secondarySide)];\n  }\n\n  return popperOffsets;\n}\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n  // use native find if supported\n  if (Array.prototype.find) {\n    return arr.find(check);\n  }\n\n  // use `filter` to obtain the same behavior of `find`\n  return arr.filter(check)[0];\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n  const modifiersToRun = ends === undefined\n    ? modifiers\n    : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n  modifiersToRun.forEach(modifier => {\n    if (modifier['function']) { // eslint-disable-line dot-notation\n      console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n    }\n    const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n    if (modifier.enabled && isFunction(fn)) {\n      // Add properties to offsets to make them a complete clientRect object\n      // we do this before each modifier to make sure the previous one doesn't\n      // mess with these values\n      data.offsets.popper = getClientRect(data.offsets.popper);\n      data.offsets.reference = getClientRect(data.offsets.reference);\n\n      data = fn(data, modifier);\n    }\n  });\n\n  return data;\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n  // use native findIndex if supported\n  if (Array.prototype.findIndex) {\n    return arr.findIndex(cur => cur[prop] === value);\n  }\n\n  // use `find` + `indexOf` if `findIndex` isn't supported\n  const match = find(arr, obj => obj[prop] === value);\n  return arr.indexOf(match);\n}\n","import computeAutoPlacement from '../utils/computeAutoPlacement';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nexport default function update() {\n  // if popper is destroyed, don't perform any further update\n  if (this.state.isDestroyed) {\n    return;\n  }\n\n  let data = {\n    instance: this,\n    styles: {},\n    arrowStyles: {},\n    attributes: {},\n    flipped: false,\n    offsets: {},\n  };\n\n  // compute reference element offsets\n  data.offsets.reference = getReferenceOffsets(\n    this.state,\n    this.popper,\n    this.reference,\n    this.options.positionFixed\n  );\n\n  // compute auto placement, store placement inside the data object,\n  // modifiers will be able to edit `placement` if needed\n  // and refer to originalPlacement to know the original value\n  data.placement = computeAutoPlacement(\n    this.options.placement,\n    data.offsets.reference,\n    this.popper,\n    this.reference,\n    this.options.modifiers.flip.boundariesElement,\n    this.options.modifiers.flip.padding\n  );\n\n  // store the computed placement inside `originalPlacement`\n  data.originalPlacement = data.placement;\n\n  data.positionFixed = this.options.positionFixed;\n\n  // compute the popper offsets\n  data.offsets.popper = getPopperOffsets(\n    this.popper,\n    data.offsets.reference,\n    data.placement\n  );\n\n  data.offsets.popper.position = this.options.positionFixed\n    ? 'fixed'\n    : 'absolute';\n\n  // run the modifiers\n  data = runModifiers(this.modifiers, data);\n\n  // the first `update` will call `onCreate` callback\n  // the other ones will call `onUpdate` callback\n  if (!this.state.isCreated) {\n    this.state.isCreated = true;\n    this.options.onCreate(data);\n  } else {\n    this.options.onUpdate(data);\n  }\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n  return modifiers.some(\n    ({ name, enabled }) => enabled && name === modifierName\n  );\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n  const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n  const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n  for (let i = 0; i < prefixes.length; i++) {\n    const prefix = prefixes[i];\n    const toCheck = prefix ? `${prefix}${upperProp}` : property;\n    if (typeof document.body.style[toCheck] !== 'undefined') {\n      return toCheck;\n    }\n  }\n  return null;\n}\n","import isModifierEnabled from '../utils/isModifierEnabled';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nexport default function destroy() {\n  this.state.isDestroyed = true;\n\n  // touch DOM only if `applyStyle` modifier is enabled\n  if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n    this.popper.removeAttribute('x-placement');\n    this.popper.style.position = '';\n    this.popper.style.top = '';\n    this.popper.style.left = '';\n    this.popper.style.right = '';\n    this.popper.style.bottom = '';\n    this.popper.style.willChange = '';\n    this.popper.style[getSupportedPropertyName('transform')] = '';\n  }\n\n  this.disableEventListeners();\n\n  // remove the popper if user explicitly asked for the deletion on destroy\n  // do not use `remove` because IE11 doesn't support it\n  if (this.options.removeOnDestroy) {\n    this.popper.parentNode.removeChild(this.popper);\n  }\n  return this;\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n  const ownerDocument = element.ownerDocument;\n  return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n  const isBody = scrollParent.nodeName === 'BODY';\n  const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n  target.addEventListener(event, callback, { passive: true });\n\n  if (!isBody) {\n    attachToScrollParents(\n      getScrollParent(target.parentNode),\n      event,\n      callback,\n      scrollParents\n    );\n  }\n  scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n  reference,\n  options,\n  state,\n  updateBound\n) {\n  // Resize event listener on window\n  state.updateBound = updateBound;\n  getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n  // Scroll event listener on scroll parents\n  const scrollElement = getScrollParent(reference);\n  attachToScrollParents(\n    scrollElement,\n    'scroll',\n    state.updateBound,\n    state.scrollParents\n  );\n  state.scrollElement = scrollElement;\n  state.eventsEnabled = true;\n\n  return state;\n}\n","import setupEventListeners from '../utils/setupEventListeners';\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nexport default function enableEventListeners() {\n  if (!this.state.eventsEnabled) {\n    this.state = setupEventListeners(\n      this.reference,\n      this.options,\n      this.state,\n      this.scheduleUpdate\n    );\n  }\n}\n","import removeEventListeners from '../utils/removeEventListeners';\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nexport default function disableEventListeners() {\n  if (this.state.eventsEnabled) {\n    cancelAnimationFrame(this.scheduleUpdate);\n    this.state = removeEventListeners(this.reference, this.state);\n  }\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n  // Remove resize event listener on window\n  getWindow(reference).removeEventListener('resize', state.updateBound);\n\n  // Remove scroll event listener on scroll parents\n  state.scrollParents.forEach(target => {\n    target.removeEventListener('scroll', state.updateBound);\n  });\n\n  // Reset state\n  state.updateBound = null;\n  state.scrollParents = [];\n  state.scrollElement = null;\n  state.eventsEnabled = false;\n  return state;\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n  return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n  Object.keys(styles).forEach(prop => {\n    let unit = '';\n    // add unit if the value is numeric and is one of the following\n    if (\n      ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n        -1 &&\n      isNumeric(styles[prop])\n    ) {\n      unit = 'px';\n    }\n    element.style[prop] = styles[prop] + unit;\n  });\n}\n","import getSupportedPropertyName from '../utils/getSupportedPropertyName';\nimport find from '../utils/find';\nimport getOffsetParent from '../utils/getOffsetParent';\nimport getBoundingClientRect from '../utils/getBoundingClientRect';\nimport getRoundedOffsets from '../utils/getRoundedOffsets';\nimport isBrowser from '../utils/isBrowser';\n\nconst isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeStyle(data, options) {\n  const { x, y } = options;\n  const { popper } = data.offsets;\n\n  // Remove this legacy support in Popper.js v2\n  const legacyGpuAccelerationOption = find(\n    data.instance.modifiers,\n    modifier => modifier.name === 'applyStyle'\n  ).gpuAcceleration;\n  if (legacyGpuAccelerationOption !== undefined) {\n    console.warn(\n      'WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'\n    );\n  }\n  const gpuAcceleration =\n    legacyGpuAccelerationOption !== undefined\n      ? legacyGpuAccelerationOption\n      : options.gpuAcceleration;\n\n  const offsetParent = getOffsetParent(data.instance.popper);\n  const offsetParentRect = getBoundingClientRect(offsetParent);\n\n  // Styles\n  const styles = {\n    position: popper.position,\n  };\n\n  const offsets = getRoundedOffsets(\n    data,\n    window.devicePixelRatio < 2 || !isFirefox\n  );\n\n  const sideA = x === 'bottom' ? 'top' : 'bottom';\n  const sideB = y === 'right' ? 'left' : 'right';\n\n  // if gpuAcceleration is set to `true` and transform is supported,\n  //  we use `translate3d` to apply the position to the popper we\n  // automatically use the supported prefixed version if needed\n  const prefixedProperty = getSupportedPropertyName('transform');\n\n  // now, let's make a step back and look at this code closely (wtf?)\n  // If the content of the popper grows once it's been positioned, it\n  // may happen that the popper gets misplaced because of the new content\n  // overflowing its reference element\n  // To avoid this problem, we provide two options (x and y), which allow\n  // the consumer to define the offset origin.\n  // If we position a popper on top of a reference element, we can set\n  // `x` to `top` to make the popper grow towards its top instead of\n  // its bottom.\n  let left, top;\n  if (sideA === 'bottom') {\n    // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n    // and not the bottom of the html element\n    if (offsetParent.nodeName === 'HTML') {\n      top = -offsetParent.clientHeight + offsets.bottom;\n    } else {\n      top = -offsetParentRect.height + offsets.bottom;\n    }\n  } else {\n    top = offsets.top;\n  }\n  if (sideB === 'right') {\n    if (offsetParent.nodeName === 'HTML') {\n      left = -offsetParent.clientWidth + offsets.right;\n    } else {\n      left = -offsetParentRect.width + offsets.right;\n    }\n  } else {\n    left = offsets.left;\n  }\n  if (gpuAcceleration && prefixedProperty) {\n    styles[prefixedProperty] = `translate3d(${left}px, ${top}px, 0)`;\n    styles[sideA] = 0;\n    styles[sideB] = 0;\n    styles.willChange = 'transform';\n  } else {\n    // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n    const invertTop = sideA === 'bottom' ? -1 : 1;\n    const invertLeft = sideB === 'right' ? -1 : 1;\n    styles[sideA] = top * invertTop;\n    styles[sideB] = left * invertLeft;\n    styles.willChange = `${sideA}, ${sideB}`;\n  }\n\n  // Attributes\n  const attributes = {\n    'x-placement': data.placement,\n  };\n\n  // Update `data` attributes, styles and arrowStyles\n  data.attributes = { ...attributes, ...data.attributes };\n  data.styles = { ...styles, ...data.styles };\n  data.arrowStyles = { ...data.offsets.arrow, ...data.arrowStyles };\n\n  return data;\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n  modifiers,\n  requestingName,\n  requestedName\n) {\n  const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n  const isRequired =\n    !!requesting &&\n    modifiers.some(modifier => {\n      return (\n        modifier.name === requestedName &&\n        modifier.enabled &&\n        modifier.order < requesting.order\n      );\n    });\n\n  if (!isRequired) {\n    const requesting = `\\`${requestingName}\\``;\n    const requested = `\\`${requestedName}\\``;\n    console.warn(\n      `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n    );\n  }\n  return isRequired;\n}\n","/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nexport default [\n  'auto-start',\n  'auto',\n  'auto-end',\n  'top-start',\n  'top',\n  'top-end',\n  'right-start',\n  'right',\n  'right-end',\n  'bottom-end',\n  'bottom',\n  'bottom-start',\n  'left-end',\n  'left',\n  'left-start',\n];\n","import placements from '../methods/placements';\n\n// Get rid of `auto` `auto-start` and `auto-end`\nconst validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nexport default function clockwise(placement, counter = false) {\n  const index = validPlacements.indexOf(placement);\n  const arr = validPlacements\n    .slice(index + 1)\n    .concat(validPlacements.slice(0, index));\n  return counter ? arr.reverse() : arr;\n}\n","import applyStyle, { applyStyleOnLoad } from './applyStyle';\nimport computeStyle from './computeStyle';\nimport arrow from './arrow';\nimport flip from './flip';\nimport keepTogether from './keepTogether';\nimport offset from './offset';\nimport preventOverflow from './preventOverflow';\nimport shift from './shift';\nimport hide from './hide';\nimport inner from './inner';\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nexport default {\n  /**\n   * Modifier used to shift the popper on the start or end of its reference\n   * element.<br />\n   * It will read the variation of the `placement` property.<br />\n   * It can be one either `-end` or `-start`.\n   * @memberof modifiers\n   * @inner\n   */\n  shift: {\n    /** @prop {number} order=100 - Index used to define the order of execution */\n    order: 100,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: shift,\n  },\n\n  /**\n   * The `offset` modifier can shift your popper on both its axis.\n   *\n   * It accepts the following units:\n   * - `px` or unit-less, interpreted as pixels\n   * - `%` or `%r`, percentage relative to the length of the reference element\n   * - `%p`, percentage relative to the length of the popper element\n   * - `vw`, CSS viewport width unit\n   * - `vh`, CSS viewport height unit\n   *\n   * For length is intended the main axis relative to the placement of the popper.<br />\n   * This means that if the placement is `top` or `bottom`, the length will be the\n   * `width`. In case of `left` or `right`, it will be the `height`.\n   *\n   * You can provide a single value (as `Number` or `String`), or a pair of values\n   * as `String` divided by a comma or one (or more) white spaces.<br />\n   * The latter is a deprecated method because it leads to confusion and will be\n   * removed in v2.<br />\n   * Additionally, it accepts additions and subtractions between different units.\n   * Note that multiplications and divisions aren't supported.\n   *\n   * Valid examples are:\n   * ```\n   * 10\n   * '10%'\n   * '10, 10'\n   * '10%, 10'\n   * '10 + 10%'\n   * '10 - 5vh + 3%'\n   * '-10px + 5vh, 5px - 6%'\n   * ```\n   * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n   * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n   * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  offset: {\n    /** @prop {number} order=200 - Index used to define the order of execution */\n    order: 200,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: offset,\n    /** @prop {Number|String} offset=0\n     * The offset value as described in the modifier description\n     */\n    offset: 0,\n  },\n\n  /**\n   * Modifier used to prevent the popper from being positioned outside the boundary.\n   *\n   * A scenario exists where the reference itself is not within the boundaries.<br />\n   * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n   * In this case we need to decide whether the popper should either:\n   *\n   * - detach from the reference and remain \"trapped\" in the boundaries, or\n   * - if it should ignore the boundary and \"escape with its reference\"\n   *\n   * When `escapeWithReference` is set to`true` and reference is completely\n   * outside its boundaries, the popper will overflow (or completely leave)\n   * the boundaries in order to remain attached to the edge of the reference.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  preventOverflow: {\n    /** @prop {number} order=300 - Index used to define the order of execution */\n    order: 300,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: preventOverflow,\n    /**\n     * @prop {Array} [priority=['left','right','top','bottom']]\n     * Popper will try to prevent overflow following these priorities by default,\n     * then, it could overflow on the left and on top of the `boundariesElement`\n     */\n    priority: ['left', 'right', 'top', 'bottom'],\n    /**\n     * @prop {number} padding=5\n     * Amount of pixel used to define a minimum distance between the boundaries\n     * and the popper. This makes sure the popper always has a little padding\n     * between the edges of its container\n     */\n    padding: 5,\n    /**\n     * @prop {String|HTMLElement} boundariesElement='scrollParent'\n     * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n     * `viewport` or any DOM element.\n     */\n    boundariesElement: 'scrollParent',\n  },\n\n  /**\n   * Modifier used to make sure the reference and its popper stay near each other\n   * without leaving any gap between the two. Especially useful when the arrow is\n   * enabled and you want to ensure that it points to its reference element.\n   * It cares only about the first axis. You can still have poppers with margin\n   * between the popper and its reference element.\n   * @memberof modifiers\n   * @inner\n   */\n  keepTogether: {\n    /** @prop {number} order=400 - Index used to define the order of execution */\n    order: 400,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: keepTogether,\n  },\n\n  /**\n   * This modifier is used to move the `arrowElement` of the popper to make\n   * sure it is positioned between the reference element and its popper element.\n   * It will read the outer size of the `arrowElement` node to detect how many\n   * pixels of conjunction are needed.\n   *\n   * It has no effect if no `arrowElement` is provided.\n   * @memberof modifiers\n   * @inner\n   */\n  arrow: {\n    /** @prop {number} order=500 - Index used to define the order of execution */\n    order: 500,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: arrow,\n    /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n    element: '[x-arrow]',\n  },\n\n  /**\n   * Modifier used to flip the popper's placement when it starts to overlap its\n   * reference element.\n   *\n   * Requires the `preventOverflow` modifier before it in order to work.\n   *\n   * **NOTE:** this modifier will interrupt the current update cycle and will\n   * restart it if it detects the need to flip the placement.\n   * @memberof modifiers\n   * @inner\n   */\n  flip: {\n    /** @prop {number} order=600 - Index used to define the order of execution */\n    order: 600,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: flip,\n    /**\n     * @prop {String|Array} behavior='flip'\n     * The behavior used to change the popper's placement. It can be one of\n     * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n     * placements (with optional variations)\n     */\n    behavior: 'flip',\n    /**\n     * @prop {number} padding=5\n     * The popper will flip if it hits the edges of the `boundariesElement`\n     */\n    padding: 5,\n    /**\n     * @prop {String|HTMLElement} boundariesElement='viewport'\n     * The element which will define the boundaries of the popper position.\n     * The popper will never be placed outside of the defined boundaries\n     * (except if `keepTogether` is enabled)\n     */\n    boundariesElement: 'viewport',\n    /**\n     * @prop {Boolean} flipVariations=false\n     * The popper will switch placement variation between `-start` and `-end` when\n     * the reference element overlaps its boundaries.\n     *\n     * The original placement should have a set variation.\n     */\n    flipVariations: false,\n    /**\n     * @prop {Boolean} flipVariationsByContent=false\n     * The popper will switch placement variation between `-start` and `-end` when\n     * the popper element overlaps its reference boundaries.\n     *\n     * The original placement should have a set variation.\n     */\n    flipVariationsByContent: false,\n  },\n\n  /**\n   * Modifier used to make the popper flow toward the inner of the reference element.\n   * By default, when this modifier is disabled, the popper will be placed outside\n   * the reference element.\n   * @memberof modifiers\n   * @inner\n   */\n  inner: {\n    /** @prop {number} order=700 - Index used to define the order of execution */\n    order: 700,\n    /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n    enabled: false,\n    /** @prop {ModifierFn} */\n    fn: inner,\n  },\n\n  /**\n   * Modifier used to hide the popper when its reference element is outside of the\n   * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n   * be used to hide with a CSS selector the popper when its reference is\n   * out of boundaries.\n   *\n   * Requires the `preventOverflow` modifier before it in order to work.\n   * @memberof modifiers\n   * @inner\n   */\n  hide: {\n    /** @prop {number} order=800 - Index used to define the order of execution */\n    order: 800,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: hide,\n  },\n\n  /**\n   * Computes the style that will be applied to the popper element to gets\n   * properly positioned.\n   *\n   * Note that this modifier will not touch the DOM, it just prepares the styles\n   * so that `applyStyle` modifier can apply it. This separation is useful\n   * in case you need to replace `applyStyle` with a custom implementation.\n   *\n   * This modifier has `850` as `order` value to maintain backward compatibility\n   * with previous versions of Popper.js. Expect the modifiers ordering method\n   * to change in future major versions of the library.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  computeStyle: {\n    /** @prop {number} order=850 - Index used to define the order of execution */\n    order: 850,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: computeStyle,\n    /**\n     * @prop {Boolean} gpuAcceleration=true\n     * If true, it uses the CSS 3D transformation to position the popper.\n     * Otherwise, it will use the `top` and `left` properties\n     */\n    gpuAcceleration: true,\n    /**\n     * @prop {string} [x='bottom']\n     * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n     * Change this if your popper should grow in a direction different from `bottom`\n     */\n    x: 'bottom',\n    /**\n     * @prop {string} [x='left']\n     * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n     * Change this if your popper should grow in a direction different from `right`\n     */\n    y: 'right',\n  },\n\n  /**\n   * Applies the computed styles to the popper element.\n   *\n   * All the DOM manipulations are limited to this modifier. This is useful in case\n   * you want to integrate Popper.js inside a framework or view library and you\n   * want to delegate all the DOM manipulations to it.\n   *\n   * Note that if you disable this modifier, you must make sure the popper element\n   * has its position set to `absolute` before Popper.js can do its work!\n   *\n   * Just disable this modifier and define your own to achieve the desired effect.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  applyStyle: {\n    /** @prop {number} order=900 - Index used to define the order of execution */\n    order: 900,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: applyStyle,\n    /** @prop {Function} */\n    onLoad: applyStyleOnLoad,\n    /**\n     * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n     * @prop {Boolean} gpuAcceleration=true\n     * If true, it uses the CSS 3D transformation to position the popper.\n     * Otherwise, it will use the `top` and `left` properties\n     */\n    gpuAcceleration: undefined,\n  },\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function shift(data) {\n  const placement = data.placement;\n  const basePlacement = placement.split('-')[0];\n  const shiftvariation = placement.split('-')[1];\n\n  // if shift shiftvariation is specified, run the modifier\n  if (shiftvariation) {\n    const { reference, popper } = data.offsets;\n    const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n    const side = isVertical ? 'left' : 'top';\n    const measurement = isVertical ? 'width' : 'height';\n\n    const shiftOffsets = {\n      start: { [side]: reference[side] },\n      end: {\n        [side]: reference[side] + reference[measurement] - popper[measurement],\n      },\n    };\n\n    data.offsets.popper = { ...popper, ...shiftOffsets[shiftvariation] };\n  }\n\n  return data;\n}\n","import isNumeric from '../utils/isNumeric';\nimport getClientRect from '../utils/getClientRect';\nimport find from '../utils/find';\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nexport function toValue(str, measurement, popperOffsets, referenceOffsets) {\n  // separate value from unit\n  const split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n  const value = +split[1];\n  const unit = split[2];\n\n  // If it's not a number it's an operator, I guess\n  if (!value) {\n    return str;\n  }\n\n  if (unit.indexOf('%') === 0) {\n    let element;\n    switch (unit) {\n      case '%p':\n        element = popperOffsets;\n        break;\n      case '%':\n      case '%r':\n      default:\n        element = referenceOffsets;\n    }\n\n    const rect = getClientRect(element);\n    return rect[measurement] / 100 * value;\n  } else if (unit === 'vh' || unit === 'vw') {\n    // if is a vh or vw, we calculate the size based on the viewport\n    let size;\n    if (unit === 'vh') {\n      size = Math.max(\n        document.documentElement.clientHeight,\n        window.innerHeight || 0\n      );\n    } else {\n      size = Math.max(\n        document.documentElement.clientWidth,\n        window.innerWidth || 0\n      );\n    }\n    return size / 100 * value;\n  } else {\n    // if is an explicit pixel unit, we get rid of the unit and keep the value\n    // if is an implicit unit, it's px, and we return just the value\n    return value;\n  }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nexport function parseOffset(\n  offset,\n  popperOffsets,\n  referenceOffsets,\n  basePlacement\n) {\n  const offsets = [0, 0];\n\n  // Use height if placement is left or right and index is 0 otherwise use width\n  // in this way the first offset will use an axis and the second one\n  // will use the other one\n  const useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n  // Split the offset string to obtain a list of values and operands\n  // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n  const fragments = offset.split(/(\\+|\\-)/).map(frag => frag.trim());\n\n  // Detect if the offset string contains a pair of values or a single one\n  // they could be separated by comma or space\n  const divider = fragments.indexOf(\n    find(fragments, frag => frag.search(/,|\\s/) !== -1)\n  );\n\n  if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n    console.warn(\n      'Offsets separated by white space(s) are deprecated, use a comma (,) instead.'\n    );\n  }\n\n  // If divider is found, we divide the list of values and operands to divide\n  // them by ofset X and Y.\n  const splitRegex = /\\s*,\\s*|\\s+/;\n  let ops = divider !== -1\n    ? [\n        fragments\n          .slice(0, divider)\n          .concat([fragments[divider].split(splitRegex)[0]]),\n        [fragments[divider].split(splitRegex)[1]].concat(\n          fragments.slice(divider + 1)\n        ),\n      ]\n    : [fragments];\n\n  // Convert the values with units to absolute pixels to allow our computations\n  ops = ops.map((op, index) => {\n    // Most of the units rely on the orientation of the popper\n    const measurement = (index === 1 ? !useHeight : useHeight)\n      ? 'height'\n      : 'width';\n    let mergeWithPrevious = false;\n    return (\n      op\n        // This aggregates any `+` or `-` sign that aren't considered operators\n        // e.g.: 10 + +5 => [10, +, +5]\n        .reduce((a, b) => {\n          if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n            a[a.length - 1] = b;\n            mergeWithPrevious = true;\n            return a;\n          } else if (mergeWithPrevious) {\n            a[a.length - 1] += b;\n            mergeWithPrevious = false;\n            return a;\n          } else {\n            return a.concat(b);\n          }\n        }, [])\n        // Here we convert the string values into number values (in px)\n        .map(str => toValue(str, measurement, popperOffsets, referenceOffsets))\n    );\n  });\n\n  // Loop trough the offsets arrays and execute the operations\n  ops.forEach((op, index) => {\n    op.forEach((frag, index2) => {\n      if (isNumeric(frag)) {\n        offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n      }\n    });\n  });\n  return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nexport default function offset(data, { offset }) {\n  const { placement, offsets: { popper, reference } } = data;\n  const basePlacement = placement.split('-')[0];\n\n  let offsets;\n  if (isNumeric(+offset)) {\n    offsets = [+offset, 0];\n  } else {\n    offsets = parseOffset(offset, popper, reference, basePlacement);\n  }\n\n  if (basePlacement === 'left') {\n    popper.top += offsets[0];\n    popper.left -= offsets[1];\n  } else if (basePlacement === 'right') {\n    popper.top += offsets[0];\n    popper.left += offsets[1];\n  } else if (basePlacement === 'top') {\n    popper.left += offsets[0];\n    popper.top -= offsets[1];\n  } else if (basePlacement === 'bottom') {\n    popper.left += offsets[0];\n    popper.top += offsets[1];\n  }\n\n  data.popper = popper;\n  return data;\n}\n","import getOffsetParent from '../utils/getOffsetParent';\nimport getBoundaries from '../utils/getBoundaries';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function preventOverflow(data, options) {\n  let boundariesElement =\n    options.boundariesElement || getOffsetParent(data.instance.popper);\n\n  // If offsetParent is the reference element, we really want to\n  // go one step up and use the next offsetParent as reference to\n  // avoid to make this modifier completely useless and look like broken\n  if (data.instance.reference === boundariesElement) {\n    boundariesElement = getOffsetParent(boundariesElement);\n  }\n\n  // NOTE: DOM access here\n  // resets the popper's position so that the document size can be calculated excluding\n  // the size of the popper element itself\n  const transformProp = getSupportedPropertyName('transform');\n  const popperStyles = data.instance.popper.style; // assignment to help minification\n  const { top, left, [transformProp]: transform } = popperStyles;\n  popperStyles.top = '';\n  popperStyles.left = '';\n  popperStyles[transformProp] = '';\n\n  const boundaries = getBoundaries(\n    data.instance.popper,\n    data.instance.reference,\n    options.padding,\n    boundariesElement,\n    data.positionFixed\n  );\n\n  // NOTE: DOM access here\n  // restores the original style properties after the offsets have been computed\n  popperStyles.top = top;\n  popperStyles.left = left;\n  popperStyles[transformProp] = transform;\n\n  options.boundaries = boundaries;\n\n  const order = options.priority;\n  let popper = data.offsets.popper;\n\n  const check = {\n    primary(placement) {\n      let value = popper[placement];\n      if (\n        popper[placement] < boundaries[placement] &&\n        !options.escapeWithReference\n      ) {\n        value = Math.max(popper[placement], boundaries[placement]);\n      }\n      return { [placement]: value };\n    },\n    secondary(placement) {\n      const mainSide = placement === 'right' ? 'left' : 'top';\n      let value = popper[mainSide];\n      if (\n        popper[placement] > boundaries[placement] &&\n        !options.escapeWithReference\n      ) {\n        value = Math.min(\n          popper[mainSide],\n          boundaries[placement] -\n            (placement === 'right' ? popper.width : popper.height)\n        );\n      }\n      return { [mainSide]: value };\n    },\n  };\n\n  order.forEach(placement => {\n    const side =\n      ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n    popper = { ...popper, ...check[side](placement) };\n  });\n\n  data.offsets.popper = popper;\n\n  return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function keepTogether(data) {\n  const { popper, reference } = data.offsets;\n  const placement = data.placement.split('-')[0];\n  const floor = Math.floor;\n  const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n  const side = isVertical ? 'right' : 'bottom';\n  const opSide = isVertical ? 'left' : 'top';\n  const measurement = isVertical ? 'width' : 'height';\n\n  if (popper[side] < floor(reference[opSide])) {\n    data.offsets.popper[opSide] =\n      floor(reference[opSide]) - popper[measurement];\n  }\n  if (popper[opSide] > floor(reference[side])) {\n    data.offsets.popper[opSide] = floor(reference[side]);\n  }\n\n  return data;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOuterSizes from '../utils/getOuterSizes';\nimport isModifierRequired from '../utils/isModifierRequired';\nimport getStyleComputedProperty from '../utils/getStyleComputedProperty';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function arrow(data, options) {\n  // arrow depends on keepTogether in order to work\n  if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n    return data;\n  }\n\n  let arrowElement = options.element;\n\n  // if arrowElement is a string, suppose it's a CSS selector\n  if (typeof arrowElement === 'string') {\n    arrowElement = data.instance.popper.querySelector(arrowElement);\n\n    // if arrowElement is not found, don't run the modifier\n    if (!arrowElement) {\n      return data;\n    }\n  } else {\n    // if the arrowElement isn't a query selector we must check that the\n    // provided DOM node is child of its popper node\n    if (!data.instance.popper.contains(arrowElement)) {\n      console.warn(\n        'WARNING: `arrow.element` must be child of its popper element!'\n      );\n      return data;\n    }\n  }\n\n  const placement = data.placement.split('-')[0];\n  const { popper, reference } = data.offsets;\n  const isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n  const len = isVertical ? 'height' : 'width';\n  const sideCapitalized = isVertical ? 'Top' : 'Left';\n  const side = sideCapitalized.toLowerCase();\n  const altSide = isVertical ? 'left' : 'top';\n  const opSide = isVertical ? 'bottom' : 'right';\n  const arrowElementSize = getOuterSizes(arrowElement)[len];\n\n  //\n  // extends keepTogether behavior making sure the popper and its\n  // reference have enough pixels in conjunction\n  //\n\n  // top/left side\n  if (reference[opSide] - arrowElementSize < popper[side]) {\n    data.offsets.popper[side] -=\n      popper[side] - (reference[opSide] - arrowElementSize);\n  }\n  // bottom/right side\n  if (reference[side] + arrowElementSize > popper[opSide]) {\n    data.offsets.popper[side] +=\n      reference[side] + arrowElementSize - popper[opSide];\n  }\n  data.offsets.popper = getClientRect(data.offsets.popper);\n\n  // compute center of the popper\n  const center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n  // Compute the sideValue using the updated popper offsets\n  // take popper margin in account because we don't have this info available\n  const css = getStyleComputedProperty(data.instance.popper);\n  const popperMarginSide = parseFloat(css[`margin${sideCapitalized}`]);\n  const popperBorderSide = parseFloat(css[`border${sideCapitalized}Width`]);\n  let sideValue =\n    center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n  // prevent arrowElement from being placed not contiguously to its popper\n  sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n  data.arrowElement = arrowElement;\n  data.offsets.arrow = {\n    [side]: Math.round(sideValue),\n    [altSide]: '', // make sure to unset any eventual altSide value from the DOM node\n  };\n\n  return data;\n}\n","import getOppositePlacement from '../utils/getOppositePlacement';\nimport getOppositeVariation from '../utils/getOppositeVariation';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\nimport getBoundaries from '../utils/getBoundaries';\nimport isModifierEnabled from '../utils/isModifierEnabled';\nimport clockwise from '../utils/clockwise';\n\nconst BEHAVIORS = {\n  FLIP: 'flip',\n  CLOCKWISE: 'clockwise',\n  COUNTERCLOCKWISE: 'counterclockwise',\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function flip(data, options) {\n  // if `inner` modifier is enabled, we can't use the `flip` modifier\n  if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n    return data;\n  }\n\n  if (data.flipped && data.placement === data.originalPlacement) {\n    // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n    return data;\n  }\n\n  const boundaries = getBoundaries(\n    data.instance.popper,\n    data.instance.reference,\n    options.padding,\n    options.boundariesElement,\n    data.positionFixed\n  );\n\n  let placement = data.placement.split('-')[0];\n  let placementOpposite = getOppositePlacement(placement);\n  let variation = data.placement.split('-')[1] || '';\n\n  let flipOrder = [];\n\n  switch (options.behavior) {\n    case BEHAVIORS.FLIP:\n      flipOrder = [placement, placementOpposite];\n      break;\n    case BEHAVIORS.CLOCKWISE:\n      flipOrder = clockwise(placement);\n      break;\n    case BEHAVIORS.COUNTERCLOCKWISE:\n      flipOrder = clockwise(placement, true);\n      break;\n    default:\n      flipOrder = options.behavior;\n  }\n\n  flipOrder.forEach((step, index) => {\n    if (placement !== step || flipOrder.length === index + 1) {\n      return data;\n    }\n\n    placement = data.placement.split('-')[0];\n    placementOpposite = getOppositePlacement(placement);\n\n    const popperOffsets = data.offsets.popper;\n    const refOffsets = data.offsets.reference;\n\n    // using floor because the reference offsets may contain decimals we are not going to consider here\n    const floor = Math.floor;\n    const overlapsRef =\n      (placement === 'left' &&\n        floor(popperOffsets.right) > floor(refOffsets.left)) ||\n      (placement === 'right' &&\n        floor(popperOffsets.left) < floor(refOffsets.right)) ||\n      (placement === 'top' &&\n        floor(popperOffsets.bottom) > floor(refOffsets.top)) ||\n      (placement === 'bottom' &&\n        floor(popperOffsets.top) < floor(refOffsets.bottom));\n\n    const overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n    const overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n    const overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n    const overflowsBottom =\n      floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n    const overflowsBoundaries =\n      (placement === 'left' && overflowsLeft) ||\n      (placement === 'right' && overflowsRight) ||\n      (placement === 'top' && overflowsTop) ||\n      (placement === 'bottom' && overflowsBottom);\n\n    // flip the variation if required\n    const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n    // flips variation if reference element overflows boundaries\n    const flippedVariationByRef =\n      !!options.flipVariations &&\n      ((isVertical && variation === 'start' && overflowsLeft) ||\n        (isVertical && variation === 'end' && overflowsRight) ||\n        (!isVertical && variation === 'start' && overflowsTop) ||\n        (!isVertical && variation === 'end' && overflowsBottom));\n\n    // flips variation if popper content overflows boundaries\n    const flippedVariationByContent =\n      !!options.flipVariationsByContent &&\n      ((isVertical && variation === 'start' && overflowsRight) ||\n        (isVertical && variation === 'end' && overflowsLeft) ||\n        (!isVertical && variation === 'start' && overflowsBottom) ||\n        (!isVertical && variation === 'end' && overflowsTop));\n\n    const flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n    if (overlapsRef || overflowsBoundaries || flippedVariation) {\n      // this boolean to detect any flip loop\n      data.flipped = true;\n\n      if (overlapsRef || overflowsBoundaries) {\n        placement = flipOrder[index + 1];\n      }\n\n      if (flippedVariation) {\n        variation = getOppositeVariation(variation);\n      }\n\n      data.placement = placement + (variation ? '-' + variation : '');\n\n      // this object contains `position`, we want to preserve it along with\n      // any additional property we may add in the future\n      data.offsets.popper = {\n        ...data.offsets.popper,\n        ...getPopperOffsets(\n          data.instance.popper,\n          data.offsets.reference,\n          data.placement\n        ),\n      };\n\n      data = runModifiers(data.instance.modifiers, data, 'flip');\n    }\n  });\n  return data;\n}\n","/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nexport default function getOppositeVariation(variation) {\n  if (variation === 'end') {\n    return 'start';\n  } else if (variation === 'start') {\n    return 'end';\n  }\n  return variation;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOppositePlacement from '../utils/getOppositePlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function inner(data) {\n  const placement = data.placement;\n  const basePlacement = placement.split('-')[0];\n  const { popper, reference } = data.offsets;\n  const isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n  const subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n  popper[isHoriz ? 'left' : 'top'] =\n    reference[basePlacement] -\n    (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n  data.placement = getOppositePlacement(placement);\n  data.offsets.popper = getClientRect(popper);\n\n  return data;\n}\n","import isModifierRequired from '../utils/isModifierRequired';\nimport find from '../utils/find';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function hide(data) {\n  if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n    return data;\n  }\n\n  const refRect = data.offsets.reference;\n  const bound = find(\n    data.instance.modifiers,\n    modifier => modifier.name === 'preventOverflow'\n  ).boundaries;\n\n  if (\n    refRect.bottom < bound.top ||\n    refRect.left > bound.right ||\n    refRect.top > bound.bottom ||\n    refRect.right < bound.left\n  ) {\n    // Avoid unnecessary DOM access if visibility hasn't changed\n    if (data.hide === true) {\n      return data;\n    }\n\n    data.hide = true;\n    data.attributes['x-out-of-boundaries'] = '';\n  } else {\n    // Avoid unnecessary DOM access if visibility hasn't changed\n    if (data.hide === false) {\n      return data;\n    }\n\n    data.hide = false;\n    data.attributes['x-out-of-boundaries'] = false;\n  }\n\n  return data;\n}\n","/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nexport default function getRoundedOffsets(data, shouldRound) {\n  const { popper, reference } = data.offsets;\n  const { round, floor } = Math;\n  const noRound = v => v;\n  \n  const referenceWidth = round(reference.width);\n  const popperWidth = round(popper.width);\n  \n  const isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n  const isVariation = data.placement.indexOf('-') !== -1;\n  const sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n  const bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n  const horizontalToInteger = !shouldRound\n    ? noRound\n    : isVertical || isVariation || sameWidthParity\n    ? round\n    : floor;\n  const verticalToInteger = !shouldRound ? noRound : round;\n\n  return {\n    left: horizontalToInteger(\n      bothOddWidth && !isVariation && shouldRound\n        ? popper.left - 1\n        : popper.left\n    ),\n    top: verticalToInteger(popper.top),\n    bottom: verticalToInteger(popper.bottom),\n    right: horizontalToInteger(popper.right),\n  };\n}\n","import setStyles from '../utils/setStyles';\nimport setAttributes from '../utils/setAttributes';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nexport default function applyStyle(data) {\n  // any property present in `data.styles` will be applied to the popper,\n  // in this way we can make the 3rd party modifiers add custom styles to it\n  // Be aware, modifiers could override the properties defined in the previous\n  // lines of this modifier!\n  setStyles(data.instance.popper, data.styles);\n\n  // any property present in `data.attributes` will be applied to the popper,\n  // they will be set as HTML attributes of the element\n  setAttributes(data.instance.popper, data.attributes);\n\n  // if arrowElement is defined and arrowStyles has some properties\n  if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n    setStyles(data.arrowElement, data.arrowStyles);\n  }\n\n  return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nexport function applyStyleOnLoad(\n  reference,\n  popper,\n  options,\n  modifierOptions,\n  state\n) {\n  // compute reference element offsets\n  const referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n  // compute auto placement, store placement inside the data object,\n  // modifiers will be able to edit `placement` if needed\n  // and refer to originalPlacement to know the original value\n  const placement = computeAutoPlacement(\n    options.placement,\n    referenceOffsets,\n    popper,\n    reference,\n    options.modifiers.flip.boundariesElement,\n    options.modifiers.flip.padding\n  );\n\n  popper.setAttribute('x-placement', placement);\n\n  // Apply `position` to popper before anything else because\n  // without the position applied we can't guarantee correct computations\n  setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n  return options;\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n  Object.keys(attributes).forEach(function(prop) {\n    const value = attributes[prop];\n    if (value !== false) {\n      element.setAttribute(prop, attributes[prop]);\n    } else {\n      element.removeAttribute(prop);\n    }\n  });\n}\n","import modifiers from '../modifiers/index';\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n *   modifiers: {\n *     preventOverflow: { enabled: false }\n *   }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nexport default {\n  /**\n   * Popper's placement.\n   * @prop {Popper.placements} placement='bottom'\n   */\n  placement: 'bottom',\n\n  /**\n   * Set this to true if you want popper to position it self in 'fixed' mode\n   * @prop {Boolean} positionFixed=false\n   */\n  positionFixed: false,\n\n  /**\n   * Whether events (resize, scroll) are initially enabled.\n   * @prop {Boolean} eventsEnabled=true\n   */\n  eventsEnabled: true,\n\n  /**\n   * Set to true if you want to automatically remove the popper when\n   * you call the `destroy` method.\n   * @prop {Boolean} removeOnDestroy=false\n   */\n  removeOnDestroy: false,\n\n  /**\n   * Callback called when the popper is created.<br />\n   * By default, it is set to no-op.<br />\n   * Access Popper.js instance with `data.instance`.\n   * @prop {onCreate}\n   */\n  onCreate: () => {},\n\n  /**\n   * Callback called when the popper is updated. This callback is not called\n   * on the initialization/creation of the popper, but only on subsequent\n   * updates.<br />\n   * By default, it is set to no-op.<br />\n   * Access Popper.js instance with `data.instance`.\n   * @prop {onUpdate}\n   */\n  onUpdate: () => {},\n\n  /**\n   * List of modifiers used to modify the offsets before they are applied to the popper.\n   * They provide most of the functionalities of Popper.js.\n   * @prop {modifiers}\n   */\n  modifiers,\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n","// Utils\nimport debounce from './utils/debounce';\nimport isFunction from './utils/isFunction';\n\n// Methods\nimport update from './methods/update';\nimport destroy from './methods/destroy';\nimport enableEventListeners from './methods/enableEventListeners';\nimport disableEventListeners from './methods/disableEventListeners';\nimport Defaults from './methods/defaults';\nimport placements from './methods/placements';\n\nexport default class Popper {\n  /**\n   * Creates a new Popper.js instance.\n   * @class Popper\n   * @param {Element|referenceObject} reference - The reference element used to position the popper\n   * @param {Element} popper - The HTML / XML element used as the popper\n   * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n   * @return {Object} instance - The generated Popper.js instance\n   */\n  constructor(reference, popper, options = {}) {\n    // make update() debounced, so that it only runs at most once-per-tick\n    this.update = debounce(this.update.bind(this));\n\n    // with {} we create a new object with the options inside it\n    this.options = { ...Popper.Defaults, ...options };\n\n    // init state\n    this.state = {\n      isDestroyed: false,\n      isCreated: false,\n      scrollParents: [],\n    };\n\n    // get reference and popper elements (allow jQuery wrappers)\n    this.reference = reference && reference.jquery ? reference[0] : reference;\n    this.popper = popper && popper.jquery ? popper[0] : popper;\n\n    // Deep merge modifiers options\n    this.options.modifiers = {};\n    Object.keys({\n      ...Popper.Defaults.modifiers,\n      ...options.modifiers,\n    }).forEach(name => {\n      this.options.modifiers[name] = {\n        // If it's a built-in modifier, use it as base\n        ...(Popper.Defaults.modifiers[name] || {}),\n        // If there are custom options, override and merge with default ones\n        ...(options.modifiers ? options.modifiers[name] : {}),\n      };\n    });\n\n    // Refactoring modifiers' list (Object => Array)\n    this.modifiers = Object.keys(this.options.modifiers)\n      .map(name => ({\n        name,\n        ...this.options.modifiers[name],\n      }))\n      // sort the modifiers by order\n      .sort((a, b) => a.order - b.order);\n\n    // modifiers have the ability to execute arbitrary code when Popper.js get inited\n    // such code is executed in the same order of its modifier\n    // they could add new properties to their options configuration\n    // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n    this.modifiers.forEach(modifierOptions => {\n      if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n        modifierOptions.onLoad(\n          this.reference,\n          this.popper,\n          this.options,\n          modifierOptions,\n          this.state\n        );\n      }\n    });\n\n    // fire the first update to position the popper in the right place\n    this.update();\n\n    const eventsEnabled = this.options.eventsEnabled;\n    if (eventsEnabled) {\n      // setup event listeners, they will take care of update the position in specific situations\n      this.enableEventListeners();\n    }\n\n    this.state.eventsEnabled = eventsEnabled;\n  }\n\n  // We can't use class properties because they don't get listed in the\n  // class prototype and break stuff like Sinon stubs\n  update() {\n    return update.call(this);\n  }\n  destroy() {\n    return destroy.call(this);\n  }\n  enableEventListeners() {\n    return enableEventListeners.call(this);\n  }\n  disableEventListeners() {\n    return disableEventListeners.call(this);\n  }\n\n  /**\n   * Schedules an update. It will run on the next UI update available.\n   * @method scheduleUpdate\n   * @memberof Popper\n   */\n  scheduleUpdate = () => requestAnimationFrame(this.update);\n\n  /**\n   * Collection of utilities useful when writing custom modifiers.\n   * Starting from version 1.7, this method is available only if you\n   * include `popper-utils.js` before `popper.js`.\n   *\n   * **DEPRECATION**: This way to access PopperUtils is deprecated\n   * and will be removed in v2! Use the PopperUtils module directly instead.\n   * Due to the high instability of the methods contained in Utils, we can't\n   * guarantee them to follow semver. Use them at your own risk!\n   * @static\n   * @private\n   * @type {Object}\n   * @deprecated since version 1.8\n   * @member Utils\n   * @memberof Popper\n   */\n  static Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n\n  static placements = placements;\n\n  static Defaults = Defaults;\n}\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n  const getType = {};\n  return (\n    functionToCheck &&\n    getType.toString.call(functionToCheck) === '[object Function]'\n  );\n}\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n  return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose;\n    if (async) {\n        if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n        dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n        if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n        dispose = value[Symbol.dispose];\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  function next() {\n    while (env.stack.length) {\n      var rec = env.stack.pop();\n      try {\n        var result = rec.dispose && rec.dispose.call(rec.value);\n        if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n      }\n      catch (e) {\n          fail(e);\n      }\n    }\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n};\n"],"mappings":"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,QACA,IACA,MACA,MACA,MACA,QACA,aACA,OACA,KACA,SACA,SACA,UACA,SACA,OACA,OACA,MACA,WACA,UACA,OACA,WACA,KACA,YACA,MACA,UACA,MACA,SACA,MACA,MACA,KACA,KACA,UACA,KACA,WACA,aACA,SACA,OACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,OACA,SACA,SACA,KACA,OACA,IACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,MACA,OACA,UACA,OACA,WACA,QACA,MACA,OACA,KACA,WACA,SACA,SACA,IACA,UACA,MACA,WACA,IACA,KACA,KACA,OACA,IACA,OACA,UACA,SACA,SACA,QACA,SACA,SACA,OACA,SACA,SACA,QACA,MACA,UACA,MACA,QACA,QACA,KACA,WACA,WACA,QACA,KACA,QACA,OACA,KACA,QACA,KACA,IACA,KACA,MACA,QACA,QAIW0C,EAAM1C,EAAO,CACxB,MACA,IACA,WACA,cACA,eACA,eACA,gBACA,mBACA,SACA,WACA,OACA,OACA,UACA,SACA,OACA,IACA,QACA,WACA,QACA,QACA,OACA,iBACA,SACA,OACA,WACA,QACA,OACA,UACA,UACA,WACA,iBACA,OACA,OACA,QACA,SACA,SACA,OACA,WACA,QACA,OACA,QACA,OACA,UAGW2C,EAAa3C,EAAO,CAC/B,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,iBACA,UACA,UACA,UACA,UACA,UACA,iBACA,UACA,UACA,cACA,eACA,WACA,eACA,qBACA,cACA,SACA,iBAOW4C,EAAgB5C,EAAO,CAClC,UACA,gBACA,SACA,UACA,eACA,YACA,mBACA,iBACA,gBACA,gBACA,gBACA,QACA,YACA,OACA,eACA,YACA,UACA,gBACA,SACA,MACA,aACA,UACA,QAGW6C,EAAS7C,EAAO,CAC3B,OACA,WACA,SACA,UACA,QACA,SACA,KACA,aACA,gBACA,KACA,KACA,QACA,UACA,WACA,QACA,OACA,KACA,SACA,QACA,SACA,OACA,OACA,UACA,SACA,MACA,QACA,MACA,SACA,eAKW8C,EAAmB9C,EAAO,CACrC,UACA,cACA,aACA,WACA,YACA,UACA,UACA,SACA,SACA,QACA,YACA,aACA,iBACA,cACA,SAGWv4B,EAAOu4B,EAAO,CAAC,UCpRf+C,EAAO/C,EAAO,CACzB,SACA,SACA,QACA,MACA,iBACA,eACA,uBACA,WACA,aACA,UACA,SACA,UACA,cACA,cACA,UACA,OACA,QACA,QACA,QACA,OACA,UACA,WACA,eACA,SACA,cACA,WACA,WACA,UACA,MACA,WACA,0BACA,wBACA,WACA,YACA,UACA,eACA,OACA,MACA,UACA,SACA,SACA,OACA,OACA,WACA,KACA,YACA,YACA,QACA,OACA,QACA,OACA,OACA,UACA,OACA,MACA,MACA,YACA,QACA,SACA,MACA,YACA,WACA,QACA,OACA,QACA,UACA,aACA,SACA,OACA,UACA,UACA,cACA,cACA,SACA,UACA,UACA,aACA,WACA,MACA,WACA,MACA,WACA,OACA,OACA,UACA,aACA,QACA,WACA,QACA,OACA,QACA,OACA,UACA,QACA,MACA,SACA,OACA,QACA,UACA,WACA,QACA,YACA,OACA,SACA,SACA,QACA,QACA,QACA,SAGWgD,EAAMhD,EAAO,CACxB,gBACA,aACA,WACA,qBACA,SACA,gBACA,gBACA,UACA,gBACA,iBACA,QACA,OACA,KACA,QACA,OACA,gBACA,YACA,YACA,QACA,sBACA,8BACA,gBACA,kBACA,KACA,KACA,IACA,KACA,KACA,kBACA,YACA,UACA,UACA,MACA,WACA,YACA,MACA,OACA,eACA,YACA,SACA,cACA,cACA,gBACA,cACA,YACA,mBACA,eACA,aACA,eACA,cACA,KACA,KACA,KACA,KACA,aACA,WACA,gBACA,oBACA,SACA,OACA,KACA,kBACA,KACA,MACA,IACA,KACA,KACA,KACA,KACA,UACA,YACA,aACA,WACA,OACA,eACA,iBACA,eACA,mBACA,iBACA,QACA,aACA,aACA,eACA,eACA,cACA,cACA,mBACA,YACA,MACA,OACA,QACA,SACA,OACA,MACA,OACA,aACA,SACA,WACA,UACA,QACA,SACA,cACA,SACA,WACA,cACA,OACA,aACA,sBACA,mBACA,eACA,SACA,gBACA,sBACA,iBACA,IACA,KACA,KACA,SACA,OACA,OACA,cACA,YACA,UACA,SACA,SACA,QACA,OACA,kBACA,mBACA,mBACA,eACA,cACA,eACA,cACA,aACA,eACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,SACA,eACA,QACA,eACA,iBACA,WACA,UACA,UACA,YACA,mBACA,cACA,kBACA,iBACA,aACA,OACA,KACA,KACA,UACA,SACA,UACA,aACA,UACA,aACA,gBACA,gBACA,QACA,eACA,OACA,eACA,mBACA,mBACA,IACA,KACA,KACA,QACA,IACA,KACA,KACA,IACA,eAGWiD,EAASjD,EAAO,CAC3B,SACA,cACA,QACA,WACA,QACA,eACA,cACA,aACA,aACA,QACA,MACA,UACA,eACA,WACA,QACA,QACA,SACA,OACA,KACA,UACA,SACA,gBACA,SACA,SACA,iBACA,YACA,WACA,cACA,UACA,UACA,gBACA,WACA,WACA,OACA,WACA,WACA,aACA,UACA,SACA,SACA,cACA,gBACA,uBACA,YACA,YACA,aACA,WACA,iBACA,iBACA,YACA,UACA,QACA,UAGWkD,EAAMlD,EAAO,CACxB,aACA,SACA,cACA,YACA,gBCrWWmD,EAAgBlD,EAAK,6BACrBmD,EAAWnD,EAAK,yBAChBoD,EAAcpD,EAAK,iBACnBqD,EAAYrD,EAAK,gCACjBsD,EAAYtD,EAAK,kBACjBuD,EAAiBvD,EAC5B,yFAEWwD,EAAoBxD,EAAK,yBACzByD,EAAkBzD,EAC7B,+DAEW0D,EAAe1D,EAAK,WACpB2D,EAAiB3D,EAAK,4BCqoDnC4D,EA5kDA,SAASC,IAAuC,IAAvBv6B,EAAMzC,UAAAC,OAAA,YAAAD,UAAA,GAAAA,UAAG,GApDS,oBAAXyC,OAAyB,KAAOA,OAqDxDw6B,EAAY,SAACC,GAAI,OAAKF,EAA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C,GAAM,CACF,KAEJC,GAAM,CACF,KAEJC,GAAM,CACF,KAEJC,GAAM,CACF,KAEJC,GAAM,CACF,KAEJC,GAAM,CACF,KAEJC,GAAM,CACF,KAEJC,GAAM,CACF,KAEJC,GAAM,CACF,KAEJC,GAAM,CACF,KAEJC,GAAM,CACF,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KAEJC,GAAM,CACF,IACA,KAEJ,MAAO,CACH,IACA,KAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJ,QAAS,CACL,IACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJ,QAAS,CACL,IACA,IACA,MAEJ,QAAS,CACL,IACA,IACA,MAEJ,QAAS,CACL,IACA,IACA,MAEJ,QAAS,CACL,IACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJ,QAAS,CACL,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJ,QAAS,CACL,IACA,IACA,KACA,MAEJ,QAAS,CACL,IACA,IACA,KACA,MAEJ,QAAS,CACL,IACA,IACA,KACA,MAEJ,QAAS,CACL,IACA,IACA,KACA,MAEJ,QAAS,CACL,IACA,IACA,KACA,MAEJ,QAAS,CACL,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KACA,MAEJC,GAAM,CACF,IACA,IACA,KAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,MAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KAEJphC,GAAM,CACF,IACA,KACA,KAEJqhC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJ,SAAU,CACN,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJhvD,GAAM,CACF,IACA,KACA,IACA,MAEJivD,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,IACA,MAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJ,SAAU,CACN,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJC,GAAM,CACF,IACA,KACA,KACA,KAEJ,QAAS,CACL,IACA,KACA,KACA,KAEJC,GAAM,CACF,KACA,KAEJC,GAAM,CACF,KACA,KAEJ,QAAS,CACL,KACA,IACA,KAEJ,QAAS,CACL,KACA,IACA,KAEJ,QAAS,CACL,KACA,IACA,KAEJ,QAAS,CACL,KACA,IACA,KAEJC,GAAM,CACF,KACA,IACA,IACA,MAEJ,QAAS,CACL,KACA,IACA,KACA,KAEJC,GAAM,CACF,KACA,KACA,IACA,KAEJC,GAAM,CACF,KACA,KACA,IACA,KAEJC,GAAM,CACF,KACA,KACA,IACA,KAEJ,QAAS,CACL,KACA,KACA,IACA,KAEJ,QAAS,CACL,KACA,KACA,IACA,KAEJ,QAAS,CACL,KACA,KACA,IACA,KAEJC,GAAM,CACF,KACA,KACA,IACA,KAEJC,GAAM,CACF,KACA,KACA,IACA,KAEJC,GAAM,CACF,KACA,KACA,IACA,KAEJC,GAAM,CACF,KACA,KACA,IACA,KAEJC,GAAM,CACF,KACA,KACA,IACA,MEzwCR,SAASC,EAA+BC,GACpC,IAAIpa,EAAYoa,EAAOpa,UASvB,YARIA,GAEAoa,EAAOC,YAEPD,EAAOC,WAAWj9D,SAElB4iD,EAAYoa,EAAOC,WAAW,IAE9Bra,EACA,OAAQA,GACJ,IAAK,MACD,MAAO,IACX,IAAK,MACD,MAAO,IACX,IAAK,MACD,MAAO,IACX,IAAK,MACD,MAAO,IACX,QACI,MAAM,IAAI3lD,MAAM,qBAI5B,IACIigE,EADAC,EAAcH,EAAOj5D,SASzB,MAPoB,SAAhBo5D,IACAD,EAAYF,EAAOI,WAAWC,SAEjB5O,EAAS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OAAO6iE,EAAc,6CAGrD,GADA3gE,KAAKs8D,OACDt8D,KAAK67D,QACL,KAER,CACJ,EAEAP,EAAO17D,UAAU68D,UAAY,WACzB,MAAQz8D,KAAK67D,SAAWT,GAAcp7D,KAAK87D,SACvC97D,KAAKs8D,MAEb,EAKAhB,EAAO17D,UAAUq8D,KAAO,WACpB,GAAIj8D,KAAK67D,QACL,OAAO,KAEX,IAAI90D,EAAO/G,KAAK87D,OACZ9b,EAAShgD,KAAKggD,SACd6gB,EAAW7gE,KAAKgH,QAAQgyC,WAAWgH,GAAUj5C,GAAQ,MAAU,EAAI,IACvE,OAAO85D,QAA2CA,EAAW,IACjE,EACOvF,CACX,CA/yB4B,GAszB5B,SAASa,GAASkB,GACd,OAASA,GAAa,IAAMA,GAAa,KACpCA,GAAa,IAAMA,GAAa,EACzC,CA8BA,SAASjC,GAAc1nD,GACnB,OAASA,GAAK,GAAUA,GAAK,IACnB,KAANA,GACM,MAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,CACR,CAKA,SAAS2nD,GAAiB3nD,GACtB,OAASA,GAAK,IAAUA,GAAK,IACnB,KAANA,GACCA,GAAK,IAAUA,GAAK,IACf,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACCA,GAAK,IAAUA,GAAK,IACpBA,GAAK,IAAUA,GAAK,IACpBA,GAAK,IAAUA,GAAK,IACpBA,GAAK,IAAUA,GAAK,IACf,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACCA,GAAK,KAAUA,GAAK,KACf,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,KACf,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM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","ignoreList":[]}