{"version":3,"sources":["webpack://@internetarchive/bookreader/./src/js/BookReader/utils/classes.js","webpack://@internetarchive/bookreader/./src/js/BookReader/events.js","webpack://@internetarchive/bookreader/./src/js/BookReader/Navbar/Navbar.js","webpack://@internetarchive/bookreader/./src/js/BookReader/options.js","webpack://@internetarchive/bookreader/./src/js/BookReader/Toolbar/Toolbar.js","webpack://@internetarchive/bookreader/./src/js/BookReader/BookModel.js","webpack://@internetarchive/bookreader/./src/js/BookReader/Mode2Up.js","webpack://@internetarchive/bookreader/./src/js/BookReader.js","webpack://@internetarchive/bookreader/./src/js/BookReader/DebugConsole.js","webpack://@internetarchive/bookreader/./src/js/BookReader/utils.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/a-function.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/a-possible-prototype.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/add-to-unscopables.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/advance-string-index.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/an-instance.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/an-object.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/array-from.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/array-includes.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/array-iteration.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/array-method-has-species-support.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/array-method-is-strict.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/array-method-uses-to-length.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/array-reduce.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/array-species-create.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/call-with-safe-iteration-closing.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/check-correctness-of-iteration.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/classof-raw.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/classof.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/copy-constructor-properties.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/correct-is-regexp-logic.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/correct-prototype-getter.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/create-iterator-constructor.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/create-non-enumerable-property.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/create-property-descriptor.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/create-property.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/define-iterator.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/define-well-known-symbol.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/descriptors.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/document-create-element.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/dom-iterables.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/engine-user-agent.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/engine-v8-version.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/enum-bug-keys.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/export.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/fails.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/flatten-into-array.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/function-bind-context.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/get-built-in.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/get-iterator-method.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/get-iterator.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/global.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/has.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/hidden-keys.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/html.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/ie8-dom-define.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/indexed-object.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/inspect-source.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/internal-state.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/is-array-iterator-method.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/is-array.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/is-forced.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/is-object.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/is-pure.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/is-regexp.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/iterators-core.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/iterators.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/native-symbol.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/native-url.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/native-weak-map.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/not-a-regexp.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-assign.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-create.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-define-properties.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-define-property.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-get-own-property-names-external.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-get-own-property-names.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-get-own-property-symbols.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-get-prototype-of.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-keys-internal.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-keys.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-property-is-enumerable.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-set-prototype-of.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/object-to-string.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/own-keys.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/path.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/redefine-all.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/redefine.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/regexp-exec-abstract.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/regexp-exec.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/regexp-flags.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/regexp-sticky-helpers.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/require-object-coercible.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/same-value.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/set-global.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/set-to-string-tag.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/shared-key.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/shared-store.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/shared.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/species-constructor.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-multibyte.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-punycode-to-ascii.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-repeat.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/this-number-value.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/to-absolute-index.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/to-indexed-object.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/to-integer.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/to-length.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/to-object.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/to-primitive.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/to-string-tag-support.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/uid.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/use-symbol-as-uid.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/well-known-symbol-wrapped.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/well-known-symbol.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.concat.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.filter.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.find-index.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.find.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.flat-map.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.from.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.includes.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.index-of.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.iterator.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.join.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.map.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.reduce.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.slice.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.unscopables.flat-map.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.function.name.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.number.to-fixed.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.assign.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.keys.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.to-string.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.regexp.exec.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.regexp.to-string.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.includes.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.iterator.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.replace.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.search.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.split.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.symbol.description.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.symbol.iterator.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.symbol.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/web.dom-collections.iterator.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/web.url-search-params.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/web.url.js","webpack://@internetarchive/bookreader/./node_modules/regenerator-runtime/runtime.js","webpack://@internetarchive/bookreader/external \"jQuery\"","webpack://@internetarchive/bookreader/webpack/bootstrap","webpack://@internetarchive/bookreader/webpack/runtime/compat get default export","webpack://@internetarchive/bookreader/webpack/runtime/define property getters","webpack://@internetarchive/bookreader/webpack/runtime/global","webpack://@internetarchive/bookreader/webpack/runtime/hasOwnProperty shorthand","webpack://@internetarchive/bookreader/webpack/runtime/make namespace object","webpack://@internetarchive/bookreader/webpack/runtime/jsonp chunk loading","webpack://@internetarchive/bookreader/webpack/startup"],"names":["exposeOverrideable","FromClass","fromMethod","fromTransform","ToClass","toMethod","toTransform","fn","wrapper","prototype","apply","this","arguments","Object","defineProperty","get","set","overrideFn","newThis","EVENTS","fragmentChange","PostInit","stop","resize","navToggled","fullscreenToggled","zoomOut","zoomIn","mobileNavOpen","Navbar","br","$root","$nav","maxPageNum","controlName","option","options","controls","visible","template","className","label","viewmode","controlFor","map","mode","join","viewModeOptions","viewModes","constMode1up","title","constMode2up","constModeThumb","filter","excludedModes","includes","viewModeOrder","m","switchMode","currentModeIndex","indexOf","i","push","shift","length","find","remove","bind","$button","off","on","e","nextModeID","newViewMode","nextViewMode","_updateViewModeButton","$","currentTarget","currentViewModeButton","iconClass","tooltipText","attr","removeClass","addClass","end","text","navbarTitle","isRTL","pageProgression","refs","$BRfooter","$BRnav","_viewModeControls","append","$br","$slider","slider","animate","min","max","getNumLeafs","value","currentIndex","range","event","ui","updateNavPageNum","data","jumpToIndex","_bindViewModeButton","thisLink","window","location","replace","logoHtml","showLogo","logoURL","bookTitle","index","pageNum","getPageNum","numLeafs","getPageProp","pageNumVal","isNaN","getNavPageNumHtml","pageType","html","getNavPageNumString","undefined","pageStr","Toolbar","$BRtoolbar","$titleSectionEl","bookUrl","enableBookTitleLink","href","bookUrlTitle","bookUrlText","buildToolbarElement","hide","updateToolbarZoom","reduce","canSwitchToMode","blankShareDiv","blankInfoDiv","appendTo","buildInfoDiv","buildShareDiv","colorbox","inline","opacity","onLoad","trigger","val","autofit","twoPage","onePage","slice","toUpperCase","toFixed","$shareDiv","pageView","document","bookView","embedHtml","getEmbedCode","$form","form","target","parents","params","prop","page","select","click","createPopup","param","u","_getSocialShareUrl","url","body","encodeURI","protocol","hostname","pathname","$infoDiv","$leftCol","thumbnail","escapeHTML","$rightCol","metadata","extraValueClass","escapedValue","moreInfoText","bookUrlMoreInfo","$footer","$children","css","outerHeight","parseInt","width","height","name","dualScreenLeft","screenLeft","screen","left","dualScreenTop","screenTop","top","innerWidth","documentElement","clientWidth","innerHeight","clientHeight","opts","open","BookModel","_medianPageSize","_getDataFlattenedCached","widths","heights","getPageWidth","getPageHeight","sort","Math","floor","clamp","clampedIndex","pageIndices","getPageIndices","indices","pageIntStr","pageIndex","err","_getDataFlattened","rotate","propName","fallbackValue","_getDataProp","pindex","getPageSide","leafNum","findIndex","d","pageString","leafMatch","exec","leafNumToIndex","getPageIndex","PageModel","start","Infinity","combineConsecutiveUnviewables","getPage","isConsecutiveUnviewable","prevPageSide","unviewablesChunkStart","flattend","flatMap","spread","pageSide","viewable","unviewablesStart","dataf","invalidIndex","book","isViewable","_rawData","newViewableState","pagesIterator","prev","getPageURI","next","findPrev","findNext","Mode2Up","bookModel","leafEdgeL","leafEdgeR","element","handler","unbind","$twoPageViewEl","$brTwoPageView","indexL","currentIndexL","scaledWL","gutter","prefetchImg","prefetchedImgs","position","right","zIndex","indexR","currentIndexR","scaledWR","displayedIndices","setMouseHandlers","direction","stopFlipAnimations","calculateReductionFactors","reductionFactor","nextReduce","reductionFactors","pageScale","oldCenter","getViewCenter","img","prepareTwoPageView","percentageX","percentageY","centerPercentageX","centerPercentageY","$brContainer","empty","targetLeaf","firstIndex","firstDisplayableIndex","lastDisplayableIndex","currentSpreadIndices","getSpreadIndices","calculateSpreadSize","pruneUnusedImgs","prefetch","dragscrollable","preventDefault","bindGestures","totalHeight","totalWidth","centerView","coverDiv","createElement","bookCoverDivWidth","bookCoverDivHeight","visibility","leafEdgeWidthR","bookCoverDivTop","coverInternalPadding","border","leafEdgeWidthL","bookCoverDivLeft","div","bookSpineDivWidth","bookSpineDivHeight","bookSpineDivTop","preparePopUp","drawLeafs","enableSearch","removeSearchHilites","updateSearchHilites","updateBrClasses","twoPagePopUp","leafEdges","$leafEdge","jumpIndexForPageX","jumpIndexForLeftEdgePageX","leftOffset","jumpIndexForRightEdgePageX","show","pageX","jumpIndex","getPageName","offset","scrollLeft","pageY","scrollTop","spreadSize","secondIndex","getIdealSpreadSize","getSpreadSizeFromReduce","edgeWidth","totalLeafEdgeWidth","leafEdgeWidth","coverWidth","leftGutterOffset","gutterOffsetForIndex","leftWidthFromCenter","rightWidthFromCenter","largestWidthFromCenter","coverExternalPadding","middle","bookSpineDivLeft","ratio","ideal","first","_getPageHeight","_getPageWidth","second","firstIndexRatio","secondIndexRatio","abs","maxLeafEdgeWidth","widthOutsidePages","heightOutsidePages","nativeWidth","nativeHeight","isZoomedIn","getAutofitReduce","concat","_reduceSort","style","cursor","animating","leafEdgeTmp","minDisplayedIndex","updateNavIndexThrottled","previousIndices","prepareFlipLeftToRight","flipLeftToRight","prepareFlipRightToLeft","flipRightToLeft","alert","newIndexL","newIndexR","leftLeaf","oldLeafEdgeWidthL","newLeafEdgeWidthL","leafEdgeTmpW","currWidthL","newWidthL","newWidthR","leftEdgeTmpLeft","flipSpeed","updateFirstIndex","animationFinishedCallback","textSelectionPlugin","stopPageFlip","maxDisplayedIndex","nextPage","nextIndices","oldLeafEdgeWidthR","newLeafEdgeWidthR","scaledW","speed","which","self","protected","setClickHandler","prevL","prevR","leftCSS","rightCSS","nextL","nextR","totalPageWidth","center","containerOffset","viewOffset","viewWidth","containerClientWidth","intoViewX","viewHeight","containerClientHeight","intoViewY","flipAreaWidth","bottom","pageL","pageT","round","lowPage","highPage","ADJACENT_PAGES_TO_LOAD","BookReader","overrides","jQuery","extend","defaultOptions","optionOverrides","setup","exposeOverrideableMethod","Class","classKey","method","brMethod","classToBr","cls","brToClass","_overrideable","toString","DebugConsole","init","version","constNavAnimationDuration","constResizeAnimationDuration","eventNames","defaults","padding","uiAutoHide","thumbRowBuffer","thumbColumns","thumbMaxLoading","thumbPadding","showToolbar","showNavbar","navBarTitle","imagesBaseURL","onePageMinBreakpoint","bookLanguage","enableExperimentalControls","el","plugins","textSelection","vars","startFullscreen","suppressFragmentChange","prevReadMode","thumbWidth","displayedRows","imgs","flipDelay","lastDisplayableIndex2up","isFullscreenActive","lastScroll","titleLeaf","popup","_models","_components","navbar","toolbar","_modes","mode2Up","newVal","util","utils","extendParams","newParams","modifiedNewParams","parsePageString","initParams","defaultParams","paramsFromFragment","pageFound","enablePageResume","getResumeValue","enableUrlPlugin","urlParams","urlReadFragment","keys","goToFirstResult","initialSearchTerm","search","searchTerm","URLSearchParams","readQueryString","decodeURIComponentPlus","getLocationSearch","getLocationHash","hash","queryString","found","getInitialMode","nextMode","windowWidth","enableMobileNav","initComplete","isTouchDevice","navigator","initEmbedNavbar","initToolbar","initNavbar","resizeBRcontainer","updateFromParams","initUIStrings","bindNavigationHandlers","setupKeyListeners","Date","getTime","drawLeafsThrottled","toggleFullscreen","props","eventName","dispatchEvent","CustomEvent","bubbles","composed","detail","callback","resizePageView1up","centerPageView","prepareThumbnailView","twoPageGetViewCenter","doRecenter","twoPageCenterView","keydown","keyboardNavigationIsDisabled","keyCode","last","zoom","drawLeafsOnePage","drawLeafsThumbnail","drawLeafsTwoPage","_createPageContainer","styles","assign","modeClasses","container","toggleClass","jElement","numTouches","originalEvent","cancelable","touches","stopPropagation","scale","containerHeight","containerWidth","$brPageViewEl","scrollBottom","indicesToDisplay","leafTop","leafBottom","firstIndexToDraw","unshift","lastIndexToDraw","BRpageViewEl","notInArray","leftMargin","pageContainer","src","_getPageURI","srcset","_getPageURISrcset","appendChild","seekIndex","leafHeight","seekTop","rightPos","bottomPos","maxRight","currentRow","leafIndex","leafMap","leafWidth","leafs","num","pageViewBuffer","rowsToDisplay","leastVisible","mostVisible","firstRow","lastRow","row","leaf","leafLeft","thumbReduce","lazyLoadThumbnails","loading","toLoad","each","lazyLoadImage","dummyImage","Image","one","setTimeout","before","throttle","zoom1up","zoom2up","zoomThumb","reduceFactor","getToolBarHeight","getFooterHeight","oldScrollTop","oldPageViewHeight","oldPageViewWidth","scrollRatio","oldCenterY","centerY1up","oldCenterX","centerX1up","fudgeFactor","onePageGetPageTop","onePageCalculateViewDimensions","onePageCalculateReductionFactors","viewDimensions","newCenterY","newTop","newLeft","centerX","centerY","scrollWidth","oldColumns","getThumbnailWidth","thumbnailColumns","quantizeReduce","newDistance","quantized","distance","currentReduce","newReduceIndex","lastIndex","choice","a","b","jumpToPage","_isIndexDisplayed","noAnimate","prevCurrentIndex","newIndex","flipBackToIndex","flipFwdToIndex","rowHeight","getPrevReadMode","prepareOnePageView","twoPageCalculateReductionFactors","modeToClass","isFullscreen","bindKeyboardControls","exitFullScreen","enterFullscreen","_fullscreenCloseHandler","keyup","startLeaf","overflowY","overflowX","onePageGetAutofitWidth","getMedianPageSize","widthPadding","onePageGetAutofitHeight","availableHeight","rightmost","leftmost","scrollDown","inArray","_scrollAmount","scrollUp","pageURI","pageURISrcset","loadImage","uri","key","twoPageGetAutofitReduce","setHilightCss2UP","setHilightCss","setClickHandler2UP","prepareTwoPagePopUp","twoPageIsZoomedIn","twoPageSetCursor","setCursor","setMouseHandlers2UP","getPageWidth2UP","twoPageGutter","twoPageTop","twoPageCoverWidth","twoPageFlipAreaHeight","flipAreaHeight","twoPageFlipAreaWidth","twoPageFlipAreaTop","flipAreaTop","twoPageLeftFlipAreaLeft","leftFlipAreaLeft","twoPageRightFlipAreaLeft","rightFlipAreaLeft","tagName","initEmbed","updateNavIndex","updateNavIndexDebounced","debounce","jIcons","add","navigationControls","book_left","book_right","book_up","book_down","book_top","book_bottom","book_leftmost","book_rightmost","onepg","thumb","twopg","zoom_in","zoom_out","full","control","$brNavCntlBtmEl","$brNavCntlTopEl","promises","hasClass","promise","delay","when","done","mouseover","mouseleave","initSwipeData","navigationMousemoveHandler","swipeMousedownHandler","bindMozTouchHandlers","unbindNavigationHandlers","navkey","hideNavigation","showNavigation","clientX","clientY","_swipe","mightBeSwiping","didSwipe","mightBeDraggin","didDrag","startTime","startX","startY","lastX","lastY","deltaX","deltaY","deltaT","swipeMouseupHandler","swipeMousemoveHandler","mightBeDragging","returnValue","cancelBubble","absX","absY","minSwipeLength","navigationIsVisible","setNavigationView","animationLength","animationType","resizePageContainer","toolbarHeight","navbarHeight","enableThemesPlugin","theme","updateTheme","pow","showProgressPopup","msg","bar","msgdiv","innerHTML","removeProgressPopup","titles","icon","reloadImages","elem","complete","naturalHeight","$heightEl","paramsFromCurrent","fragment","substr","oldStyleLeafNum","urlArray","split","urlHash","fragmentFromParams","urlMode","separator","fragments","encodeURIComponentPlus","queryStringFromParams","currQueryString","result","selector","curCSS","currentRun","$log","prepend","submit","ev","eval","logToScreen","_realLog","console","log","args","onerror","JSON","stringify","$lastEntry","children","disableSelect","jObject","onselectstart","cssPercentage","array","getIFrameDocument","iframe","outer","contentWindow","contentDocument","str","decodeURIComponent","encodeURIComponent","func","wait","immediate","timeout","context","later","callNow","clearTimeout","threshold","deferTimer","now","polyfillCustomEvent","PolyfilledCustomEvent","createEvent","initCustomEvent","module","exports","it","TypeError","String","isObject","wellKnownSymbol","create","definePropertyModule","UNSCOPABLES","ArrayPrototype","Array","f","configurable","charAt","S","unicode","Constructor","toObject","callWithSafeIterationClosing","isArrayIteratorMethod","toLength","createProperty","getIteratorMethod","arrayLike","step","iterator","O","C","argumentsLength","mapfn","mapping","iteratorMethod","call","toIndexedObject","toAbsoluteIndex","createMethod","IS_INCLUDES","$this","fromIndex","IndexedObject","arraySpeciesCreate","TYPE","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","callbackfn","that","specificCreate","boundFunction","forEach","some","every","fails","V8_VERSION","SPECIES","METHOD_NAME","constructor","foo","Boolean","argument","DESCRIPTORS","has","cache","thrower","ACCESSORS","argument0","argument1","enumerable","aFunction","IS_RIGHT","memo","isArray","originalArray","anObject","ENTRIES","error","returnMethod","ITERATOR","SAFE_CLOSING","called","iteratorWithReturn","from","SKIP_CLOSING","ITERATION_SUPPORT","object","TO_STRING_TAG_SUPPORT","classofRaw","TO_STRING_TAG","CORRECT_ARGUMENTS","tag","tryGet","callee","ownKeys","getOwnPropertyDescriptorModule","source","getOwnPropertyDescriptor","MATCH","regexp","F","getPrototypeOf","IteratorPrototype","createPropertyDescriptor","setToStringTag","Iterators","returnThis","IteratorConstructor","NAME","bitmap","writable","toPrimitive","propertyKey","createIteratorConstructor","setPrototypeOf","createNonEnumerableProperty","redefine","IS_PURE","IteratorsCore","BUGGY_SAFARI_ITERATORS","KEYS","VALUES","Iterable","DEFAULT","IS_SET","FORCED","CurrentIteratorPrototype","methods","KEY","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","entries","values","proto","forced","path","wrappedWellKnownSymbolModule","Symbol","global","EXISTS","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","getBuiltIn","match","userAgent","process","versions","v8","setGlobal","copyConstructorProperties","isForced","targetProperty","sourceProperty","descriptor","TARGET","GLOBAL","STATIC","stat","noTargetGet","sham","regexpExec","REPLACE_SUPPORTS_NAMED_GROUPS","re","groups","REPLACE_KEEPS_$0","REPLACE","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","SYMBOL","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","flags","nativeRegExpMethod","nativeMethod","arg2","forceStringMethod","stringMethod","regexMethod","RegExp","string","arg","flattenIntoArray","original","sourceLen","depth","mapper","thisArg","targetIndex","sourceIndex","mapFn","c","variable","namespace","classof","check","globalThis","g","Function","hasOwnProperty","propertyIsEnumerable","store","functionToString","inspectSource","NATIVE_WEAK_MAP","objectHas","sharedKey","hiddenKeys","WeakMap","wmget","wmhas","wmset","STATE","enforce","getterFor","state","type","replacement","feature","detection","normalize","POLYFILL","NATIVE","toLowerCase","isRegExp","PrototypeOfArrayIteratorPrototype","arrayIterator","getOwnPropertySymbols","URL","searchParams","toJSON","username","host","test","objectKeys","getOwnPropertySymbolsModule","propertyIsEnumerableModule","nativeAssign","A","B","symbol","alphabet","chr","T","j","activeXDocument","defineProperties","enumBugKeys","documentCreateElement","IE_PROTO","EmptyConstructor","scriptTag","content","LT","NullProtoObject","domain","ActiveXObject","iframeDocument","write","close","temp","parentWindow","NullProtoObjectViaActiveX","display","Properties","IE8_DOM_DEFINE","nativeDefineProperty","P","Attributes","nativeGetOwnPropertyDescriptor","nativeGetOwnPropertyNames","windowNames","getOwnPropertyNames","getWindowNames","internalObjectKeys","CORRECT_PROTOTYPE_GETTER","ObjectPrototype","names","nativePropertyIsEnumerable","NASHORN_BUG","1","V","aPossiblePrototype","setter","CORRECT_SETTER","__proto__","getOwnPropertyNamesModule","InternalStateModule","getInternalState","enforceInternalState","TEMPLATE","unsafe","simple","R","re1","re2","regexpFlags","stickyHelpers","nativeExec","nativeReplace","patchedExec","UPDATES_LAST_INDEX_WRONG","UNSUPPORTED_Y","BROKEN_CARET","NPCG_INCLUDED","reCopy","sticky","charsAdded","strCopy","multiline","input","ignoreCase","dotAll","RE","s","is","x","y","TAG","shared","uid","SHARED","copyright","defaultConstructor","toInteger","requireObjectCoercible","CONVERT_TO_STRING","pos","size","charCodeAt","codeAt","maxInt","regexNonASCII","regexSeparators","OVERFLOW_ERROR","stringFromCharCode","fromCharCode","digitToBasic","digit","adapt","delta","numPoints","firstTime","k","baseMinusTMin","base","encode","currentValue","output","inputLength","counter","extra","ucs2decode","n","bias","basicLength","handledCPCount","handledCPCountPlusOne","RangeError","q","t","qMinusT","baseMinusT","encoded","labels","repeat","count","integer","ceil","PREFERRED_STRING","valueOf","id","postfix","random","NATIVE_SYMBOL","USE_SYMBOL_AS_UID","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","arrayMethodHasSpeciesSupport","IS_CONCAT_SPREADABLE","MAX_SAFE_INTEGER","MAXIMUM_ALLOWED_INDEX_EXCEEDED","IS_CONCAT_SPREADABLE_SUPPORT","SPECIES_SUPPORT","isConcatSpreadable","spreadable","len","E","$filter","arrayMethodUsesToLength","HAS_SPECIES_SUPPORT","USES_TO_LENGTH","$findIndex","addToUnscopables","FIND_INDEX","SKIPS_HOLES","$find","FIND","checkCorrectnessOfIteration","iterable","$includes","$indexOf","arrayMethodIsStrict","nativeIndexOf","NEGATIVE_ZERO","STRICT_METHOD","searchElement","defineIterator","ARRAY_ITERATOR","setInternalState","iterated","kind","Arguments","nativeJoin","ES3_STRINGS","$map","$reduce","0","nativeSlice","fin","FunctionPrototype","FunctionPrototypeToString","nameRE","thisNumberValue","nativeToFixed","acc","fractionDigits","z","number","fractDigits","sign","multiply","c2","divide","dataToString","x2","nativeKeys","TO_STRING","RegExpPrototype","nativeToString","NOT_GENERIC","INCORRECT_NAME","p","rf","notARegExp","correctIsRegExpLogic","searchString","STRING_ITERATOR","point","fixRegExpWellKnownSymbolLogic","advanceStringIndex","regExpExec","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","maybeCallNative","reason","UNSAFE_SUBSTITUTE","searchValue","replaceValue","replacer","res","rx","functionalReplace","fullUnicode","results","accumulatedResult","nextSourcePosition","matched","captures","namedCaptures","replacerArgs","getSubstitution","tailPos","symbols","ch","capture","sameValue","SEARCH","nativeSearch","searcher","previousLastIndex","speciesConstructor","callRegExpExec","arrayPush","MAX_UINT32","SUPPORTS_Y","SPLIT","nativeSplit","internalSplit","limit","lim","lastLength","lastLastIndex","separatorCopy","splitter","unicodeMatching","NativeSymbol","description","EmptyStringDescriptionStore","SymbolWrapper","symbolPrototype","symbolToString","native","desc","defineWellKnownSymbol","nativeObjectCreate","getOwnPropertyNamesExternal","$forEach","HIDDEN","TO_PRIMITIVE","$Symbol","$stringify","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","QObject","USE_SETTER","findChild","setSymbolDescriptor","ObjectPrototypeDescriptor","wrap","isSymbol","$defineProperty","$defineProperties","properties","$getOwnPropertySymbols","$propertyIsEnumerable","$getOwnPropertyDescriptor","$getOwnPropertyNames","IS_OBJECT_PROTOTYPE","keyFor","sym","useSetter","useSimple","space","$replacer","DOMIterables","ArrayIteratorMethods","ArrayValues","COLLECTION_NAME","Collection","CollectionPrototype","USE_NATIVE_URL","redefineAll","anInstance","hasOwn","getIterator","$fetch","Headers","URL_SEARCH_PARAMS","URL_SEARCH_PARAMS_ITERATOR","getInternalParamsState","getInternalIteratorState","plus","sequences","percentSequence","bytes","percentDecode","sequence","deserialize","serialize","parseSearchParams","query","attribute","entry","attributes","updateSearchParams","validateArgumentsLength","passed","required","URLSearchParamsIterator","URLSearchParamsConstructor","entryIterator","entryNext","updateURL","URLSearchParamsPrototype","splice","getAll","entriesIndex","sliceIndex","fetch","headers","getState","EOF","arrayFrom","toASCII","URLSearchParamsModule","NativeURL","getInternalSearchParamsState","getInternalURLState","INVALID_SCHEME","INVALID_HOST","INVALID_PORT","ALPHA","ALPHANUMERIC","DIGIT","HEX_START","OCT","DEC","HEX","FORBIDDEN_HOST_CODE_POINT","FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT","LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE","TAB_AND_NEW_LINE","parseHost","codePoints","parseIPv6","isSpecial","parseIPv4","percentEncode","C0ControlPercentEncodeSet","partsLength","numbers","part","radix","ipv4","parts","pop","numbersSeen","ipv4Piece","swaps","swap","address","pieceIndex","compress","pointer","char","serializeHost","ignore0","ipv6","maxIndex","maxLength","currStart","currLength","findLongestZeroSequence","fragmentPercentEncodeSet","pathPercentEncodeSet","userinfoPercentEncodeSet","code","specialSchemes","ftp","file","http","https","ws","wss","scheme","includesCredentials","password","cannotHaveUsernamePasswordPort","cannotBeABaseURL","isWindowsDriveLetter","normalized","startsWithWindowsDriveLetter","third","shortenURLsPath","pathSize","isSingleDot","segment","SCHEME_START","SCHEME","NO_SCHEME","SPECIAL_RELATIVE_OR_AUTHORITY","PATH_OR_AUTHORITY","RELATIVE","RELATIVE_SLASH","SPECIAL_AUTHORITY_SLASHES","SPECIAL_AUTHORITY_IGNORE_SLASHES","AUTHORITY","HOST","HOSTNAME","PORT","FILE","FILE_SLASH","FILE_HOST","PATH_START","PATH","CANNOT_BE_A_BASE_URL_PATH","QUERY","FRAGMENT","parseURL","stateOverride","bufferCodePoints","failure","buffer","seenAt","seenBracket","seenPasswordToken","port","codePoint","encodedCodePoints","URLConstructor","baseState","urlString","searchParamsState","serializeURL","origin","getOrigin","getProtocol","getUsername","getPassword","getHost","getHostname","getPort","getPathname","getSearch","getSearchParams","getHash","URLPrototype","accessorDescriptor","getter","nativeCreateObjectURL","createObjectURL","nativeRevokeObjectURL","revokeObjectURL","blob","runtime","Op","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","obj","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","GenStateSuspendedStart","GenStateExecuting","Error","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","GenStateSuspendedYield","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","invoke","resolve","reject","__await","then","unwrapped","previousPromise","callInvokeWithMethodAndArg","info","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","async","Promise","iter","reverse","skipTempReset","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__","__esModule","definition","o","r","installedChunks","898","deferredModules","checkDeferredModules","checkDeferredModulesImpl","deferredModule","fulfilled","depId","chunkLoadingGlobal","webpackJsonpCallback","chunkId","chunkIds","moreModules","executeModules","resolves","parentChunkLoadingFunction"],"mappings":"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","file":"BookReader.js","sourcesContent":["/**\n * Exposes a function from one class (FromClass) to another (ToClass), in such a way\n * that if the ToClass's method is overriden, the FromClass's method is also overriden.\n * WARNING: This modifies FromClass' prototype! So FromClasses cannot be shared between\n * different ToClasses.\n * @param {new () => TFrom} FromClass the class to get the method from\n * @param {keyof TFrom} fromMethod the method's name in FromClass\n * @param {function(TFrom): TTo} fromTransform how to get the TTo `this` to use when setting the method on TFrom\n * @param {new () => TTo} ToClass the class to add the method to\n * @param {string} toMethod the name of the method to add to TTo (likely will be equal to fromMethod)\n * @param {function(TTo): TFrom} toTransform how to get the TFrom this to use when calling the new method\n * @template TFrom type of FromClass for type-checking/autocomplete\n * @template TTo type of ToClass for type-checking/autocomplete\n */\nexport function exposeOverrideable(FromClass, fromMethod, fromTransform, ToClass, toMethod, toTransform) {\n // Wrapper function needed to \"capture\" the current version of fromMethod\n let wrapper = (fn => {\n return function () {\n return fn.apply(toTransform(this), arguments);\n };\n })(FromClass.prototype[fromMethod]);\n\n Object.defineProperty(ToClass.prototype, toMethod, {\n get() { return wrapper; },\n set(overrideFn) {\n // overrideFn expects `this` to be ToClass, so ensure as such\n // But we can also call this method from FromClass; need to ensure\n // it's always called with a ToClass\n FromClass.prototype[fromMethod] = function () {\n const newThis = this instanceof FromClass ? fromTransform(this) : this;\n return overrideFn.apply(newThis, arguments);\n };\n wrapper = overrideFn;\n }\n });\n}\n","/** @enum {string} */\nexport const EVENTS = {\n /** Indicates that the fragment (a serialization of the reader\n * state) has changed. */\n fragmentChange: 'fragmentChange',\n PostInit: 'PostInit',\n stop: 'stop',\n resize: 'resize',\n // nav events:\n navToggled: 'navToggled',\n // menu click events\n fullscreenToggled: 'fullscreenToggled',\n zoomOut: 'zoomOut',\n zoomIn: 'zoomIn',\n '1PageViewSelected': '1PageViewSelected',\n '2PageViewSelected': '2PageViewSelected',\n /* currently 3 represents thumbnail view */\n '3PageViewSelected': '3PageViewSelected',\n mobileNavOpen: 'mobileNavOpen',\n};\n","/** @typedef {import(\"../../BookReader.js\").default} BookReader */\n\nimport { EVENTS } from '../events.js';\n\nexport class Navbar {\n /**\n * @param {BookReader} br\n */\n constructor(br) {\n this.br = br;\n\n /** @type {JQuery} */\n this.$root = null;\n /** @type {JQuery} */\n this.$nav = null;\n /** @type {number} */\n this.maxPageNum = null;\n }\n\n controlFor(controlName) {\n const option = this.br.options.controls[controlName];\n if (!option.visible) { return ''; }\n if (option.template) {\n return `
  • ${option.template(this.br)}
  • `;\n }\n return `
  • \n \n
  • `;\n }\n\n /** @private */\n _viewModeControls() {\n if (this.br.options.controls.viewmode.visible) {\n return this.controlFor('viewmode');\n }\n return ['onePage', 'twoPage', 'thumbnail'].map((mode) => (\n this.controlFor(mode)\n )).join('');\n }\n\n /** @private */\n _bindViewModeButton() {\n const { br } = this;\n const viewModeOptions = br.options.controls.viewmode;\n const viewModes = [{\n mode: br.constMode1up,\n className: 'onepg',\n title: 'One-page view',\n }, {\n mode: br.constMode2up,\n className: 'twopg',\n title: 'Two-page view',\n }, {\n mode: br.constModeThumb,\n className: 'thumb',\n title: 'Thumbnail view',\n }].filter((mode) => (\n !viewModeOptions.excludedModes.includes(mode.mode)\n ));\n const viewModeOrder = viewModes.map((m) => m.mode);\n\n if (viewModeOptions.excludedModes.includes(br.mode)) {\n br.switchMode(viewModeOrder[0]);\n }\n\n // Reorder the viewModeOrder so the current view mode is at the end\n const currentModeIndex = viewModeOrder.indexOf(br.mode);\n for (let i = 0; i <= currentModeIndex; i++) {\n viewModeOrder.push(viewModeOrder.shift());\n }\n\n if (viewModes.length < 2) {\n this.$nav.find(`.${viewModeOptions.className}`).remove();\n }\n\n this.br.bind(EVENTS.PostInit, () => {\n const $button = this.$nav.find(`.${viewModeOptions.className}`)\n .off('.bindNavigationHandlers')\n .on('click', (e) => {\n const nextModeID = viewModeOrder.shift();\n const newViewMode = viewModes.find((m) => m.mode === nextModeID);\n const nextViewMode = viewModes.find((m) => m.mode === viewModeOrder[0]);\n\n viewModeOrder.push(nextModeID);\n this._updateViewModeButton($(e.currentTarget), nextViewMode.className, nextViewMode.title);\n br.switchMode(newViewMode.mode);\n });\n const currentViewModeButton = viewModes.find((m) => m.mode === viewModeOrder[0]);\n this._updateViewModeButton(\n $button,\n currentViewModeButton.className,\n currentViewModeButton.title\n );\n });\n }\n\n /** @private */\n _updateViewModeButton($button, iconClass, tooltipText) {\n $button\n .attr('title', tooltipText)\n .find('.icon')\n .removeClass()\n .addClass(`icon icon-${iconClass}`)\n .end()\n .find('.tooltip')\n .text(tooltipText);\n }\n\n /**\n * Initialize the navigation bar (bottom)\n * @return {JQuery}\n */\n init() {\n const { br } = this;\n const { navbarTitle: title } = br.options;\n const isRTL = br.pageProgression === 'rl';\n\n br.refs.$BRfooter = this.$root = $(`
    `);\n br.refs.$BRnav = this.$nav = $(\n `
    \n
    \n ${title ? `
    ${title}
    ` : ''}\n \n
    `);\n\n this.$root.append(this.$nav);\n br.refs.$br.append(this.$root);\n\n const $slider = this.$root.find('.BRpager').slider({\n animate: true,\n min: 0,\n max: br.getNumLeafs() - 1,\n value: br.currentIndex(),\n range: \"min\"\n });\n\n $slider.on('slide', (event, ui) => {\n this.updateNavPageNum(ui.value);\n return true;\n });\n\n $slider.on('slidechange', (event, ui) => {\n this.updateNavPageNum(ui.value);\n // recursion prevention for jumpToIndex\n if ($slider.data('swallowchange')) {\n $slider.data('swallowchange', false);\n } else {\n br.jumpToIndex(ui.value);\n }\n return true;\n });\n\n br.options.controls.viewmode.visible && this._bindViewModeButton();\n this.updateNavPageNum(br.currentIndex());\n\n return this.$nav;\n }\n\n /**\n * Initialize the navigation bar when embedded\n */\n initEmbed() {\n const { br } = this;\n // IA-specific\n const thisLink = (window.location + '')\n .replace('?ui=embed','')\n .replace('/stream/', '/details/')\n .replace('#', '/');\n const logoHtml = br.showLogo ? `` : '';\n\n br.refs.$BRfooter = this.$root = $('
    ');\n br.refs.$BRnav = this.$nav = $(\n `
    \n ${logoHtml}\n \n ${br.bookTitle}\n \n \n \n \n \n \n
    `);\n this.$root.append(this.$nav);\n br.refs.$br.append(this.$root);\n }\n\n /**\n * Returns the textual representation of the current page for the navbar\n * @param {number} index\n * @return {string}\n */\n getNavPageNumString(index) {\n const { br } = this;\n // Accessible index starts at 0 (alas) so we add 1 to make human\n const pageNum = br.getPageNum(index);\n const pageType = br.getPageProp(index, 'pageType');\n const numLeafs = br.getNumLeafs();\n\n if (!this.maxPageNum) {\n // Calculate Max page num (used for pagination display)\n let maxPageNum = 0;\n let pageNumVal;\n for (let i = 0; i < numLeafs; i++) {\n pageNumVal = br.getPageNum(i);\n if (!isNaN(pageNumVal) && pageNumVal > maxPageNum) {\n maxPageNum = pageNumVal;\n }\n }\n this.maxPageNum = maxPageNum;\n }\n\n return getNavPageNumHtml(index, numLeafs, pageNum, pageType, this.maxPageNum);\n }\n\n /**\n * Renders the navbar string to the DOM\n * @param {number} index\n */\n updateNavPageNum(index) {\n this.$root.find('.BRcurrentpage').html(this.getNavPageNumString(index));\n }\n\n /**\n * Update the nav bar display - does not cause navigation.\n * @param {number} index\n */\n updateNavIndex(index) {\n // We want to update the value, but normally moving the slider\n // triggers jumpToIndex which triggers this method\n index = index !== undefined ? index : this.br.currentIndex();\n this.$root.find('.BRpager').data('swallowchange', true).slider('value', index);\n }\n}\n\n/**\n * Renders the html for the page string\n * @param {number} index\n * @param {number} numLeafs\n * @param {number|string} pageNum\n * @param {*} pageType @deprecated\n * @param {number} maxPageNum\n * @return {string}\n */\nexport function getNavPageNumHtml(index, numLeafs, pageNum, pageType, maxPageNum) {\n if (pageNum[0] != 'n') {\n let pageStr = `Page ${pageNum}`;\n if (maxPageNum) {\n pageStr += ` of ${maxPageNum}`;\n }\n return pageStr;\n } else {\n return `${index + 1} / ${numLeafs}`;\n }\n}\n","/** @typedef {import('./BookModel.js').PageNumString} PageNumString */\n/** @typedef {import('./BookModel.js').LeafNum} LeafNum */\n\nexport const DEFAULT_OPTIONS = {\n /**\n * @type {string} A string, such as \"mode/1up\". See\n * http://openlibrary.org/dev/docs/bookurls for valid syntax\n */\n defaults: null,\n\n /** Padding in 1up */\n padding: 10,\n\n /** @type {'full' | 'embed' | 'responsive'} UI mode */\n ui: 'full',\n\n /** Controls whether nav/toolbar will autohide */\n uiAutoHide: false,\n\n /** thumbnail mode */\n /** number of rows to pre-cache out a view */\n thumbRowBuffer: 2,\n thumbColumns: 6,\n /** number of thumbnails to load at once */\n thumbMaxLoading: 4,\n /** spacing between thumbnails */\n thumbPadding: 10,\n\n /** @type {number | 'fast' | 'slow'} speed for flip animation */\n flipSpeed: 'fast',\n\n showToolbar: true,\n showNavbar: true,\n navBarTitle: '',\n\n showLogo: true,\n /** Where the logo links to */\n logoURL: 'https://archive.org',\n\n /**\n * Base URL for UI images - should be overriden (before init) by\n * custom implementations.\n * $$$ This is the same directory as the images referenced by relative\n * path in the CSS. Would be better to automagically find that path.\n */\n imagesBaseURL: '/BookReader/images/',\n\n /**\n * Zoom levels\n * @type {Array<{reduce: number, autofit: AutoFitValues}}\n * $$$ provide finer grained zooming, {reduce: 8, autofit: null}, {reduce: 16, autofit: null}\n * The autofit code ensures that fit to width and fit to height will be available\n */\n reductionFactors: [\n {reduce: 0.5, autofit: null},\n {reduce: 1, autofit: null},\n {reduce: 2, autofit: null},\n {reduce: 3, autofit: null},\n {reduce: 4, autofit: null},\n {reduce: 6, autofit: null}\n ],\n\n /** Object to hold parameters related to 1up mode */\n onePage: {\n /** @type {AutoFitValues} */\n autofit: 'auto',\n },\n\n /** Object to hold parameters related to 2up mode */\n twoPage: {\n /** Width of cover */\n coverInternalPadding: 0,\n /** Padding outside of cover */\n coverExternalPadding: 0,\n /** Width of book spine $$$ consider sizing based on book length */\n bookSpineDivWidth: 64,\n /** @type {AutoFitValues} */\n autofit: 'auto'\n },\n\n onePageMinBreakpoint: 800,\n\n bookTitle: '',\n /** @type {string} */\n bookUrl: null,\n /** @type {string} */\n bookUrlText: null,\n /** @type {string} */\n bookUrlTitle: null,\n enableBookTitleLink: true,\n /**\n * @type {string} language in ISO 639-1 (PRIVATE: Will also\n * handle language name in English, native name, 639-2/T, or 639-2/B . (archive.org books\n * appear to use 639-2/B ? But I don't think that's a guarantee). See\n * https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes ) */\n bookLanguage: null,\n\n /**\n * @type {Array<{label: string, value: *, extraValueClass: string?}>}\n * Fields used to populate the info window\n * @example [\n * {label: 'Title', value: 'Open Library BookReader Presentation'},\n * {label: 'Author', value: 'Internet Archive'},\n * {label: 'Demo Info', value: 'This demo shows how one could use BookReader with their own content.'},\n * ]\n **/\n metadata: [],\n /** @type {string} */\n thumbnail: null,\n /** @type {string} */\n bookUrlMoreInfo: null,\n\n /** Experimental Controls (eg b/w) */\n enableExperimentalControls: false,\n\n /** CSS selectors */\n /** Where BookReader mounts to */\n el: '#BookReader',\n\n /** @type {'lr' | 'rl'} Page progression */\n pageProgression: 'lr',\n\n /** Should image downloads be blocked */\n protected: false,\n\n /**\n * Settings for individual plugins. Note they have to be imported first.\n * WIP: Most plugins just put their options anywhere in this global options file,\n * but going forward we'll keep them here.\n **/\n plugins: {\n /** @type {import('../plugins/plugin.text_selection.js').TextSelectionPluginOptions} */\n textSelection: null,\n },\n\n /**\n * Any variables you want to define. If an option has a StringWithVars type, or\n * has something like `{{server}}/foo.com` in its value, these variables replace\n * the `{{foo}}`.\n * @type { {[var_name: string]: any } }\n */\n vars: {},\n\n /**\n * @type {Array<[PageData, PageData]|[PageData]>}\n * Data is a simple way to populate the bookreader\n *\n * Example:\n * ```\n * [\n * // Each child is a spread\n * [\n * {\n * width: 123,\n * height: 123,\n * // Optional: If not provided, include a getPageURI\n * uri: 'https://archive.org/image.jpg',\n * // Optional: Shown instead of leaf number if present.\n * pageNum: '1'\n * },\n * {width: 123, height: 123, uri: 'https://archive.org/image2.jpg', pageNum: '2'},\n * ]\n * ],\n * ```\n *\n * Note if URI is omitted, a custom getPageURI can be provided. This allows the page\n * URI to the result of a function, which allows for things such as dynamic\n * page scaling.\n */\n data: [],\n\n /** Advanced methods for page rendering */\n /** @type {() => number} */\n getNumLeafs: null,\n /** @type {(index: number) => number} */\n getPageWidth: null,\n /** @type {(index: number) => number} */\n getPageHeight: null,\n /** @type {(index: number, reduce: number, rotate: number) => *} */\n getPageURI: null,\n\n /**\n * @type {(index: number) => 'L' | 'R'}\n * Return which side, left or right, that a given page should be displayed on\n */\n getPageSide: null,\n\n /**\n * @type {(pindex: number) => [number, number]}\n * This function returns the left and right indices for the user-visible\n * spread that contains the given index. The return values may be\n * null if there is no facing page or the index is invalid.\n */\n getSpreadIndices: null,\n\n /** @type {(index: number) => string} */\n getPageNum: null,\n /** @type {(index: number) => *} */\n getPageProp: null,\n /** @type {(index: number) => number} */\n leafNumToIndex: null,\n\n /**\n * @type {(frameWidth: number|string, frameHeight: number|string, viewParams) => *}\n * Optional: if present, and embed code will be shown in the share dialog\n */\n getEmbedCode: null,\n\n controls: {\n onePage: {\n label: 'One-page view',\n visible: true,\n className: 'onepg',\n },\n twoPage: {\n label: 'Two-page view',\n visible: true,\n className: 'twopg',\n },\n thumbnail: {\n label: 'Thumbnail view',\n visible: true,\n className: 'thumb',\n },\n viewmode: {\n visible: false,\n className: 'viewmode',\n excludedModes: [],\n },\n },\n\n /**\n * @type {Boolean}\n * Optional: if true, starts in fullscreen mode\n */\n startFullscreen: false,\n};\n\n/** @typedef {'width' | 'height' | 'auto' | 'none'} AutoFitValues */\n\n/**\n * @typedef {Object} PageData\n * @property {number} width\n * @property {number} height\n * @property {string} [uri] If not provided, include a getPageURI\n * @property {PageNumString} [pageNum] Shown instead of leaf number if present\n * @property {LeafNum} [leafNum] Sometimes specified in Internet Archive books\n * @property {'L' | 'R'} [pageSide] PRIVATE; computed automatically\n * @property {boolean} [viewable=true] Set false if page is not viewable. Displays a dummy preview image.\n * @property {number} [unviewablesStart] PRIVATE; index where the chunk of unviewable pages started\n *\n * Note if URI is omitted, a custom getPageURI can be provided. This allows the page\n * URI to the result of a function, which allows for things such as dynamic\n * page scaling.\n */\n\n/** @typedef {typeof DEFAULT_OPTIONS} BookReaderOptions */\n\n","import { escapeHTML } from '../utils.js';\nimport { EVENTS } from '../events.js';\n/** @typedef {import(\"../../BookReader.js\").default} BookReader */\n\nexport class Toolbar {\n /**\n * @param {BookReader} br\n */\n constructor(br) {\n this.br = br;\n }\n\n /**\n * This method builds the html for the toolbar. It can be decorated to extend\n * the toolbar.\n * @return {JQuery}\n */\n buildToolbarElement() {\n const { br } = this;\n const logoHtml = !br.showLogo ? '' : `\n \n \n `;\n\n // Add large screen navigation\n br.refs.$BRtoolbar = $(`\n
    \n
    \n
    \n ${logoHtml}\n \n
    \n
    \n \n \n \n \n
    \n
    \n
    `);\n // TODO actual hamburger menu\n // \n // \n // \n\n const $titleSectionEl = br.refs.$BRtoolbar.find('.BRtoolbarSectionTitle');\n if (br.bookUrl && br.options.enableBookTitleLink) {\n $titleSectionEl.append(\n $('')\n .attr({href: br.bookUrl, title: br.bookUrlTitle})\n .addClass('BRreturn')\n .html(br.bookUrlText || br.bookTitle)\n )\n } else if (br.bookTitle) {\n $titleSectionEl.append(br.bookUrlText || br.bookTitle);\n }\n\n // const $hamburger = br.refs.$BRtoolbar.find('BRtoolbarHamburger');\n return br.refs.$BRtoolbar;\n }\n\n /**\n * Initializes the toolbar (top)\n * @param {string} mode\n * @param {string} ui\n */\n initToolbar(mode, ui) {\n const { br } = this;\n br.refs.$br.append(this.buildToolbarElement());\n\n br.$('.BRnavCntl').addClass('BRup');\n br.$('.pause').hide();\n\n this.updateToolbarZoom(br.reduce); // Pretty format\n\n // We build in mode 2\n br.refs.$BRtoolbar.append();\n\n // Hide mode buttons and autoplay if 2up is not available\n // $$$ if we end up with more than two modes we should show the applicable buttons\n if ( !br.canSwitchToMode(br.constMode2up) ) {\n br.$('.two_page_mode, .play, .pause').hide();\n }\n if ( !br.canSwitchToMode(br.constModeThumb) ) {\n br.$('.thumbnail_mode').hide();\n }\n\n // Hide one page button if it is the only mode available\n if ( ! (br.canSwitchToMode(br.constMode2up) || br.canSwitchToMode(br.constModeThumb)) ) {\n br.$('.one_page_mode').hide();\n }\n\n $('
    ')\n .append(blankShareDiv())\n .append(blankInfoDiv())\n .appendTo(br.refs.$br);\n\n br.$('.BRinfo .BRfloatTitle a')\n .attr({href: br.bookUrl})\n .text(br.bookTitle)\n .addClass('title');\n\n // These functions can be overridden\n this.buildInfoDiv(br.$('.BRinfo'));\n this.buildShareDiv(br.$('.BRshare'));\n\n br.$('.share').colorbox({\n inline: true,\n opacity: \"0.5\",\n href: br.$('.BRshare'),\n onLoad: () => {\n br.trigger(EVENTS.stop);\n br.$('.BRpageviewValue').val(window.location.href);\n }\n });\n br.$('.info').colorbox({\n inline: true,\n opacity: \"0.5\",\n href: br.$('.BRinfo'),\n onLoad: () => {\n br.trigger(EVENTS.stop);\n }\n });\n }\n\n /**\n * @deprecated\n * @todo .BRzoom doesn't exist anywhere, so this is likely dead code\n * Update the displayed zoom factor based on reduction factor\n * @param {number} reduce\n */\n updateToolbarZoom(reduce) {\n const { br } = this;\n // $$$ TODO preserve zoom/fit for each mode\n const autofit = br.mode == br.constMode2up ? br.twoPage.autofit : br.onePage.autofit;\n /** @type {string} */\n let value;\n if (autofit) {\n value = autofit.slice(0,1).toUpperCase() + autofit.slice(1);\n } else {\n value = (100 / reduce)\n .toFixed(2)\n // Strip trailing zeroes and decimal if all zeroes\n .replace(/0+$/,'')\n .replace(/\\.$/,'')\n + '%';\n }\n br.$('.BRzoom').text(value);\n }\n\n /**\n * @param {JQuery} $shareDiv\n */\n buildShareDiv($shareDiv) {\n const { br } = this;\n const pageView = document.location + '';\n const bookView = (pageView + '').replace(/#.*/,'');\n\n const embedHtml = !br.getEmbedCode ? '' : `\n
    \n

    Copy and paste one of these options to share this book elsewhere.

    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n
    \n \n \n \n
    \n \n
    \n
    \n
    `;\n\n const $form = $(`\n
    Share this book
    \n
    \n \n
    \n
    \n
    \n
    \n ${embedHtml}\n
    \n \n
    `);\n\n $form.appendTo($shareDiv);\n\n $form.find('.fieldset-embed input').on('change', event => {\n const form = $(event.target).parents('form:first');\n const params = {};\n params.mode = $(form.find('.fieldset-embed input[name=pages]:checked')).val();\n if (form.find('.fieldset-embed input[name=thispage]').prop('checked')) {\n params.page = br.getPageNum(br.currentIndex());\n }\n\n if (br.getEmbedCode) {\n // $$$ changeable width/height to be added to share UI\n const frameWidth = \"480px\";\n const frameHeight = \"430px\";\n form.find('.BRframeEmbed').val(br.getEmbedCode(frameWidth, frameHeight, params));\n }\n });\n\n $form.find('input, textarea').on('focus', event => event.target.select());\n\n // Bind share buttons\n\n // Use url without hashes\n $form.find('.facebook-share-button').click(() => {\n const params = $.param({ u: this._getSocialShareUrl() });\n const url = 'https://www.facebook.com/sharer.php?' + params;\n createPopup(url, 600, 400, 'Share');\n });\n $form.find('.twitter-share-button').click(() => {\n const params = $.param({\n url: this._getSocialShareUrl(),\n text: br.bookTitle\n });\n const url = 'https://twitter.com/intent/tweet?' + params;\n createPopup(url, 600, 400, 'Share');\n });\n $form.find('.email-share-button').click(() => {\n const body = `${br.bookTitle}\\n\\n${this._getSocialShareUrl()}`;\n window.location.href = `mailto:?subject=${encodeURI(br.bookTitle)}&body=${encodeURI(body)}`;\n });\n\n $form.find('input[name=thispage]').trigger('change');\n\n $form.appendTo($shareDiv);\n }\n\n _getSocialShareUrl() {\n const { br } = this;\n const shareThisPage = br.$('.thispage-social').prop('checked');\n if (shareThisPage) {\n return window.location.href;\n } else {\n return `${document.location.protocol}//${window.location.hostname}${window.location.pathname}`;\n }\n }\n\n /**\n * @param {JQuery} $infoDiv DOM element. Appends info to this element\n * Can be overridden or extended\n */\n buildInfoDiv($infoDiv) {\n const { br } = this;\n // Remove these legacy elements\n $infoDiv.find('.BRfloatBody, .BRfloatCover, .BRfloatFoot').remove();\n\n const $leftCol = $(`
    `);\n if (br.thumbnail) {\n $leftCol.append($(`\n
    \n \"${escapeHTML(br.bookTitle)}\"\n
    `));\n }\n\n const $rightCol = $(`
    `);\n\n // A loop to build fields\n for (const {extraValueClass = '', label, value} of br.metadata) {\n const escapedValue = label === 'Title' ? escapeHTML(value) : value;\n $rightCol.append($(`\n
    \n
    ${label}
    \n
    ${escapedValue}
    \n
    `));\n }\n\n const moreInfoText = br.bookUrlMoreInfo ? br.bookUrlMoreInfo : br.bookTitle;\n if (moreInfoText && br.bookUrl) {\n $rightCol.append($(`\n
    `));\n }\n\n const $footer = $(`
    `);\n const $children = $('
    ').append([\n $leftCol,\n $rightCol,\n $('
    '),\n ]);\n\n $infoDiv\n .append($children, $footer)\n .addClass('wide');\n }\n\n /**\n * @return {number} (in pixels) of the toolbar height. 0 if no toolbar.\n */\n getToolBarHeight() {\n const { $BRtoolbar } = this.br.refs;\n if ($BRtoolbar && $BRtoolbar.css('display') === 'block') {\n return ($BRtoolbar.outerHeight() + parseInt($BRtoolbar.css('top')));\n } else {\n return 0;\n }\n }\n}\n\nexport function blankInfoDiv() {\n return $(`\n
    \n
    About this book\n \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n \n
    `);\n}\n\nexport function blankShareDiv() {\n return $(`\n
    \n
    \n Share\n \n
    \n
    `);\n}\n\n/**\n * Helper opens a popup window. On mobile it only opens a new tab. Used for share.\n * @param {string} href\n * @param {number} width\n * @param {number} height\n * @param {string} name\n */\nexport function createPopup(href, width, height, name) {\n // Fixes dual-screen position\n const dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : screen.left;\n const dualScreenTop = window.screenTop != undefined ? window.screenTop : screen.top;\n\n const win_w = window.innerWidth || document.documentElement.clientWidth || screen.width;\n const win_h = window.innerHeight || document.documentElement.clientHeight || screen.height;\n\n const left = ((win_w / 2) - (width / 2)) + dualScreenLeft;\n const top = ((win_h / 2) - (height / 2)) + dualScreenTop;\n const opts = `status=1,width=${width},height=${height},top=${top},left=${left}`;\n\n window.open(href, name, opts);\n}\n","// @ts-check\nimport { clamp } from './utils.js';\n/** @typedef {import('./options.js').PageData} PageData */\n/** @typedef {import('../BookReader.js').default} BookReader */\n\n// URI to display when a page is not viewable.\n// TODO Render configurable html for the user instead.\n// FIXME Don't reference files on archive.org\nconst UNVIEWABLE_PAGE_URI = '/bookreader/static/preview-default.png';\n\n/**\n * Contains information about the Book/Document independent of the way it is\n * being rendering. Nothing here should reference e.g. the mode, zoom, etc.\n * It's just information about the book and its pages (usually as specified\n * in the BookReader data option.)\n */\nexport class BookModel {\n /**\n * @param {BookReader} br\n */\n constructor(br) {\n this.br = br;\n\n /** @type {{width: number, height: number}} memoize storage */\n this._medianPageSize = null;\n /** @type {[PageData[], number]} */\n this._getDataFlattenedCached = null;\n }\n\n /**\n * Memoized\n * @return {{width: number, height: number}}\n */\n getMedianPageSize() {\n if (this._medianPageSize) {\n return this._medianPageSize;\n }\n\n // A little expensive but we just do it once\n const widths = [];\n const heights = [];\n for (let i = 0; i < this.getNumLeafs(); i++) {\n widths.push(this.getPageWidth(i));\n heights.push(this.getPageHeight(i));\n }\n\n widths.sort();\n heights.sort();\n\n this._medianPageSize = {\n width: widths[Math.floor(widths.length / 2)],\n height: heights[Math.floor(heights.length / 2)]\n };\n return this._medianPageSize;\n }\n\n /**\n * Returns the page width for the given index, or first or last page if out of range\n * @deprecated see getPageWidth\n * @param {PageIndex} index\n */\n _getPageWidth(index) {\n // Synthesize a page width for pages not actually present in book.\n // May or may not be the best approach.\n // If index is out of range we return the width of first or last page\n index = clamp(index, 0, this.getNumLeafs() - 1);\n return this.getPageWidth(index);\n }\n\n /**\n * Returns the page height for the given index, or first or last page if out of range\n * @deprecated see getPageHeight\n * @param {PageIndex} index\n */\n _getPageHeight(index) {\n const clampedIndex = clamp(index, 0, this.getNumLeafs() - 1);\n return this.getPageHeight(clampedIndex);\n }\n\n /**\n * Returns the *highest* index the given page number, or undefined\n * @param {PageNumString} pageNum\n * @return {PageIndex|undefined}\n */\n getPageIndex(pageNum) {\n const pageIndices = this.getPageIndices(pageNum);\n return pageIndices.length ? pageIndices[pageIndices.length - 1] : undefined;\n }\n\n /**\n * Returns an array (possibly empty) of the indices with the given page number\n * @param {PageNumString} pageNum\n * @return {PageIndex[]}\n */\n getPageIndices(pageNum) {\n const indices = [];\n\n // Check for special \"nXX\" page number\n if (pageNum.slice(0,1) == 'n') {\n try {\n const pageIntStr = pageNum.slice(1, pageNum.length);\n const pageIndex = parseInt(pageIntStr);\n indices.push(pageIndex);\n return indices;\n } catch (err) {\n // Do nothing... will run through page names and see if one matches\n }\n }\n\n for (let i = 0; i < this.getNumLeafs(); i++) {\n if (this.getPageNum(i) == pageNum) {\n indices.push(i);\n }\n }\n\n return indices;\n }\n\n /**\n * Returns the name of the page as it should be displayed in the user interface\n * @param {PageIndex} index\n * @return {string}\n */\n getPageName(index) {\n return 'Page ' + this.getPageNum(index);\n }\n\n /**\n * @return {number} the total number of leafs (like an array length)\n */\n getNumLeafs() {\n // For deprecated interface support, if numLeafs is set, use that.\n if (this.br.numLeafs !== undefined)\n return this.br.numLeafs;\n return this._getDataFlattened().length;\n }\n\n /**\n * @param {PageIndex} index\n * @return {Number|undefined}\n */\n getPageWidth(index) {\n return this.getPageProp(index, 'width');\n }\n\n /**\n * @param {PageIndex} index\n * @return {Number|undefined}\n */\n getPageHeight(index) {\n return this.getPageProp(index, 'height');\n }\n\n /**\n * @param {PageIndex} index\n * @param {number} reduce - not used in default implementation\n * @param {number} rotate - not used in default implementation\n * @return {string|undefined}\n */\n // eslint-disable-next-line no-unused-vars\n getPageURI(index, reduce, rotate) {\n return !this.getPageProp(index, 'viewable', true) ? UNVIEWABLE_PAGE_URI : this.getPageProp(index, 'uri');\n }\n\n /**\n * @param {PageIndex} index\n * @return {'L' | 'R'}\n */\n getPageSide(index) {\n return this.getPageProp(index, 'pageSide') || (index % 2 === 0 ? 'R' : 'L');\n }\n\n /**\n * @param {PageIndex} index\n * @return {PageNumString}\n */\n getPageNum(index) {\n const pageNum = this.getPageProp(index, 'pageNum');\n return pageNum === undefined ? `n${index}` : pageNum;\n }\n\n /**\n * Generalized property accessor.\n * @param {PageIndex} index\n * @param {keyof PageData} propName\n * @param {*} [fallbackValue] return if undefined\n * @return {*|undefined}\n */\n getPageProp(index, propName, fallbackValue = undefined) {\n return this._getDataProp(index, propName, fallbackValue);\n }\n\n /**\n * This function returns the left and right indices for the user-visible\n * spread that contains the given index.\n * @note Can return indices out of range of what's in the book.\n * @param {PageIndex} pindex\n * @return {[PageIndex, PageIndex]} eg [0, 1]\n */\n getSpreadIndices(pindex) {\n if (this.br.pageProgression == 'rl') {\n return this.getPageSide(pindex) == 'R' ? [pindex + 1, pindex] : [pindex, pindex - 1];\n } else {\n return this.getPageSide(pindex) == 'L' ? [pindex, pindex + 1] : [pindex - 1, pindex];\n }\n }\n\n /**\n * Single images in the Internet Archive scandata.xml metadata are (somewhat incorrectly)\n * given a \"leaf\" number. Some of these images from the scanning process should not\n * be displayed in the BookReader (for example colour calibration cards). Since some\n * of the scanned images will not be displayed in the BookReader (those marked with\n * addToAccessFormats false in the scandata.xml) leaf numbers and BookReader page\n * indexes are generally not the same. This function returns the BookReader page\n * index given a scanned leaf number.\n *\n * This function is used, for example, to map between search results (that use the\n * leaf numbers) and the displayed pages in the BookReader.\n * @param {LeafNum} leafNum\n * @return {PageIndex}\n */\n leafNumToIndex(leafNum) {\n const index = this._getDataFlattened()\n .findIndex(d => d.leafNum == leafNum);\n // If no match is found, fall back to the leafNum provide (leafNum == index)\n return index > -1 ? index : leafNum;\n }\n\n /**\n * Parses the pageString format\n * @param {PageString} pageString\n * @return {PageIndex|undefined}\n */\n parsePageString(pageString) {\n let pageIndex;\n // Check for special \"leaf\"\n const leafMatch = /^leaf(\\d+)/.exec(pageString);\n if (leafMatch) {\n pageIndex = this.leafNumToIndex(parseInt(leafMatch[1], 10));\n if (pageIndex === null) {\n pageIndex = undefined; // to match return type of getPageIndex\n }\n } else {\n pageIndex = this.getPageIndex(pageString);\n }\n return pageIndex;\n }\n\n /**\n * @param {number} index use negatives to get page relative to end\n */\n getPage(index) {\n const numLeafs = this.getNumLeafs();\n if (index < 0 && index >= -numLeafs) {\n index += numLeafs;\n }\n return new PageModel(this, index);\n }\n\n /**\n * @param {object} [arg0]\n * @param {number} [arg0.start] inclusive\n * @param {number} [arg0.end] exclusive\n * @param {boolean} [arg0.combineConsecutiveUnviewables] Yield only first unviewable\n * of a chunk of unviewable pages instead of each page\n */\n * pagesIterator({ start = 0, end = Infinity, combineConsecutiveUnviewables = false } = {}) {\n start = Math.max(0, start);\n end = Math.min(end, this.getNumLeafs());\n\n for (let i = start; i < end; i++) {\n const page = this.getPage(i);\n if (combineConsecutiveUnviewables && page.isConsecutiveUnviewable) continue;\n\n yield page;\n }\n }\n\n /**\n * Flatten the nested structure (make 1d array), and also add pageSide prop\n * @return {PageData[]}\n */\n _getDataFlattened() {\n if (this._getDataFlattenedCached && this._getDataFlattenedCached[1] === this.br.data.length)\n return this._getDataFlattenedCached[0];\n\n let prevPageSide = null;\n /** @type {number|null} */\n let unviewablesChunkStart = null;\n let index = 0;\n // @ts-ignore TS doesn't know about flatMap for some reason\n const flattend = this.br.data.flatMap(spread => {\n return spread.map(page => {\n if (!page.pageSide) {\n if (prevPageSide === null) {\n page.pageSide = spread.length === 2 ? 'L' : 'R';\n } else {\n page.pageSide = prevPageSide === 'L' ? 'R' : 'L';\n }\n }\n prevPageSide = page.pageSide;\n\n if (page.viewable === false) {\n if (unviewablesChunkStart === null) {\n page.unviewablesStart = unviewablesChunkStart = index;\n } else {\n page.unviewablesStart = unviewablesChunkStart;\n }\n } else {\n unviewablesChunkStart = null;\n }\n\n index++;\n return page;\n });\n });\n\n // length is used as a cache breaker\n this._getDataFlattenedCached = [flattend, this.br.data.length];\n return flattend;\n }\n\n /**\n * Helper. Return a prop for a given index. Returns `fallbackValue` if index is invalid or\n * property not on page.\n * @param {PageIndex} index\n * @param {keyof PageData} prop\n * @param {*} fallbackValue return if property not on the record\n * @return {*}\n */\n _getDataProp(index, prop, fallbackValue = undefined) {\n const dataf = this._getDataFlattened();\n const invalidIndex = isNaN(index) || index < 0 || index >= dataf.length;\n if (invalidIndex || 'undefined' == typeof(dataf[index][prop]))\n return fallbackValue;\n return dataf[index][prop];\n }\n}\n\n/**\n * A controlled schema for page data.\n */\nclass PageModel {\n /**\n * @param {BookModel} book\n * @param {PageIndex} index\n */\n constructor(book, index) {\n this.book = book;\n this.index = index;\n this.width = book.getPageWidth(index);\n this.height = book.getPageHeight(index);\n this.pageSide = book.getPageSide(index);\n this.leafNum = book._getDataProp(index, 'leafNum', this.index);\n\n /** @type {boolean} */\n this.isViewable = book._getDataProp(index, 'viewable', true);\n /** @type {PageIndex} The first in the series of unviewable pages this is in. */\n this.unviewablesStart = book._getDataProp(index, 'unviewablesStart') || null;\n /**\n * Consecutive unviewable pages are pages in an unviewable \"chunk\" which are not the first\n * of that chunk.\n */\n this.isConsecutiveUnviewable = !this.isViewable && this.unviewablesStart != this.index;\n\n this._rawData = this.book._getDataFlattened()[this.index];\n }\n\n /**\n * Updates the page to no longer be unviewable. Assumes the\n * Page's URI is already set/correct.\n */\n makeViewable(newViewableState = true) {\n if (this.isViewable == newViewableState) return;\n\n if (newViewableState) {\n this._rawData.viewable = true;\n delete this._rawData.unviewablesStart;\n // Update any subsequent page to now point to the right \"start\"\n for (const page of this.book.pagesIterator({ start: this.index + 1 })) {\n if (page.isViewable) break;\n page._rawData.unviewablesStart = this.index + 1;\n }\n } else {\n this._rawData.viewable = false;\n this._rawData.unviewablesStart = (this.prev && !this.prev.isViewable) ? this.prev.unviewablesStart : this.index;\n // Update any subsequent page to now point to the right \"start\"\n for (const page of this.book.pagesIterator({ start: this.index + 1 })) {\n if (!page.isViewable) break;\n page._rawData.unviewablesStart = this._rawData.unviewablesStart;\n }\n }\n }\n\n get prev() {\n return this.findPrev();\n }\n\n get next() {\n return this.findNext();\n }\n\n /**\n * @param {number} reduce\n * @param {number} rotate\n */\n getURI(reduce, rotate) {\n return this.book.getPageURI(this.index, reduce, rotate);\n }\n\n /**\n * @param {object} [arg0]\n * @param {boolean} [arg0.combineConsecutiveUnviewables] Whether to only yield the first page\n * of a series of unviewable pages instead of each page\n * @return {PageModel|void}\n */\n findNext({ combineConsecutiveUnviewables = false } = {}) {\n return this.book\n .pagesIterator({ start: this.index + 1, combineConsecutiveUnviewables })\n .next().value;\n }\n\n /**\n * @param {object} [arg0]\n * @param {boolean} [arg0.combineConsecutiveUnviewables] Whether to only yield the first page\n * of a series of unviewable pages instead of each page\n * @return {PageModel|void}\n */\n findPrev({ combineConsecutiveUnviewables = false } = {}) {\n if (this.index == 0) return undefined;\n\n if (combineConsecutiveUnviewables) {\n if (this.isConsecutiveUnviewable) {\n return this.book.getPage(this.unviewablesStart);\n } else {\n // Recursively goes backward through the book\n // TODO make a reverse iterator to make it look identical to findNext\n const prev = new PageModel(this.book, this.index - 1);\n return prev.isViewable ? prev : prev.findPrev({ combineConsecutiveUnviewables });\n }\n } else {\n return new PageModel(this.book, this.index - 1);\n }\n }\n}\n\n// There are a few main ways we can reference a specific page in a book:\n/**\n * @typedef {string} PageNumString\n * Possible values: /^n?\\d+$/. Example: 'n7', '18'\n * Not necessarily unique\n */\n/**\n * @typedef {number} LeafNum\n * No clue if 0 or 1 indexed or consecutive; generally from IA book info.\n */\n/**\n * @typedef {string} PageString\n * Possible values: /^(leaf)?\\d+$/ Example: 'leaf7', '18'\n * If leaf-prefixed, then the number is a LeafNum. Otherwise it's a PageNumString\n */\n/** @typedef {number} PageIndex 0-based index of all the pages */\n","// @ts-check\nimport { clamp } from './utils.js';\nimport { EVENTS } from './events.js';\n\n/** @typedef {import('../BookReader.js').default} BookReader */\n/** @typedef {import('./BookModel.js').BookModel} BookModel */\n/** @typedef {import('./BookModel.js').PageIndex} PageIndex */\n/** @typedef {import('./options.js').BookReaderOptions} BookReaderOptions */\n\nexport class Mode2Up {\n /**\n * @param {BookReader} br\n * @param {BookModel} bookModel\n */\n constructor(br, bookModel) {\n this.br = br;\n this.book = bookModel;\n\n /** @type {HTMLDivElement} */\n this.leafEdgeL = null;\n /** @type {HTMLDivElement} */\n this.leafEdgeR = null;\n }\n\n /**\n * @template T\n * @param {HTMLElement} element\n * @param {T} data\n * @param {function(HTMLElement, { data: T }): void} handler\n */\n setClickHandler(element, data, handler) {\n $(element).unbind('mouseup').bind('mouseup', data, function(e) {\n handler(this, e);\n });\n }\n\n drawLeafs() {\n const $twoPageViewEl = this.br.refs.$brTwoPageView;\n\n // $$$ we should use calculated values in this.twoPage (recalc if necessary)\n const indexL = this.br.twoPage.currentIndexL;\n const top = this.top();\n\n this.br.twoPage.scaledWL = this.getPageWidth(indexL);\n this.br.twoPage.gutter = this.gutter();\n\n this.br.prefetchImg(indexL);\n $(this.br.prefetchedImgs[indexL]).css({\n position: 'absolute',\n left: `${this.br.twoPage.gutter - this.br.twoPage.scaledWL}px`,\n right: '',\n top: `${top}px`,\n height: `${this.br.twoPage.height}px`, // $$$ height forced the same for both pages\n width: `${this.br.twoPage.scaledWL}px`,\n zIndex: 2\n }).appendTo($twoPageViewEl);\n\n const indexR = this.br.twoPage.currentIndexR;\n\n // $$$ should use getwidth2up?\n this.br.twoPage.scaledWR = this.getPageWidth(indexR);\n this.br.prefetchImg(indexR);\n $(this.br.prefetchedImgs[indexR]).css({\n position: 'absolute',\n left: `${this.br.twoPage.gutter}px`,\n right: '',\n top: `${top}px`,\n height: `${this.br.twoPage.height}px`, // $$$ height forced the same for both pages\n width: `${this.br.twoPage.scaledWR}px`,\n zIndex: 2\n }).appendTo($twoPageViewEl);\n\n this.displayedIndices = [this.br.twoPage.currentIndexL, this.br.twoPage.currentIndexR];\n this.setMouseHandlers();\n this.br.displayedIndices = this.displayedIndices;\n this.br.updateToolbarZoom(this.br.reduce);\n this.br.trigger('pageChanged');\n }\n\n /**\n * @param {1} direction\n */\n zoom(direction) {\n this.br.stopFlipAnimations();\n\n // Recalculate autofit factors\n this.calculateReductionFactors();\n\n // Get new zoom state\n const reductionFactor = this.br.nextReduce(this.br.reduce, direction, this.br.twoPage.reductionFactors);\n if ((this.br.reduce == reductionFactor.reduce) && (this.br.twoPage.autofit == reductionFactor.autofit)) {\n // Same zoom\n return;\n }\n this.br.twoPage.autofit = reductionFactor.autofit;\n this.br.reduce = reductionFactor.reduce;\n this.br.pageScale = this.br.reduce; // preserve current reduce\n\n // Preserve view center position\n const oldCenter = this.getViewCenter();\n\n // If zooming in, reload imgs. DOM elements will be removed by prepareTwoPageView\n // $$$ An improvement would be to use the low res image until the larger one is loaded.\n if (1 == direction) {\n for (const img in this.br.prefetchedImgs) {\n delete this.br.prefetchedImgs[img];\n }\n }\n\n // Prepare view with new center to minimize visual glitches\n this.prepareTwoPageView(oldCenter.percentageX, oldCenter.percentageY);\n }\n\n /**\n * @param {number} centerPercentageX\n * @param {number} centerPercentageY\n */\n prepareTwoPageView(centerPercentageX, centerPercentageY) {\n // Some decisions about two page view:\n //\n // Both pages will be displayed at the same height, even if they were different physical/scanned\n // sizes. This simplifies the animation (from a design as well as technical standpoint). We\n // examine the page aspect ratios (in calculateSpreadSize) and use the page with the most \"normal\"\n // aspect ratio to determine the height.\n //\n // The two page view div is resized to keep the middle of the book in the middle of the div\n // even as the page sizes change. To e.g. keep the middle of the book in the middle of the BRcontent\n // div requires adjusting the offset of BRtwpageview and/or scrolling in BRcontent.\n this.br.refs.$brContainer.empty();\n this.br.refs.$brContainer.css('overflow', 'auto');\n\n // We want to display two facing pages. We may be missing\n // one side of the spread because it is the first/last leaf,\n // foldouts, missing pages, etc\n\n const targetLeaf = clamp(this.br.firstIndex, this.br.firstDisplayableIndex(), this.br.lastDisplayableIndex());\n const currentSpreadIndices = this.book.getSpreadIndices(targetLeaf);\n this.br.twoPage.currentIndexL = currentSpreadIndices[0];\n this.br.twoPage.currentIndexR = currentSpreadIndices[1];\n\n this.calculateSpreadSize(); //sets twoPage.width, twoPage.height and others\n\n this.br.pruneUnusedImgs();\n this.br.prefetch(); // Preload images or reload if scaling has changed\n\n // Add the two page view\n // $$$ Can we get everything set up and then append?\n const $twoPageViewEl = $('
    ');\n this.br.refs.$brTwoPageView = $twoPageViewEl;\n this.br.refs.$brContainer.append($twoPageViewEl);\n\n // Attaches to first child, so must come after we add the page view\n this.br.refs.$brContainer.dragscrollable({preventDefault:true});\n this.br.bindGestures(this.br.refs.$brContainer);\n\n // $$$ calculate first then set\n this.br.refs.$brTwoPageView.css({\n height: `${this.br.twoPage.totalHeight}px`,\n width: `${this.br.twoPage.totalWidth}px`,\n position: 'absolute'\n });\n\n // If there will not be scrollbars (e.g. when zooming out) we center the book\n // since otherwise the book will be stuck off-center\n if (this.br.twoPage.totalWidth < this.br.refs.$brContainer.prop('clientWidth')) {\n centerPercentageX = 0.5;\n }\n if (this.br.twoPage.totalHeight < this.br.refs.$brContainer.prop('clientHeight')) {\n centerPercentageY = 0.5;\n }\n\n this.centerView(centerPercentageX, centerPercentageY);\n\n this.br.twoPage.coverDiv = document.createElement('div');\n $(this.br.twoPage.coverDiv).attr('class', 'BRbookcover').css({\n width: `${this.br.twoPage.bookCoverDivWidth}px`,\n height: `${this.br.twoPage.bookCoverDivHeight}px`,\n visibility: 'visible'\n }).appendTo(this.br.refs.$brTwoPageView);\n\n this.leafEdgeR = document.createElement('div');\n this.leafEdgeR.className = 'BRleafEdgeR';\n\n $(this.leafEdgeR).css({\n width: `${this.br.twoPage.leafEdgeWidthR}px`,\n height: `${this.br.twoPage.height}px`,\n left: `${this.br.twoPage.gutter + this.br.twoPage.scaledWR}px`,\n top: `${this.br.twoPage.bookCoverDivTop + this.br.twoPage.coverInternalPadding}px`,\n border: this.br.twoPage.leafEdgeWidthR === 0 ? 'none' : null\n }).appendTo(this.br.refs.$brTwoPageView);\n\n this.leafEdgeL = document.createElement('div');\n this.leafEdgeL.className = 'BRleafEdgeL';\n $(this.leafEdgeL).css({\n width: `${this.br.twoPage.leafEdgeWidthL}px`,\n height: `${this.br.twoPage.height}px`,\n left: `${this.br.twoPage.bookCoverDivLeft + this.br.twoPage.coverInternalPadding}px`,\n top: `${this.br.twoPage.bookCoverDivTop + this.br.twoPage.coverInternalPadding}px`,\n border: this.br.twoPage.leafEdgeWidthL === 0 ? 'none' : null\n }).appendTo(this.br.refs.$brTwoPageView);\n\n const div = document.createElement('div');\n $(div).attr('class', 'BRgutter').css({\n width: `${this.br.twoPage.bookSpineDivWidth}px`,\n height: `${this.br.twoPage.bookSpineDivHeight}px`,\n left: `${this.br.twoPage.gutter - this.br.twoPage.bookSpineDivWidth * 0.5}px`,\n top: `${this.br.twoPage.bookSpineDivTop}px`\n }).appendTo(this.br.refs.$brTwoPageView);\n\n this.preparePopUp();\n\n this.br.displayedIndices = [];\n\n this.drawLeafs();\n this.br.updateToolbarZoom(this.br.reduce);\n\n this.br.prefetch();\n\n if (this.br.enableSearch) {\n this.br.removeSearchHilites();\n this.br.updateSearchHilites();\n }\n\n this.br.updateBrClasses();\n }\n\n /**\n * This function prepares the \"View Page n\" popup that shows while the mouse is\n * over the left/right \"stack of sheets\" edges. It also binds the mouse\n * events for these divs.\n */\n preparePopUp() {\n this.br.twoPagePopUp = document.createElement('div');\n this.br.twoPagePopUp.className = 'BRtwoPagePopUp';\n $(this.br.twoPagePopUp).css({\n zIndex: '1000'\n }).appendTo(this.br.refs.$brContainer);\n $(this.br.twoPagePopUp).hide();\n\n const leafEdges = [\n {\n $leafEdge: $(this.leafEdgeL),\n /** @type {function(number): PageIndex} */\n jumpIndexForPageX: this.jumpIndexForLeftEdgePageX.bind(this),\n leftOffset: () => -$(this.br.twoPagePopUp).width() + 120,\n },\n {\n $leafEdge: $(this.leafEdgeR),\n /** @type {function(number): PageIndex} */\n jumpIndexForPageX: this.jumpIndexForRightEdgePageX.bind(this),\n leftOffset: () => -120,\n },\n ];\n\n for (const { $leafEdge, jumpIndexForPageX, leftOffset } of leafEdges) {\n $leafEdge.on('mouseenter', () => $(this.br.twoPagePopUp).show());\n $leafEdge.on('mouseleave', () => $(this.br.twoPagePopUp).hide());\n\n $leafEdge.on('click', e => {\n this.br.trigger(EVENTS.stop);\n this.br.jumpToIndex(jumpIndexForPageX(e.pageX));\n });\n\n $leafEdge.on('mousemove', e => {\n const jumpIndex = clamp(jumpIndexForPageX(e.pageX), 0, this.book.getNumLeafs() - 1);\n $(this.br.twoPagePopUp).text(`View ${this.book.getPageName(jumpIndex)}`);\n\n // $$$ TODO: Make sure popup is positioned so that it is in view\n // (https://bugs.edge.launchpad.net/gnubook/+bug/327456)\n $(this.br.twoPagePopUp).css({\n left: `${e.pageX - this.br.refs.$brContainer.offset().left + this.br.refs.$brContainer.scrollLeft() + leftOffset()}px`,\n top: `${e.pageY - this.br.refs.$brContainer.offset().top + this.br.refs.$brContainer.scrollTop()}px`\n });\n });\n }\n }\n\n /**\n * Calculates 2-page spread dimensions based on this.br.twoPage.currentIndexL and\n * this.br.twoPage.currentIndexR\n * This function sets this.br.twoPage.height, twoPage.width\n */\n calculateSpreadSize() {\n const firstIndex = this.br.twoPage.currentIndexL;\n const secondIndex = this.br.twoPage.currentIndexR;\n\n // Calculate page sizes and total leaf width\n let spreadSize;\n if ( this.br.twoPage.autofit) {\n spreadSize = this.getIdealSpreadSize(firstIndex, secondIndex);\n } else {\n // set based on reduction factor\n spreadSize = this.getSpreadSizeFromReduce(firstIndex, secondIndex, this.br.reduce);\n }\n\n // Both pages together\n this.br.twoPage.height = spreadSize.height;\n this.br.twoPage.width = spreadSize.width;\n\n // Individual pages\n this.br.twoPage.scaledWL = this.getPageWidth(firstIndex);\n this.br.twoPage.scaledWR = this.getPageWidth(secondIndex);\n\n // Leaf edges\n this.br.twoPage.edgeWidth = spreadSize.totalLeafEdgeWidth; // The combined width of both edges\n this.br.twoPage.leafEdgeWidthL = this.br.leafEdgeWidth(this.br.twoPage.currentIndexL);\n this.br.twoPage.leafEdgeWidthR = this.br.twoPage.edgeWidth - this.br.twoPage.leafEdgeWidthL;\n\n\n // Book cover\n // The width of the book cover div. The combined width of both pages, twice the width\n // of the book cover internal padding (2*10) and the page edges\n this.br.twoPage.bookCoverDivWidth = this.coverWidth(this.br.twoPage.scaledWL + this.br.twoPage.scaledWR);\n // The height of the book cover div\n this.br.twoPage.bookCoverDivHeight = this.br.twoPage.height + 2 * this.br.twoPage.coverInternalPadding;\n\n\n // We calculate the total width and height for the div so that we can make the book\n // spine centered\n const leftGutterOffset = this.gutterOffsetForIndex(firstIndex);\n const leftWidthFromCenter = this.br.twoPage.scaledWL - leftGutterOffset + this.br.twoPage.leafEdgeWidthL;\n const rightWidthFromCenter = this.br.twoPage.scaledWR + leftGutterOffset + this.br.twoPage.leafEdgeWidthR;\n const largestWidthFromCenter = Math.max( leftWidthFromCenter, rightWidthFromCenter );\n this.br.twoPage.totalWidth = 2 * (largestWidthFromCenter + this.br.twoPage.coverInternalPadding + this.br.twoPage.coverExternalPadding);\n this.br.twoPage.totalHeight = this.br.twoPage.height + 2 * (this.br.twoPage.coverInternalPadding + this.br.twoPage.coverExternalPadding);\n\n // We want to minimize the unused space in two-up mode (maximize the amount of page\n // shown). We give width to the leaf edges and these widths change (though the sum\n // of the two remains constant) as we flip through the book. With the book\n // cover centered and fixed in the BRcontainer div the page images will meet\n // at the \"gutter\" which is generally offset from the center.\n this.br.twoPage.middle = this.br.twoPage.totalWidth >> 1;\n this.br.twoPage.gutter = this.br.twoPage.middle + this.gutterOffsetForIndex(firstIndex);\n\n // The left edge of the book cover moves depending on the width of the pages\n // $$$ change to getter\n this.br.twoPage.bookCoverDivLeft = this.br.twoPage.gutter - this.br.twoPage.scaledWL - this.br.twoPage.leafEdgeWidthL - this.br.twoPage.coverInternalPadding;\n // The top edge of the book cover stays a fixed distance from the top\n this.br.twoPage.bookCoverDivTop = this.br.twoPage.coverExternalPadding;\n\n // Book spine\n this.br.twoPage.bookSpineDivHeight = this.br.twoPage.height + 2 * this.br.twoPage.coverInternalPadding;\n this.br.twoPage.bookSpineDivLeft = this.br.twoPage.middle - (this.br.twoPage.bookSpineDivWidth >> 1);\n this.br.twoPage.bookSpineDivTop = this.br.twoPage.bookCoverDivTop;\n\n\n this.br.reduce = spreadSize.reduce; // $$$ really set this here?\n }\n\n /**\n *\n * @param {number} firstIndex\n * @param {number} secondIndex\n * @return {{ width: number, height: number, totalLeafEdgeWidth: number, reduce: number}}\n */\n getIdealSpreadSize(firstIndex, secondIndex) {\n const ideal = {};\n\n // We check which page is closest to a \"normal\" page and use that to set the height\n // for both pages. This means that foldouts and other odd size pages will be displayed\n // smaller than the nominal zoom amount.\n const canon5Dratio = 1.5;\n\n const first = {\n height: this.book._getPageHeight(firstIndex),\n width: this.book._getPageWidth(firstIndex)\n };\n\n const second = {\n height: this.book._getPageHeight(secondIndex),\n width: this.book._getPageWidth(secondIndex)\n };\n\n const firstIndexRatio = first.height / first.width;\n const secondIndexRatio = second.height / second.width;\n\n let ratio;\n if (Math.abs(firstIndexRatio - canon5Dratio) < Math.abs(secondIndexRatio - canon5Dratio)) {\n ratio = firstIndexRatio;\n } else {\n ratio = secondIndexRatio;\n }\n\n const totalLeafEdgeWidth = Math.floor(this.book.getNumLeafs() * 0.1);\n const maxLeafEdgeWidth = Math.floor(this.br.refs.$brContainer.prop('clientWidth') * 0.1);\n ideal.totalLeafEdgeWidth = Math.min(totalLeafEdgeWidth, maxLeafEdgeWidth);\n\n const widthOutsidePages = 2 * (this.br.twoPage.coverInternalPadding + this.br.twoPage.coverExternalPadding) + ideal.totalLeafEdgeWidth;\n const heightOutsidePages = 2 * (this.br.twoPage.coverInternalPadding + this.br.twoPage.coverExternalPadding);\n\n ideal.width = (this.br.refs.$brContainer.width() - widthOutsidePages) >> 1;\n ideal.width -= 10; // $$$ fudge factor\n ideal.height = this.br.refs.$brContainer.height() - heightOutsidePages;\n\n ideal.height -= 15; // fudge factor\n\n if (ideal.height / ratio <= ideal.width) {\n //use height\n ideal.width = Math.floor(ideal.height / ratio);\n } else {\n //use width\n ideal.height = Math.floor(ideal.width * ratio);\n }\n\n // $$$ check this logic with large spreads\n ideal.reduce = ((first.height + second.height) / 2) / ideal.height;\n\n return ideal;\n }\n\n /**\n * Returns the spread size calculated from the reduction factor for the given pages\n * @param {number} firstIndex\n * @param {number} secondIndex\n * @return {Object}\n */\n getSpreadSizeFromReduce(firstIndex, secondIndex, reduce) {\n const spreadSize = {};\n // $$$ Scale this based on reduce?\n const totalLeafEdgeWidth = Math.floor(this.book.getNumLeafs() * 0.1);\n // $$$ Assumes leaf edge width constant at all zoom levels\n const maxLeafEdgeWidth = Math.floor(this.br.refs.$brContainer.prop('clientWidth') * 0.1);\n spreadSize.totalLeafEdgeWidth = Math.min(totalLeafEdgeWidth, maxLeafEdgeWidth);\n\n // $$$ Possibly incorrect -- we should make height \"dominant\"\n const nativeWidth = this.book._getPageWidth(firstIndex) + this.book._getPageWidth(secondIndex);\n const nativeHeight = this.book._getPageHeight(firstIndex) + this.book._getPageHeight(secondIndex);\n spreadSize.height = Math.floor( (nativeHeight / 2) / this.br.reduce );\n spreadSize.width = Math.floor( (nativeWidth / 2) / this.br.reduce );\n spreadSize.reduce = reduce;\n\n return spreadSize;\n }\n\n /**\n * Returns the current ideal reduction factor\n * @return {number}\n */\n getAutofitReduce() {\n const spreadSize = this.getIdealSpreadSize(this.br.twoPage.currentIndexL, this.br.twoPage.currentIndexR);\n return spreadSize.reduce;\n }\n\n /**\n * Returns true if the pages extend past the edge of the view\n * @deprecated slated for deprecation by v5.0.0\n * @return {boolean}\n */\n isZoomedIn() {\n let isZoomedIn = false;\n if (this.br.twoPage.autofit != 'auto') {\n if (this.br.reduce < this.getAutofitReduce()) {\n isZoomedIn = true;\n }\n }\n return isZoomedIn;\n }\n\n calculateReductionFactors() {\n this.br.twoPage.reductionFactors = this.br.reductionFactors.concat([\n {\n reduce: this.getIdealSpreadSize( this.br.twoPage.currentIndexL, this.br.twoPage.currentIndexR ).reduce,\n autofit: 'auto'\n }\n ]);\n this.br.twoPage.reductionFactors.sort(this.br._reduceSort);\n }\n\n /**\n * Set the cursor for two page view\n * @deprecated Since version 4.3.3. Will be deleted in version 5.0\n */\n setCursor() {\n const $twoPageViewEl = this.br.refs.$brTwoPageView;\n if ( ($twoPageViewEl.width() > this.br.refs.$brContainer.prop('clientWidth')) ||\n ($twoPageViewEl.height() > this.br.refs.$brContainer.prop('clientHeight')) ) {\n if (this.br.prefetchedImgs[this.br.twoPage.currentIndexL])\n this.br.prefetchedImgs[this.br.twoPage.currentIndexL].style.cursor = 'move';\n if (this.br.prefetchedImgs[this.br.twoPage.currentIndexR])\n this.br.prefetchedImgs[this.br.twoPage.currentIndexR].style.cursor = 'move';\n } else {\n if (this.br.prefetchedImgs[this.br.twoPage.currentIndexL])\n this.br.prefetchedImgs[this.br.twoPage.currentIndexL].style.cursor = '';\n if (this.br.prefetchedImgs[this.br.twoPage.currentIndexR])\n this.br.prefetchedImgs[this.br.twoPage.currentIndexR].style.cursor = '';\n }\n }\n\n /**\n * @param {Number|null} index to flip back one spread, pass index=null\n */\n flipBackToIndex(index) {\n if (this.br.constMode1up == this.br.mode) return;\n if (this.br.animating) return;\n\n if (null != this.br.leafEdgeTmp) {\n alert('error: leafEdgeTmp should be null!');\n return;\n }\n\n if (null == index) {\n const {currentIndexL, currentIndexR} = this.br.twoPage;\n const minDisplayedIndex = Math.min(currentIndexL, currentIndexR);\n const prev = this.book.getPage(minDisplayedIndex).findPrev({ combineConsecutiveUnviewables: true });\n if (!prev) return;\n index = prev.index;\n // Can only flip to a left page\n // (downstream code handles index = -1, so this is ok I guess)\n if (prev.pageSide == 'R') index--;\n }\n\n this.br.updateNavIndexThrottled(index);\n\n const previousIndices = this.book.getSpreadIndices(index);\n\n if (previousIndices[0] < this.br.firstDisplayableIndex() || previousIndices[1] < this.br.firstDisplayableIndex()) {\n return;\n }\n\n this.br.animating = true;\n\n if ('rl' != this.br.pageProgression) {\n // Assume LTR and we are going backward\n this.prepareFlipLeftToRight(previousIndices[0], previousIndices[1]);\n this.flipLeftToRight(previousIndices[0], previousIndices[1]);\n } else {\n // RTL and going backward\n this.prepareFlipRightToLeft(previousIndices[0], previousIndices[1]);\n this.flipRightToLeft(previousIndices[0], previousIndices[1]);\n }\n }\n\n /**\n * Flips the page on the left towards the page on the right\n * @param {number} newIndexL\n * @param {number} newIndexR\n */\n flipLeftToRight(newIndexL, newIndexR) {\n this.br.refs.$brContainer.addClass(\"BRpageFlipping\");\n const leftLeaf = this.br.twoPage.currentIndexL;\n\n const oldLeafEdgeWidthL = this.br.leafEdgeWidth(this.br.twoPage.currentIndexL);\n const newLeafEdgeWidthL = this.br.leafEdgeWidth(newIndexL);\n const leafEdgeTmpW = oldLeafEdgeWidthL - newLeafEdgeWidthL;\n\n const currWidthL = this.getPageWidth(leftLeaf);\n const newWidthL = this.getPageWidth(newIndexL);\n const newWidthR = this.getPageWidth(newIndexR);\n\n const top = this.top();\n const gutter = this.br.twoPage.middle + this.gutterOffsetForIndex(newIndexL);\n\n //animation strategy:\n // 0. remove search highlight, if any.\n // 1. create a new div, called leafEdgeTmp to represent the leaf edge between the leftmost edge\n // of the left leaf and where the user clicked in the leaf edge.\n // Note that if this function was triggered by left() and not a\n // mouse click, the width of leafEdgeTmp is very small (zero px).\n // 2. animate both leafEdgeTmp to the gutter (without changing its width) and animate\n // leftLeaf to width=0.\n // 3. When step 2 is finished, animate leafEdgeTmp to right-hand side of new right leaf\n // (left=gutter+newWidthR) while also animating the new right leaf from width=0 to\n // its new full width.\n // 4. After step 3 is finished, do the following:\n // - remove leafEdgeTmp from the dom.\n // - resize and move the right leaf edge (leafEdgeR) to left=gutter+newWidthR\n // and width=twoPage.edgeWidth-newLeafEdgeWidthL.\n // - resize and move the left leaf edge (leafEdgeL) to left=gutter-newWidthL-newLeafEdgeWidthL\n // and width=newLeafEdgeWidthL.\n // - resize the back cover (twoPage.coverDiv) to left=gutter-newWidthL-newLeafEdgeWidthL-10\n // and width=newWidthL+newWidthR+twoPage.edgeWidth+20\n // - move new left leaf (newIndexL) forward to zindex=2 so it can receive clicks.\n // - remove old left and right leafs from the dom [pruneUnusedImgs()].\n // - prefetch new adjacent leafs.\n // - set up click handlers for both new left and right leafs.\n // - redraw the search highlight.\n // - update the pagenum box and the url.\n\n const $twoPageViewEl = this.br.refs.$brTwoPageView;\n const leftEdgeTmpLeft = gutter - currWidthL - leafEdgeTmpW;\n\n this.br.leafEdgeTmp = document.createElement('div');\n this.br.leafEdgeTmp.className = 'BRleafEdgeTmp';\n $(this.br.leafEdgeTmp).css({\n width: `${leafEdgeTmpW}px`,\n height: `${this.br.twoPage.height}px`,\n left: `${leftEdgeTmpLeft}px`,\n top: `${top}px`,\n zIndex: 1000,\n }).appendTo($twoPageViewEl);\n\n $(this.leafEdgeL).css({\n width: `${newLeafEdgeWidthL}px`,\n left: `${gutter - currWidthL - newLeafEdgeWidthL}px`\n });\n\n // Left gets the offset of the current left leaf from the document\n const left = $(this.br.prefetchedImgs[leftLeaf]).offset().left;\n // $$$ This seems very similar to the gutter. May be able to consolidate the logic.\n const right = `${$twoPageViewEl.prop('clientWidth') - left - $(this.br.prefetchedImgs[leftLeaf]).width() + $twoPageViewEl.offset().left - 2}px`;\n\n // We change the left leaf to right positioning\n // $$$ This causes animation glitches during resize. See https://bugs.edge.launchpad.net/gnubook/+bug/328327\n $(this.br.prefetchedImgs[leftLeaf]).css({\n right: right,\n left: ''\n });\n\n $(this.br.leafEdgeTmp).animate({left: gutter}, this.br.flipSpeed, 'easeInSine');\n\n if (this.br.enableSearch) this.br.removeSearchHilites();\n\n $(this.br.prefetchedImgs[leftLeaf]).animate({width: '0px'}, this.br.flipSpeed, 'easeInSine', () => {\n\n $(this.br.leafEdgeTmp).animate({left: `${gutter + newWidthR}px`}, this.br.flipSpeed, 'easeOutSine');\n\n this.br.$('.BRgutter').css({left: `${gutter - this.br.twoPage.bookSpineDivWidth * 0.5}px`});\n\n $(this.br.prefetchedImgs[newIndexR]).animate({width: `${newWidthR}px`}, this.br.flipSpeed, 'easeOutSine', () => {\n $(this.br.prefetchedImgs[newIndexL]).css('zIndex', 2);\n\n //jquery adds display:block to the element style, which interferes with our print css\n $(this.br.prefetchedImgs[newIndexL]).css('display', '');\n $(this.br.prefetchedImgs[newIndexR]).css('display', '');\n\n $(this.leafEdgeR).css({\n // Moves the right leaf edge\n width: `${this.br.twoPage.edgeWidth - newLeafEdgeWidthL}px`,\n left: `${gutter + newWidthR}px`\n });\n\n $(this.leafEdgeL).css({\n // Moves and resizes the left leaf edge\n width: `${newLeafEdgeWidthL}px`,\n left: `${gutter - newWidthL - newLeafEdgeWidthL}px`\n });\n\n // Resizes the brown border div\n $(this.br.twoPage.coverDiv).css({\n width: `${this.coverWidth(newWidthL + newWidthR)}px`,\n left: `${gutter - newWidthL - newLeafEdgeWidthL - this.br.twoPage.coverInternalPadding}px`\n });\n\n $(this.br.leafEdgeTmp).remove();\n this.br.leafEdgeTmp = null;\n\n // $$$ TODO refactor with opposite direction flip\n\n this.br.twoPage.currentIndexL = newIndexL;\n this.br.twoPage.currentIndexR = newIndexR;\n this.br.twoPage.scaledWL = newWidthL;\n this.br.twoPage.scaledWR = newWidthR;\n this.br.twoPage.gutter = gutter;\n\n this.br.updateFirstIndex(this.br.twoPage.currentIndexL);\n this.br.displayedIndices = [newIndexL, newIndexR];\n this.br.pruneUnusedImgs();\n this.br.prefetch();\n this.br.animating = false;\n\n if (this.br.enableSearch) this.br.updateSearchHilites();\n\n this.setMouseHandlers();\n\n if (this.br.animationFinishedCallback) {\n this.br.animationFinishedCallback();\n this.br.animationFinishedCallback = null;\n }\n\n this.br.refs.$brContainer.removeClass(\"BRpageFlipping\");\n\n this.br.textSelectionPlugin?.stopPageFlip(this.br.refs.$brContainer);\n this.br.trigger('pageChanged');\n });\n });\n }\n\n /**\n * Whether we flip left or right is dependent on the page progression\n * to flip forward one spread, pass index=null\n * @param {number} index\n */\n flipFwdToIndex(index) {\n if (this.br.animating) return;\n\n if (null != this.br.leafEdgeTmp) {\n alert('error: leafEdgeTmp should be null!');\n return;\n }\n\n if (null == index) {\n // Need to use the max here, since it could be a right to left book\n const {currentIndexL, currentIndexR} = this.br.twoPage;\n const maxDisplayedIndex = Math.max(currentIndexL, currentIndexR);\n const nextPage = this.book.getPage(maxDisplayedIndex).findNext({ combineConsecutiveUnviewables: true });\n if (!nextPage) return;\n index = nextPage.index;\n }\n if (index > this.br.lastDisplayableIndex()) return;\n\n this.br.updateNavIndexThrottled(index);\n\n this.br.animating = true;\n\n const nextIndices = this.book.getSpreadIndices(index);\n\n if ('rl' != this.br.pageProgression) {\n // We did not specify RTL\n this.prepareFlipRightToLeft(nextIndices[0], nextIndices[1]);\n this.flipRightToLeft(nextIndices[0], nextIndices[1]);\n } else {\n // RTL\n this.prepareFlipLeftToRight(nextIndices[0], nextIndices[1]);\n this.flipLeftToRight(nextIndices[0], nextIndices[1]);\n }\n }\n\n /**\n * Flip from left to right and show the nextL and nextR indices on those sides\n * $$$ better not to have to pass gutter in\n * @param {number} newIndexL\n * @param {number} newIndexR\n */\n flipRightToLeft(newIndexL, newIndexR) {\n this.br.refs.$brContainer.addClass(\"BRpageFlipping\");\n\n const oldLeafEdgeWidthL = this.br.leafEdgeWidth(this.br.twoPage.currentIndexL);\n const oldLeafEdgeWidthR = this.br.twoPage.edgeWidth - oldLeafEdgeWidthL;\n const newLeafEdgeWidthL = this.br.leafEdgeWidth(newIndexL);\n const newLeafEdgeWidthR = this.br.twoPage.edgeWidth - newLeafEdgeWidthL;\n\n const leafEdgeTmpW = oldLeafEdgeWidthR - newLeafEdgeWidthR;\n\n const top = this.top();\n const scaledW = this.getPageWidth(this.br.twoPage.currentIndexR);\n\n const middle = this.br.twoPage.middle;\n const gutter = middle + this.gutterOffsetForIndex(newIndexL);\n\n const $twoPageViewEl = this.br.refs.$brTwoPageView;\n\n this.br.leafEdgeTmp = document.createElement('div');\n this.br.leafEdgeTmp.className = 'BRleafEdgeTmp';\n $(this.br.leafEdgeTmp).css({\n width: `${leafEdgeTmpW}px`,\n height: `${this.br.twoPage.height}px`,\n left: `${gutter + scaledW}px`,\n top: `${top}px`,\n zIndex:1000\n }).appendTo($twoPageViewEl);\n\n const newWidthL = this.getPageWidth(newIndexL);\n const newWidthR = this.getPageWidth(newIndexR);\n\n $(this.leafEdgeR).css({width: `${newLeafEdgeWidthR}px`, left: `${gutter + newWidthR}px` });\n const speed = this.br.flipSpeed;\n\n if (this.br.enableSearch) this.br.removeSearchHilites();\n\n $(this.br.leafEdgeTmp).animate({left: gutter}, speed, 'easeInSine');\n $(this.br.prefetchedImgs[this.br.twoPage.currentIndexR]).animate({width: '0px'}, speed, 'easeInSine', () => {\n this.br.$('BRgutter').css({left: `${gutter - this.br.twoPage.bookSpineDivWidth * 0.5}px`});\n $(this.br.leafEdgeTmp).animate({left: `${gutter - newWidthL - leafEdgeTmpW}px`}, speed, 'easeOutSine');\n $(this.br.prefetchedImgs[newIndexL]).animate({width: `${newWidthL}px`}, speed, 'easeOutSine', () => {\n $(this.br.prefetchedImgs[newIndexR]).css('zIndex', 2);\n\n //jquery adds display:block to the element style, which interferes with our print css\n $(this.br.prefetchedImgs[newIndexL]).css('display', '');\n $(this.br.prefetchedImgs[newIndexR]).css('display', '');\n\n $(this.leafEdgeL).css({\n width: `${newLeafEdgeWidthL}px`,\n left: `${gutter - newWidthL - newLeafEdgeWidthL}px`\n });\n\n // Resizes the book cover\n $(this.br.twoPage.coverDiv).css({\n width: `${this.coverWidth(newWidthL + newWidthR)}px`,\n left: `${gutter - newWidthL - newLeafEdgeWidthL - this.br.twoPage.coverInternalPadding}px`\n });\n\n $(this.br.leafEdgeTmp).remove();\n this.br.leafEdgeTmp = null;\n\n this.br.twoPage.currentIndexL = newIndexL;\n this.br.twoPage.currentIndexR = newIndexR;\n this.br.twoPage.scaledWL = newWidthL;\n this.br.twoPage.scaledWR = newWidthR;\n this.br.twoPage.gutter = gutter;\n\n this.br.updateFirstIndex(this.br.twoPage.currentIndexL);\n this.br.displayedIndices = [newIndexL, newIndexR];\n this.br.pruneUnusedImgs();\n this.br.prefetch();\n this.br.animating = false;\n\n\n if (this.br.enableSearch) this.br.updateSearchHilites();\n\n this.setMouseHandlers();\n\n if (this.br.animationFinishedCallback) {\n this.br.animationFinishedCallback();\n this.br.animationFinishedCallback = null;\n }\n\n this.br.refs.$brContainer.removeClass(\"BRpageFlipping\");\n\n this.br.textSelectionPlugin?.stopPageFlip(this.br.refs.$brContainer);\n this.br.trigger('pageChanged');\n });\n });\n }\n\n setMouseHandlers() {\n /**\n * @param {HTMLElement} element\n * @param {JQuery.MouseDownEvent} e\n */\n const handler = function(element, e) {\n if (e.which == 3) {\n // right click\n return !e.data.self.br.protected;\n }\n e.data.self.br.trigger(EVENTS.stop);\n e.data.self.br[e.data.direction === 'L' ? 'left' : 'right']();\n\n // Removed event handler for mouse movement, seems not to be needed\n /*\n // Changes per WEBDEV-2737\n BookReader: zoomed-in 2 page view, clicking page should change the page\n $(element)\n .mousemove(function() {\n e.preventDefault();\n })\n */\n }\n\n this.setClickHandler(\n this.br.prefetchedImgs[this.br.twoPage.currentIndexR],\n { self: this, direction: 'R' },\n handler\n );\n this.setClickHandler(\n this.br.prefetchedImgs[this.br.twoPage.currentIndexL],\n { self: this, direction: 'L' },\n handler\n );\n }\n\n /**\n * Prepare to flip the left page towards the right. This corresponds to moving\n * backward when the page progression is left to right.\n * @param {number} prevL\n * @param {number} prevR\n */\n prepareFlipLeftToRight(prevL, prevR) {\n this.br.prefetchImg(prevL);\n this.br.prefetchImg(prevR);\n\n const height = this.book._getPageHeight(prevL);\n const width = this.book._getPageWidth(prevL);\n const middle = this.br.twoPage.middle;\n const top = this.top();\n const scaledW = this.br.twoPage.height * width / height; // $$$ assumes height of page is dominant\n\n // The gutter is the dividing line between the left and right pages.\n // It is offset from the middle to create the illusion of thickness to the pages\n const gutter = middle + this.gutterOffsetForIndex(prevL);\n\n const leftCSS = {\n position: 'absolute',\n left: `${gutter - scaledW}px`,\n right: '', // clear right property\n top: `${top}px`,\n height: this.br.twoPage.height,\n width: `${scaledW}px`,\n zIndex: 1\n };\n\n $(this.br.prefetchedImgs[prevL]).css(leftCSS);\n\n const $twoPageViewEl = this.br.refs.$brTwoPageView;\n $twoPageViewEl.append(this.br.prefetchedImgs[prevL]);\n\n const rightCSS = {\n position: 'absolute',\n left: `${gutter}px`,\n right: '',\n top: `${top}px`,\n height: this.br.twoPage.height,\n width: '0',\n zIndex: 2\n };\n\n $(this.br.prefetchedImgs[prevR]).css(rightCSS);\n\n $twoPageViewEl.append(this.br.prefetchedImgs[prevR]);\n }\n\n /**\n * // $$$ mang we're adding an extra pixel in the middle. See https://bugs.edge.launchpad.net/gnubook/+bug/411667\n */\n prepareFlipRightToLeft(nextL, nextR) {\n // Prefetch images\n this.br.prefetchImg(nextL);\n this.br.prefetchImg(nextR);\n\n let height = this.book._getPageHeight(nextR);\n let width = this.book._getPageWidth(nextR);\n const middle = this.br.twoPage.middle;\n const top = this.top();\n let scaledW = this.br.twoPage.height * width / height;\n\n const gutter = middle + this.gutterOffsetForIndex(nextL);\n\n $(this.br.prefetchedImgs[nextR]).css({\n position: 'absolute',\n left: `${gutter}px`,\n top: `${top}px`,\n height: this.br.twoPage.height,\n width: `${scaledW}px`,\n zIndex: 1,\n });\n\n const $twoPageViewEl = this.br.refs.$brTwoPageView;\n $twoPageViewEl.append(this.br.prefetchedImgs[nextR]);\n\n height = this.book._getPageHeight(nextL);\n width = this.book._getPageWidth(nextL);\n scaledW = this.br.twoPage.height * width / height;\n\n $(this.br.prefetchedImgs[nextL]).css({\n position: 'absolute',\n right: `${$twoPageViewEl.prop('clientWidth') - gutter}px`,\n top: `${top}px`,\n height: this.br.twoPage.height,\n width: '0px', // Start at 0 width, then grow to the left\n zIndex: 2,\n });\n\n $twoPageViewEl.append(this.br.prefetchedImgs[nextL]);\n }\n\n getPageWidth(index) {\n // We return the width based on the dominant height\n const height = this.book._getPageHeight(index);\n const width = this.book._getPageWidth(index);\n // $$$ we assume width is relative to current spread\n return Math.floor(this.br.twoPage.height * width / height);\n }\n\n /**\n * Returns the position of the gutter (line between the page images)\n */\n gutter() {\n return this.br.twoPage.middle + this.gutterOffsetForIndex(this.br.twoPage.currentIndexL);\n }\n\n /**\n * Returns the offset for the top of the page images\n */\n top() {\n return this.br.twoPage.coverExternalPadding + this.br.twoPage.coverInternalPadding; // $$$ + border?\n }\n\n /**\n * Returns the width of the cover div given the total page width\n * @param {number} totalPageWidth\n * @return {number}\n */\n coverWidth(totalPageWidth) {\n return totalPageWidth + this.br.twoPage.edgeWidth + 2 * this.br.twoPage.coverInternalPadding;\n }\n\n /**\n * Returns the percentage offset into twopageview div at the center of container div\n */\n getViewCenter() {\n const { $brContainer, $brTwoPageView } = this.br.refs;\n const center = {};\n\n const containerOffset = $brContainer.offset();\n const viewOffset = $brTwoPageView.offset();\n center.percentageX = (containerOffset.left - viewOffset.left + ($brContainer.prop('clientWidth') >> 1)) / this.br.twoPage.totalWidth;\n center.percentageY = (containerOffset.top - viewOffset.top + ($brContainer.prop('clientHeight') >> 1)) / this.br.twoPage.totalHeight;\n\n return center;\n }\n\n /**\n * Centers the point given by percentage from left,top of twopageview\n * @param {number} percentageX\n * @param {number} percentageY\n */\n centerView(percentageX, percentageY) {\n if ('undefined' == typeof(percentageX)) {\n percentageX = 0.5;\n }\n if ('undefined' == typeof(percentageY)) {\n percentageY = 0.5;\n }\n\n const viewWidth = this.br.refs.$brTwoPageView.width();\n const containerClientWidth = this.br.refs.$brContainer.prop('clientWidth');\n const intoViewX = percentageX * viewWidth;\n\n const viewHeight = this.br.refs.$brTwoPageView.height();\n const containerClientHeight = this.br.refs.$brContainer.prop('clientHeight');\n const intoViewY = percentageY * viewHeight;\n\n if (viewWidth < containerClientWidth) {\n // Can fit width without scrollbars - center by adjusting offset\n this.br.refs.$brTwoPageView.css('left', `${(containerClientWidth >> 1) - intoViewX}px`);\n } else {\n // Need to scroll to center\n this.br.refs.$brTwoPageView.css('left', 0);\n this.br.refs.$brContainer.scrollLeft(intoViewX - (containerClientWidth >> 1));\n }\n\n if (viewHeight < containerClientHeight) {\n // Fits with scrollbars - add offset\n this.br.refs.$brTwoPageView.css('top', `${(containerClientHeight >> 1) - intoViewY}px`);\n } else {\n this.br.refs.$brTwoPageView.css('top', 0);\n this.br.refs.$brContainer.scrollTop(intoViewY - (containerClientHeight >> 1));\n }\n }\n\n /**\n * Returns the integer height of the click-to-flip areas at the edges of the book\n * @return {number}\n */\n flipAreaHeight() {\n return Math.floor(this.br.twoPage.height);\n }\n\n /**\n * Returns the the integer width of the flip areas\n * @return {number}\n */\n flipAreaWidth() {\n const max = 100; // $$$ TODO base on view width?\n const min = 10;\n\n const width = this.br.twoPage.width * 0.15;\n return Math.floor(clamp(width, min, max));\n }\n\n /**\n * Returns integer top offset for flip areas\n * @return {number}\n */\n flipAreaTop() {\n return Math.floor(this.br.twoPage.bookCoverDivTop + this.br.twoPage.coverInternalPadding);\n }\n\n /**\n * Left offset for left flip area\n * @return {number}\n */\n leftFlipAreaLeft() {\n return Math.floor(this.br.twoPage.gutter - this.br.twoPage.scaledWL);\n }\n\n /**\n * Left offset for right flip area\n * @return {number}\n */\n rightFlipAreaLeft() {\n return Math.floor(this.br.twoPage.gutter + this.br.twoPage.scaledWR - this.flipAreaWidth());\n }\n\n /**\n * Position calculation shared between search and text-to-speech functions\n */\n setHilightCss(div, index, left, right, top, bottom) {\n // We calculate the reduction factor for the specific page because it can be different\n // for each page in the spread\n const height = this.book._getPageHeight(index);\n const width = this.book._getPageWidth(index);\n const reduce = this.br.twoPage.height / height;\n const scaledW = Math.floor(width * reduce);\n\n const gutter = this.gutter();\n let pageL;\n if ('L' == this.book.getPageSide(index)) {\n pageL = gutter - scaledW;\n } else {\n pageL = gutter;\n }\n const pageT = this.top();\n\n $(div).css({\n width: `${(right - left) * reduce}px`,\n height: `${(bottom - top) * reduce}px`,\n left: `${pageL + left * reduce}px`,\n top: `${pageT + top * reduce}px`\n });\n }\n\n /**\n * Returns the gutter offset for the spread containing the given index.\n * This function supports RTL\n * @param {number} pindex\n * @return {number}\n */\n gutterOffsetForIndex(pindex) {\n // To find the offset of the gutter from the middle we calculate our percentage distance\n // through the book (0..1), remap to (-0.5..0.5) and multiply by the total page edge width\n let offset = Math.floor(((pindex / this.book.getNumLeafs()) - 0.5) * this.br.twoPage.edgeWidth);\n\n // But then again for RTL it's the opposite\n if ('rl' == this.br.pageProgression) {\n offset *= -1;\n }\n\n return offset;\n }\n\n /**\n * Returns the width of the leaf edge div for the page with index given\n * @param {number} pindex\n * @return {number}\n */\n leafEdgeWidth(pindex) {\n // $$$ could there be single pixel rounding errors for L vs R?\n if ((this.book.getPageSide(pindex) == 'L') && (this.br.pageProgression != 'rl')) {\n return Math.floor( (pindex / this.book.getNumLeafs()) * this.br.twoPage.edgeWidth + 0.5);\n } else {\n return Math.floor( (1 - pindex / this.book.getNumLeafs()) * this.br.twoPage.edgeWidth + 0.5);\n }\n }\n\n /**\n * Returns the target jump leaf given a page coordinate (inside the left page edge div)\n * @param {number} pageX\n * @return {PageIndex}\n */\n jumpIndexForLeftEdgePageX(pageX) {\n let jumpIndex;\n if ('rl' != this.br.pageProgression) {\n // LTR - flipping backward\n jumpIndex = this.br.twoPage.currentIndexL - ($(this.leafEdgeL).offset().left + $(this.leafEdgeL).width() - pageX) * 10;\n\n // browser may have resized the div due to font size change -- see https://bugs.launchpad.net/gnubook/+bug/333570\n jumpIndex = clamp(Math.round(jumpIndex), this.br.firstDisplayableIndex(), this.br.twoPage.currentIndexL - 2);\n return jumpIndex;\n\n } else {\n jumpIndex = this.br.twoPage.currentIndexL + ($(this.leafEdgeL).offset().left + $(this.leafEdgeL).width() - pageX) * 10;\n jumpIndex = clamp(Math.round(jumpIndex), this.br.twoPage.currentIndexL + 2, this.br.lastDisplayableIndex());\n return jumpIndex;\n }\n }\n\n /**\n * Returns the target jump leaf given a page coordinate (inside the right page edge div)\n * @param {number} pageX\n * @return {PageIndex}\n */\n jumpIndexForRightEdgePageX(pageX) {\n let jumpIndex;\n if ('rl' != this.br.pageProgression) {\n // LTR\n jumpIndex = this.br.twoPage.currentIndexL + (pageX - $(this.leafEdgeR).offset().left) * 10;\n jumpIndex = clamp(Math.round(jumpIndex), this.br.twoPage.currentIndexL + 2, this.br.lastDisplayableIndex());\n return jumpIndex;\n } else {\n jumpIndex = this.br.twoPage.currentIndexL - (pageX - $(this.leafEdgeR).offset().left) * 10;\n jumpIndex = clamp(Math.round(jumpIndex), this.br.firstDisplayableIndex(), this.br.twoPage.currentIndexL - 2);\n return jumpIndex;\n }\n }\n\n /**\n * Fetches the currently displayed images (if not already fetching)\n * as wells as any nearby pages.\n */\n prefetch() {\n // $$$ We should check here if the current indices have finished\n // loading (with some timeout) before loading more page images\n // See https://bugs.edge.launchpad.net/bookreader/+bug/511391\n const { max, min } = Math;\n const { book } = this;\n const { currentIndexL, currentIndexR } = this.br.twoPage;\n const ADJACENT_PAGES_TO_LOAD = 3;\n\n // currentIndexL can be -1; getPage returns the last page of the book\n // when given -1, so need to prevent that.\n let lowPage = book.getPage(max(0, min(currentIndexL, currentIndexR)));\n let highPage = book.getPage(max(currentIndexL, currentIndexR));\n for (let i = 0; i < ADJACENT_PAGES_TO_LOAD + 1; i++) {\n if (lowPage) {\n this.br.prefetchImg(lowPage.index);\n lowPage = lowPage.findPrev({ combineConsecutiveUnviewables: true });\n }\n\n if (highPage) {\n this.br.prefetchImg(highPage.index);\n highPage = highPage.findNext({ combineConsecutiveUnviewables: true });\n }\n }\n }\n}\n\n/**\n * @implements {BookReaderOptions[\"twoPage\"]}\n * @typedef {object} TwoPageState\n * @property {number} coverInternalPadding\n * @property {number} coverExternalPadding\n *\n * @property {import('./options.js').AutoFitValues} autofit\n * @property {number} width\n * @property {number} height\n * @property {number} currentIndexL\n * @property {number} currentIndexR\n * @property {number} scaledWL\n * @property {number} scaledWR\n * @property {number} gutter\n * @property {Array<{reduce: number, autofit: import('./options.js').AutoFitValues}>} reductionFactors\n * @property {number} totalHeight\n * @property {number} totalWidth\n *\n * @property {HTMLDivElement} coverDiv\n * @property {number} bookCoverDivTop\n * @property {number} bookCoverDivLeft\n * @property {number} bookCoverDivWidth\n * @property {number} bookCoverDivHeight\n *\n * @property {number} leafEdgeWidthL\n * @property {number} leafEdgeWidthR\n *\n * @property {number} bookSpineDivTop\n * @property {number} bookSpineDivLeft\n * @property {number} bookSpineDivWidth\n * @property {number} bookSpineDivHeight\n *\n * @property {number} edgeWidth\n * @property {number} middle\n */\n","/*\nCopyright(c)2008-2019 Internet Archive. Software license AGPL version 3.\n\nThis file is part of BookReader.\n\n BookReader is free software: you can redistribute it and/or modify\n it under the terms of the GNU Affero General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n BookReader is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Affero General Public License for more details.\n\n You should have received a copy of the GNU Affero General Public License\n along with BookReader. If not, see .\n\n The BookReader source is hosted at http://github.com/internetarchive/bookreader/\n\n*/\nimport PACKAGE_JSON from '../../package.json';\nimport * as utils from './BookReader/utils.js';\nimport { exposeOverrideable } from './BookReader/utils/classes.js';\nimport { Navbar, getNavPageNumHtml } from './BookReader/Navbar/Navbar.js';\nimport { DEFAULT_OPTIONS } from './BookReader/options.js';\n/** @typedef {import('./BookReader/options.js').BookReaderOptions} BookReaderOptions */\nimport { EVENTS } from './BookReader/events.js';\nimport { DebugConsole } from './BookReader/DebugConsole.js';\nimport {\n Toolbar,\n blankInfoDiv,\n blankShareDiv,\n createPopup,\n} from './BookReader/Toolbar/Toolbar.js';\nimport { BookModel } from './BookReader/BookModel.js';\nimport { Mode2Up } from './BookReader/Mode2Up.js';\n\nif (location.toString().indexOf('_debugShowConsole=true') != -1) {\n $(() => new DebugConsole().init());\n}\n\n/**\n * BookReader\n * @param {BookReaderOptions} options\n * TODO document all options properties\n * @constructor\n */\nexport default function BookReader(overrides = {}) {\n const options = jQuery.extend(true, {}, BookReader.defaultOptions, overrides, BookReader.optionOverrides);\n this.setup(options);\n}\n\nBookReader.version = PACKAGE_JSON.version;\n\n// Mode constants\nBookReader.constMode1up = 1;\nBookReader.constMode2up = 2;\nBookReader.constModeThumb = 3;\n\n// Animation constants\nBookReader.constNavAnimationDuration = 300;\nBookReader.constResizeAnimationDuration = 100;\n\n// Names of events that can be triggered via BookReader.prototype.trigger()\nBookReader.eventNames = EVENTS;\n\nBookReader.defaultOptions = DEFAULT_OPTIONS;\n\n/**\n * @type {BookReaderOptions}\n * This is here, just in case you need to absolutely override an option.\n */\nBookReader.optionOverrides = {};\n\n/**\n * Setup\n * It is separate from the constructor, so plugins can extend.\n * @param {BookReaderOptions} options\n */\nBookReader.prototype.setup = function(options) {\n // Store the options used to setup bookreader\n this.options = options;\n\n /** @type {number} @deprecated some past iterations set this */\n this.numLeafs = undefined;\n\n /** Overriden by plugin.search.js */\n this.enableSearch = false;\n\n /**\n * Used to supress fragment change for init with canonical URLs\n * @var {boolean}\n */\n this.suppressFragmentChange = false;\n\n /** @type {function(): void} */\n this.animationFinishedCallback = null;\n\n // @deprecated: Instance constants. Use Class constants instead\n this.constMode1up = BookReader.constMode1up;\n this.constMode2up = BookReader.constMode2up;\n this.constModeThumb = BookReader.constModeThumb;\n\n // Private properties below. Configuration should be done with options.\n /** @type {number} @private */\n this.reduce = 4;\n this.defaults = options.defaults;\n this.padding = options.padding;\n this.mode = null;\n this.prevReadMode = null;\n this.ui = options.ui;\n this.uiAutoHide = options.uiAutoHide;\n\n this.thumbWidth = 100; // will be overridden during prepareThumbnailView\n this.thumbRowBuffer = options.thumbRowBuffer;\n this.thumbColumns = options.thumbColumns;\n this.thumbMaxLoading = options.thumbMaxLoading;\n this.thumbPadding = options.thumbPadding;\n this.displayedRows = [];\n\n this.displayedIndices = [];\n this.imgs = {};\n this.prefetchedImgs = {}; //an object with numeric keys cooresponding to page index\n\n this.animating = false;\n this.flipSpeed = options.flipSpeed;\n this.flipDelay = options.flipDelay;\n this.twoPagePopUp = null;\n this.leafEdgeTmp = null;\n\n /**\n * Represents the first displayed index\n * In 2up mode it will be the left page\n * In 1 up mode it is the highest page\n * @property {number|null} firstIndex\n */\n this.firstIndex = null;\n this.lastDisplayableIndex2up = null;\n this.isFullscreenActive = false;\n this.lastScroll = null;\n\n this.showLogo = options.showLogo;\n this.logoURL = options.logoURL;\n this.imagesBaseURL = options.imagesBaseURL;\n\n this.reductionFactors = options.reductionFactors;\n this.onePage = options.onePage;\n /** @type {import('./BookReader/Mode2Up').TwoPageState} */\n this.twoPage = options.twoPage;\n this.onePageMinBreakpoint = options.onePageMinBreakpoint;\n\n this.bookTitle = options.bookTitle;\n this.bookUrl = options.bookUrl;\n this.bookUrlText = options.bookUrlText;\n this.bookUrlTitle = options.bookUrlTitle;\n this.titleLeaf = options.titleLeaf;\n\n this.metadata = options.metadata;\n this.thumbnail = options.thumbnail;\n this.bookUrlMoreInfo = options.bookUrlMoreInfo;\n\n this.enableExperimentalControls = options.enableExperimentalControls;\n this.el = options.el;\n\n this.pageProgression = options.pageProgression;\n this.protected = options.protected;\n this.getEmbedCode = options.getEmbedCode;\n this.popup = null;\n\n // Assign the data methods\n this.data = options.data;\n if (options.getNumLeafs) BookReader.prototype.getNumLeafs = options.getNumLeafs;\n if (options.getPageWidth) BookReader.prototype.getPageWidth = options.getPageWidth;\n if (options.getPageHeight) BookReader.prototype.getPageHeight = options.getPageHeight;\n if (options.getPageURI) BookReader.prototype.getPageURI = options.getPageURI;\n if (options.getPageSide) BookReader.prototype.getPageSide = options.getPageSide;\n if (options.getPageNum) BookReader.prototype.getPageNum = options.getPageNum;\n if (options.getPageProp) BookReader.prototype.getPageProp = options.getPageProp;\n if (options.getSpreadIndices) BookReader.prototype.getSpreadIndices = options.getSpreadIndices;\n if (options.leafNumToIndex) BookReader.prototype.leafNumToIndex = options.leafNumToIndex;\n\n /** @type {{[name: string]: JQuery}} */\n this.refs = {};\n\n /**\n * @private (for now) Models are largely state storing classes. This might be too much\n * granularity, but time will tell!\n */\n this._models = {\n book: new BookModel(this),\n };\n\n /**\n * @private Components are 'subchunks' of bookreader functionality, usually UI related\n * They should be relatively decoupled from each other/bookreader.\n * Note there are no hooks right now; components just provide methods that bookreader\n * calls at the correct moments.\n **/\n this._components = {\n navbar: new Navbar(this),\n toolbar: new Toolbar(this),\n };\n\n this._modes = {\n mode2Up: new Mode2Up(this, this._models.book),\n };\n\n /** Stores classes which we want to expose (selectively) some methods as overrideable */\n this._overrideable = {\n '_models.book': this._models.book,\n '_components.navbar': this._components.navbar,\n '_components.toolbar': this._components.toolbar,\n '_modes.mode2Up': this._modes.mode2Up,\n };\n};\n\n/** @deprecated unused outside Mode2Up */\nObject.defineProperty(BookReader.prototype, 'leafEdgeL', {\n get() { return this._modes.mode2Up.leafEdgeL; },\n set(newVal) { this._modes.mode2Up.leafEdgeL = newVal; }\n});\n/** @deprecated unused outside Mode2Up */\nObject.defineProperty(BookReader.prototype, 'leafEdgeR', {\n get() { return this._modes.mode2Up.leafEdgeR; },\n set(newVal) { this._modes.mode2Up.leafEdgeR = newVal; }\n});\n\n/**\n * BookReader.util are static library functions\n * At top of file so they can be used below\n */\nBookReader.util = utils;\n\n/**\n * Helper to merge in params in to a params object.\n * It normalizes \"page\" into the \"index\" field to disambiguate and prevent concflicts\n * @private\n */\nBookReader.prototype.extendParams = function(params, newParams) {\n var modifiedNewParams = $.extend({}, newParams);\n if ('undefined' != typeof(modifiedNewParams.page)) {\n var pageIndex = this._models.book.parsePageString(modifiedNewParams.page);\n if (!isNaN(pageIndex))\n modifiedNewParams.index = pageIndex;\n delete modifiedNewParams.page;\n }\n $.extend(params, modifiedNewParams);\n}\n\n/**\n * Parses params from from various initialization contexts (url, cookie, options)\n * @private\n * @return {object} the parsed params\n */\nBookReader.prototype.initParams = function() {\n var params = {};\n // Flag initializing for updateFromParams()\n params.init = true;\n\n // Flag if page given in defaults or URL (not cookie)\n // Used for overriding goToFirstResult in plugin.search.js\n // Note: extendParams() converts params.page to index and gets rid of page\n // so check and set before extendParams()\n params.pageFound = false;\n\n // True if changing the URL\n params.fragmentChange = false;\n\n // This is ordered from lowest to highest priority\n\n // If we have a title leaf, use that as the default instead of index 0,\n // but only use as default if book has a few pages\n if ('undefined' != typeof(this.titleLeaf) && this._models.book.getNumLeafs() > 2) {\n params.index = this._models.book.leafNumToIndex(this.titleLeaf);\n } else {\n params.index = 0;\n }\n\n // this.defaults is a string passed in the url format. eg \"page/1/mode/1up\"\n if (this.defaults) {\n const defaultParams = this.paramsFromFragment(this.defaults);\n if ('undefined' != typeof(defaultParams.page)) {\n params.pageFound = true;\n }\n this.extendParams(params, defaultParams);\n }\n\n // Check for Resume plugin\n if (this.options.enablePageResume) {\n // Check cookies\n const val = this.getResumeValue();\n if (val !== null) {\n // If page index different from default\n if (params.index !== val) {\n // Show in URL\n params.fragmentChange = true;\n }\n params.index = val;\n }\n }\n\n // Check for URL plugin\n if (this.options.enableUrlPlugin) {\n // Params explicitly set in URL take precedence over all other methods\n const urlParams = this.paramsFromFragment(this.urlReadFragment());\n // If there were any parameters\n if (Object.keys(urlParams).length) {\n if ('undefined' != typeof(urlParams.page)) {\n params.pageFound = true;\n }\n this.extendParams(params, urlParams);\n // Show in URL\n params.fragmentChange = true;\n }\n }\n\n // Check for Search plugin\n if (this.options.enableSearch) {\n // Go to first result only if no default or URL page\n this.goToFirstResult = !params.pageFound\n\n // If initialSearchTerm not set\n if (!this.options.initialSearchTerm) {\n // Look for any term in URL\n if (params.search) {\n // Old style: /search/[term]\n this.options.initialSearchTerm = params.search;\n } else {\n // If we have a query string: q=[term]\n const searchParams = new URLSearchParams(this.readQueryString());\n const searchTerm = searchParams.get('q')\n if (searchTerm) {\n this.options.initialSearchTerm = utils.decodeURIComponentPlus(searchTerm);\n }\n }\n }\n }\n\n // Set for init process, return to false at end of init()\n this.suppressFragmentChange = !params.fragmentChange;\n\n return params;\n}\n\n/**\n * Allow mocking of window.location.search\n */\nBookReader.prototype.getLocationSearch = function () {\n return window.location.search;\n}\n\n/**\n * Allow mocking of window.location.hash\n */\nBookReader.prototype.getLocationHash = function () {\n return window.location.hash;\n}\n\n/**\n * Return URL or fragment querystring\n */\nBookReader.prototype.readQueryString = function() {\n const queryString = this.getLocationSearch();\n if (queryString) {\n return queryString;\n }\n const hash = this.getLocationHash();\n const found = hash.search(/\\?\\w+=/);\n return found > -1 ? hash.slice(found) : '';\n}\n\n/**\n * Determines the initial mode for starting if a mode is not already\n * present in the params argument\n * @param {object} params\n * @return {number} the mode\n */\nBookReader.prototype.getInitialMode = function(params) {\n // Use params or browser width to set view mode\n var windowWidth = $(window).width();\n var nextMode;\n if ('undefined' != typeof(params.mode)) {\n nextMode = params.mode;\n } else if (this.ui == 'full'\n && this.enableMobileNav\n && this.isFullscreenActive\n && windowWidth <= this.onePageMinBreakpoint\n ) {\n // In full mode, we set the default based on width\n nextMode = this.constMode1up;\n } else {\n nextMode = this.constMode2up;\n }\n\n if (!this.canSwitchToMode(nextMode)) {\n nextMode = this.constMode1up;\n }\n return nextMode;\n};\n\n/**\n * This is called by the client to initialize BookReader.\n * It renders onto the DOM. It should only be called once.\n */\nBookReader.prototype.init = function() {\n this.init.initComplete = false;\n this.pageScale = this.reduce; // preserve current reduce\n\n var params = this.initParams();\n\n this.firstIndex = params.index ? params.index : 0;\n\n // Setup Navbars and other UI\n this.isTouchDevice = !!('ontouchstart' in window) || !!('msmaxtouchpoints' in window.navigator);\n\n this.refs.$br = $(this.el)\n .empty()\n .removeClass()\n .addClass(\"ui-\" + this.ui)\n .addClass(\"br-ui-\" + this.ui)\n .addClass('BookReader');\n\n // Add a class if this is a touch enabled device\n if (this.isTouchDevice) {\n this.refs.$br.addClass(\"touch\");\n } else {\n this.refs.$br.addClass(\"no-touch\");\n }\n\n this.refs.$brContainer = $(\"
    \");\n this.refs.$br.append(this.refs.$brContainer);\n\n // Explicitly ensure params.mode exists for updateFromParams() below\n params.mode = this.getInitialMode(params);\n\n // Explicitly ensure this.mode exists for initNavbar() below\n this.mode = params.mode;\n\n if (this.ui == \"embed\" && this.options.showNavbar) {\n this.initEmbedNavbar();\n } else {\n if (this.options.showToolbar) {\n this.initToolbar(this.mode, this.ui); // Build inside of toolbar div\n }\n if (this.options.showNavbar) {\n this.initNavbar();\n }\n }\n\n this.resizeBRcontainer();\n this.updateFromParams(params);\n this.initUIStrings();\n\n // Bind to events\n\n this.bindNavigationHandlers();\n this.setupKeyListeners();\n\n this.lastScroll = (new Date().getTime());\n this.refs.$brContainer.bind('scroll', this, function(e) {\n // Note, this scroll event fires for both user, and js generated calls\n // It is functioning in some cases as the primary triggerer for rendering\n e.data.lastScroll = (new Date().getTime());\n if (e.data.constMode2up != e.data.mode) {\n e.data.drawLeafsThrottled();\n }\n });\n\n $(window).bind('resize', this, function(e) {\n e.data.resize();\n });\n $(window).on(\"orientationchange\", this, function(e) {\n e.data.resize();\n }.bind(this));\n\n if (this.protected) {\n this.$('.BRicon.share').hide();\n }\n\n this.trigger(BookReader.eventNames.PostInit);\n\n // If not searching, set to allow on-going fragment changes\n if (!this.options.initialSearchTerm) {\n this.suppressFragmentChange = false;\n }\n\n this.init.initComplete = true;\n\n // Must be called after this.init.initComplete set to true to allow\n // BookReader.prototype.resize to run.\n if (this.options.startFullscreen) {\n this.toggleFullscreen();\n }\n}\n\n/**\n * @param {EVENTS} name\n * @param {array | object} [props]\n */\nBookReader.prototype.trigger = function(name, props = this) {\n const eventName = 'BookReader:' + name;\n $(document).trigger(eventName, props);\n\n utils.polyfillCustomEvent(window);\n window.dispatchEvent(new CustomEvent(eventName, {\n bubbles: true,\n composed: true,\n detail: { props },\n }));\n};\n\nBookReader.prototype.bind = function(name, callback) {\n $(document).bind('BookReader:' + name, callback);\n};\n\nBookReader.prototype.unbind = function(name, callback) {\n $(document).unbind('BookReader:' + name, callback);\n};\n\n/**\n * Resizes based on the container width and height\n */\nBookReader.prototype.resize = function() {\n if (!this.init.initComplete) return;\n\n this.resizeBRcontainer();\n\n if (this.constMode1up == this.mode) {\n if (this.onePage.autofit != 'none') {\n this.resizePageView1up();\n this.centerPageView();\n if (this.enableSearch) this.updateSearchHilites(); //deletes hilights but does not call remove()\n } else {\n this.centerPageView();\n this.displayedIndices = [];\n if (this.enableSearch) this.updateSearchHilites(); //deletes hilights but does not call remove()\n this.drawLeafsThrottled();\n }\n } else if (this.constModeThumb == this.mode) {\n this.prepareThumbnailView();\n } else {\n // We only need to prepare again in autofit (size of spread changes)\n if (this.twoPage.autofit) {\n this.prepareTwoPageView();\n } else {\n // Re-center if the scrollbars have disappeared\n var center = this.twoPageGetViewCenter();\n var doRecenter = false;\n if (this.twoPage.totalWidth < this.refs.$brContainer.prop('clientWidth')) {\n center.percentageX = 0.5;\n doRecenter = true;\n }\n if (this.twoPage.totalHeight < this.refs.$brContainer.prop('clientHeight')) {\n center.percentageY = 0.5;\n doRecenter = true;\n }\n if (doRecenter) {\n this.twoPageCenterView(center.percentageX, center.percentageY);\n }\n }\n }\n this.trigger(BookReader.eventNames.resize);\n};\n\n/**\n * Binds keyboard event listeners\n */\nBookReader.prototype.setupKeyListeners = function() {\n var self = this;\n\n var KEY_PGUP = 33;\n var KEY_PGDOWN = 34;\n var KEY_END = 35;\n var KEY_HOME = 36;\n\n var KEY_LEFT = 37;\n var KEY_UP = 38;\n var KEY_RIGHT = 39;\n var KEY_DOWN = 40;\n // The minus(-) and equal(=) keys have different mapings for different browsers\n var KEY_MINUS = 189; // Chrome\n var KEY_MINUS_F = 173; // Firefox\n var KEY_NUMPAD_SUBTRACT = 109;\n var KEY_EQUAL = 187; // Chrome\n var KEY_EQUAL_F = 61; // Firefox\n var KEY_NUMPAD_ADD = 107;\n\n // We use document here instead of window to avoid a bug in jQuery on IE7\n $(document).keydown(function(e) {\n\n // Keyboard navigation\n if (!self.keyboardNavigationIsDisabled(e)) {\n switch (e.keyCode) {\n case KEY_PGUP:\n case KEY_UP:\n // In 1up mode page scrolling is handled by browser\n if (self.constMode2up == self.mode) {\n e.preventDefault();\n self.prev();\n }\n break;\n case KEY_DOWN:\n case KEY_PGDOWN:\n if (self.constMode2up == self.mode) {\n e.preventDefault();\n self.next();\n }\n break;\n case KEY_END:\n e.preventDefault();\n self.last();\n break;\n case KEY_HOME:\n e.preventDefault();\n self.first();\n break;\n case KEY_LEFT:\n if (self.constModeThumb != self.mode) {\n e.preventDefault();\n self.left();\n }\n break;\n case KEY_RIGHT:\n if (self.constModeThumb != self.mode) {\n e.preventDefault();\n self.right();\n }\n break;\n case KEY_MINUS:\n case KEY_MINUS_F:\n case KEY_NUMPAD_SUBTRACT:\n e.preventDefault();\n self.zoom(-1);\n break;\n case KEY_EQUAL:\n case KEY_EQUAL_F:\n case KEY_NUMPAD_ADD:\n e.preventDefault();\n self.zoom(+1);\n break;\n }\n }\n });\n};\n\nBookReader.prototype.drawLeafs = function() {\n if (this.constMode1up == this.mode) {\n this.drawLeafsOnePage();\n } else if (this.constModeThumb == this.mode) {\n this.drawLeafsThumbnail();\n } else {\n this.drawLeafsTwoPage();\n }\n};\n\n/**\n * @protected\n */\nBookReader.prototype._createPageContainer = function(index, styles) {\n const { pageSide } = this._models.book.getPage(index);\n const css = Object.assign({ position: 'absolute' }, styles);\n const modeClasses = {\n [this.constMode1up]: '1up',\n [this.constMode2up]: '2up',\n [this.constModeThumb]: 'thumb',\n };\n const container = $('
    ', {\n 'class': `BRpagecontainer BRmode${modeClasses[this.mode]} pagediv${index}`,\n css,\n }).attr('data-side', pageSide).append($('
    ', { 'class': 'BRscreen' }));\n container.toggleClass('protected', this.protected);\n\n return container;\n};\n\nBookReader.prototype.bindGestures = function(jElement) {\n // TODO support gesture change is only iOS. Support android.\n // HACK(2017-01-20) - Momentum scrolling is causing the scroll position\n // to jump after zooming in on mobile device. I am able to reproduce\n // when you move the book with one finger and then add another\n // finger to pinch. Gestures are aware of scroll state.\n\n var self = this;\n var numTouches = 1;\n\n jElement.unbind('touchmove').bind('touchmove', function(e) {\n if (e.originalEvent.cancelable) numTouches = e.originalEvent.touches.length;\n e.stopPropagation();\n });\n\n jElement.unbind('gesturechange').bind('gesturechange', function(e) {\n e.preventDefault();\n // These are two very important fixes to adjust for the scroll position\n // issues described below\n if (!(numTouches !== 2 || (new Date().getTime()) - self.lastScroll < 500)) {\n if (e.originalEvent.scale > 1.5) {\n self.zoom(1);\n } else if (e.originalEvent.scale < 0.6) {\n self.zoom(-1);\n }\n }\n });\n};\n\n/**\n * @param {object} [options]\n */\nBookReader.prototype.drawLeafsOnePage = function() {\n const { book } = this._models;\n const containerHeight = this.refs.$brContainer.height();\n const containerWidth = this.refs.$brPageViewEl.width();\n const scrollTop = this.refs.$brContainer.prop('scrollTop');\n const scrollBottom = scrollTop + containerHeight;\n\n const indicesToDisplay = [];\n let leafTop = 0;\n let leafBottom = 0;\n\n for (const page of book.pagesIterator({ combineConsecutiveUnviewables: true })) {\n const height = Math.floor(page.height / this.reduce);\n leafBottom += height;\n const topInView = (leafTop >= scrollTop) && (leafTop <= scrollBottom);\n const bottomInView = (leafBottom >= scrollTop) && (leafBottom <= scrollBottom);\n const middleInView = (leafTop <= scrollTop) && (leafBottom >= scrollBottom);\n if (topInView || bottomInView || middleInView) {\n indicesToDisplay.push(page.index);\n }\n leafTop += height + 10;\n leafBottom += 10;\n }\n\n // Based of the pages displayed in the view we set the current index\n // $$$ we should consider the page in the center of the view to be the current one\n let firstIndexToDraw = indicesToDisplay[0];\n this.updateFirstIndex(firstIndexToDraw);\n\n // if zoomed out, also draw prev/next pages\n if (this.reduce > 1) {\n const prev = book.getPage(firstIndexToDraw).findPrev({ combineConsecutiveUnviewables: true });\n if (prev) indicesToDisplay.unshift(firstIndexToDraw = prev.index);\n\n const lastIndexToDraw = indicesToDisplay[indicesToDisplay.length - 1];\n const next = book.getPage(lastIndexToDraw).findNext({ combineConsecutiveUnviewables: true });\n if (next) indicesToDisplay.push(next.index);\n }\n\n const BRpageViewEl = this.refs.$brPageViewEl.get(0);\n leafTop = 0;\n\n for (const page of book.pagesIterator({ end: firstIndexToDraw, combineConsecutiveUnviewables: true })) {\n leafTop += Math.floor(page.height / this.reduce) + 10;\n }\n\n for (const index of indicesToDisplay) {\n const page = book.getPage(index);\n const height = Math.floor(page.height / this.reduce);\n\n if (utils.notInArray(index, this.displayedIndices)) {\n const width = Math.floor(page.width / this.reduce);\n const leftMargin = Math.floor((containerWidth - width) / 2);\n\n const pageContainer = this._createPageContainer(index, {\n width:`${width}px`,\n height: `${height}px`,\n top: `${leafTop}px`,\n left: `${leftMargin}px`,\n });\n\n const img = $('', {\n src: this._getPageURI(index, this.reduce, 0),\n srcset: this._getPageURISrcset(index, this.reduce, 0)\n });\n pageContainer.append(img);\n\n BRpageViewEl.appendChild(pageContainer[0]);\n }\n\n leafTop += height + 10;\n }\n\n for (const index of this.displayedIndices) {\n if (utils.notInArray(index, indicesToDisplay)) {\n this.$(`.pagediv${index}`).remove();\n }\n }\n\n this.displayedIndices = indicesToDisplay.slice();\n if (this.enableSearch) this.updateSearchHilites();\n\n this.updateToolbarZoom(this.reduce);\n\n // Update the slider\n this.updateNavIndexThrottled();\n};\n\n/**\n * Draws the thumbnail view\n * @param {number} optional If seekIndex is defined, the view will be drawn\n * with that page visible (without any animated scrolling).\n */\nBookReader.prototype.drawLeafsThumbnail = function(seekIndex) {\n const { floor } = Math;\n const { book } = this._models;\n const viewWidth = this.refs.$brContainer.prop('scrollWidth') - 20; // width minus buffer\n\n let leafHeight;\n let rightPos = 0;\n let bottomPos = 0;\n let maxRight = 0;\n let currentRow = 0;\n let leafIndex = 0;\n const leafMap = [];\n\n // Will be set to top of requested seek index, if set\n let seekTop;\n\n // Calculate the position of every thumbnail. $$$ cache instead of calculating on every draw\n for (const page of book.pagesIterator({ combineConsecutiveUnviewables: true })) {\n const leafWidth = this.thumbWidth;\n if (rightPos + (leafWidth + this.thumbPadding) > viewWidth) {\n currentRow++;\n rightPos = 0;\n leafIndex = 0;\n }\n\n // Init current row in leafMap\n if (!leafMap[currentRow]) { leafMap[currentRow] = {}; }\n if (!leafMap[currentRow].leafs) {\n leafMap[currentRow].leafs = [];\n leafMap[currentRow].height = 0;\n leafMap[currentRow].top = 0;\n }\n leafMap[currentRow].leafs[leafIndex] = {\n num: page.index,\n left: rightPos,\n };\n\n leafHeight = floor((page.height * this.thumbWidth) / page.width);\n if (leafHeight > leafMap[currentRow].height) {\n leafMap[currentRow].height = leafHeight;\n }\n if (leafIndex === 0) { bottomPos += this.thumbPadding + leafMap[currentRow].height; }\n rightPos += leafWidth + this.thumbPadding;\n if (rightPos > maxRight) { maxRight = rightPos; }\n leafIndex++;\n\n if (page.index == seekIndex) {\n seekTop = bottomPos - this.thumbPadding - leafMap[currentRow].height;\n }\n }\n\n // reset the bottom position based on thumbnails\n this.refs.$brPageViewEl.height(bottomPos);\n\n const pageViewBuffer = floor((this.refs.$brContainer.prop('scrollWidth') - maxRight) / 2) - 14;\n\n // If seekTop is defined, seeking was requested and target found\n if (typeof(seekTop) != 'undefined') {\n this.refs.$brContainer.scrollTop(seekTop);\n }\n\n const scrollTop = this.refs.$brContainer.prop('scrollTop');\n const scrollBottom = scrollTop + this.refs.$brContainer.height();\n\n let leafTop = 0;\n let leafBottom = 0;\n const rowsToDisplay = [];\n\n // Visible leafs with least/greatest index\n let leastVisible = book.getNumLeafs() - 1;\n let mostVisible = 0;\n\n // Determine the thumbnails in view\n for (let i = 0; i < leafMap.length; i++) {\n if (!leafMap[i]) { continue; }\n leafBottom += this.thumbPadding + leafMap[i].height;\n const topInView = (leafTop >= scrollTop) && (leafTop <= scrollBottom);\n const bottomInView = (leafBottom >= scrollTop) && (leafBottom <= scrollBottom);\n const middleInView = (leafTop <= scrollTop) && (leafBottom >= scrollBottom);\n if (topInView || bottomInView || middleInView) {\n rowsToDisplay.push(i);\n if (leafMap[i].leafs[0].num < leastVisible) {\n leastVisible = leafMap[i].leafs[0].num;\n }\n if (leafMap[i].leafs[leafMap[i].leafs.length - 1].num > mostVisible) {\n mostVisible = leafMap[i].leafs[leafMap[i].leafs.length - 1].num;\n }\n }\n if (leafTop > leafMap[i].top) { leafMap[i].top = leafTop; }\n leafTop = leafBottom;\n }\n\n // create a buffer of preloaded rows before and after the visible rows\n const firstRow = rowsToDisplay[0];\n const lastRow = rowsToDisplay[rowsToDisplay.length - 1];\n for (let i = 1; i < this.thumbRowBuffer + 1; i++) {\n if (lastRow + i < leafMap.length) { rowsToDisplay.push(lastRow + i); }\n }\n for (let i = 1; i < this.thumbRowBuffer + 1; i++) {\n if (firstRow - i >= 0) { rowsToDisplay.push(firstRow - i); }\n }\n\n // Create the thumbnail divs and images (lazy loaded)\n for (const row of rowsToDisplay) {\n if (utils.notInArray(row, this.displayedRows)) {\n if (!leafMap[row]) { continue; }\n for (const { num: leaf, left: leafLeft } of leafMap[row].leafs) {\n const leafWidth = this.thumbWidth;\n const leafHeight = floor((book.getPageHeight(leaf) * this.thumbWidth) / book.getPageWidth(leaf));\n const leafTop = leafMap[row].top;\n let left = leafLeft + pageViewBuffer;\n if ('rl' == this.pageProgression) {\n left = viewWidth - leafWidth - left;\n }\n\n left += this.thumbPadding;\n const pageContainer = this._createPageContainer(leaf, {\n width: `${leafWidth}px`,\n height: `${leafHeight}px`,\n top: `${leafTop}px`,\n left: `${left}px`,\n });\n\n pageContainer.data('leaf', leaf).on('mouseup', event => {\n // We want to suppress the fragmentChange triggers in `updateFirstIndex` and `switchMode`\n // because otherwise it repeatedly triggers listeners and we get in an infinite loop.\n // We manually trigger the `fragmentChange` once at the end.\n this.updateFirstIndex(leaf, { suppressFragmentChange: true });\n if (this.prevReadMode === this.constMode1up || this.prevReadMode === this.constMode2up) {\n this.switchMode(this.prevReadMode, { suppressFragmentChange: true });\n } else {\n this.switchMode(this.constMode1up, { suppressFragmentChange: true });\n }\n this.trigger(BookReader.eventNames.fragmentChange);\n event.stopPropagation();\n });\n\n this.refs.$brPageViewEl.append(pageContainer);\n\n const img = document.createElement(\"img\");\n const thumbReduce = floor(book.getPageWidth(leaf) / this.thumbWidth);\n\n $(img).attr('src', `${this.imagesBaseURL}transparent.png`)\n .css({ width: `${leafWidth}px`, height: `${leafHeight}px` })\n .addClass('BRlazyload')\n // Store the URL of the image that will replace this one\n .data('srcURL', this._getPageURI(leaf, thumbReduce));\n pageContainer.append(img);\n }\n }\n }\n\n // Remove thumbnails that are not to be displayed\n for (const row of this.displayedRows) {\n if (utils.notInArray(row, rowsToDisplay)) {\n for (const { num: index } of leafMap[row].leafs) {\n this.$(`.pagediv${index}`).remove();\n }\n }\n }\n\n // Update which page is considered current to make sure a visible page is the current one\n const currentIndex = this.currentIndex();\n if (currentIndex < leastVisible) {\n this.updateFirstIndex(leastVisible);\n } else if (currentIndex > mostVisible) {\n this.updateFirstIndex(mostVisible);\n }\n\n this.displayedRows = rowsToDisplay.slice();\n\n // remove previous highlights\n this.$('.BRpagedivthumb_highlight').removeClass('BRpagedivthumb_highlight');\n\n // highlight current page\n this.$('.pagediv' + this.currentIndex()).addClass('BRpagedivthumb_highlight');\n\n this.lazyLoadThumbnails();\n\n this.updateToolbarZoom(this.reduce);\n};\n\nBookReader.prototype.lazyLoadThumbnails = function() {\n // We check the complete property since load may not be fired if loading from the cache\n this.$('.BRlazyloading').filter('[complete=true]').removeClass('BRlazyloading');\n\n var loading = this.$('.BRlazyloading').length;\n var toLoad = this.thumbMaxLoading - loading;\n\n var self = this;\n\n if (toLoad > 0) {\n // $$$ TODO load those near top (but not beyond) page view first\n this.refs.$brPageViewEl.find('img.BRlazyload').filter(':lt(' + toLoad + ')').each( function() {\n self.lazyLoadImage(this);\n });\n }\n};\n\nBookReader.prototype.lazyLoadImage = function (dummyImage) {\n var img = new Image();\n var self = this;\n\n $(img)\n .addClass('BRlazyloading')\n .one('load', function() {\n $(this).removeClass('BRlazyloading');\n\n // $$$ Calling lazyLoadThumbnails here was causing stack overflow on IE so\n // we call the function after a slight delay. Also the img.complete property\n // is not yet set in IE8 inside this onload handler\n setTimeout(function() { self.lazyLoadThumbnails(); }, 100);\n })\n .one('error', function() {\n // Remove class so we no longer count as loading\n $(this).removeClass('BRlazyloading');\n })\n\n //the width set with .attr is ignored by Internet Explorer, causing it to show the image at its original size\n //but with this one line of css, even IE shows the image at the proper size\n .css({\n 'width': $(dummyImage).width() + 'px',\n 'height': $(dummyImage).height() + 'px'\n })\n .attr({\n 'width': $(dummyImage).width(),\n 'height': $(dummyImage).height(),\n 'src': $(dummyImage).data('srcURL')\n });\n\n // replace with the new img\n $(dummyImage).before(img).remove();\n\n img = null; // tidy up closure\n};\n\n/**\n * A throttled version of drawLeafs\n */\nBookReader.prototype.drawLeafsThrottled = utils.throttle(\n BookReader.prototype.drawLeafs,\n 250 // 250 ms gives quick feedback, but doesn't eat cpu\n);\n\n/**\n * @param {number} direction Pass 1 to zoom in, anything else to zoom out\n */\nBookReader.prototype.zoom = function(direction) {\n switch (this.mode) {\n case this.constMode1up:\n if (direction == 1) {\n // XXX other cases\n this.zoom1up('in');\n } else {\n this.zoom1up('out');\n }\n break\n case this.constMode2up:\n if (direction == 1) {\n // XXX other cases\n this.zoom2up('in');\n } else {\n this.zoom2up('out');\n }\n break\n case this.constModeThumb:\n // XXX update zoomThumb for named directions\n this.zoomThumb(direction);\n break\n }\n\n this.textSelectionPlugin?.stopPageFlip(this.refs.$brContainer);\n return;\n};\n\nBookReader.prototype.zoom1up = function(direction) {\n if (this.constMode2up == this.mode) { //can only zoom in 1-page mode\n this.switchMode(this.constMode1up);\n return;\n }\n\n var reduceFactor = this.nextReduce(this.reduce, direction, this.onePage.reductionFactors);\n\n if (this.reduce == reduceFactor.reduce) {\n // Already at this level\n return;\n }\n\n this.reduce = reduceFactor.reduce; // $$$ incorporate into function\n this.onePage.autofit = reduceFactor.autofit;\n\n this.pageScale = this.reduce; // preserve current reduce\n\n this.resizePageView1up();\n this.updateToolbarZoom(this.reduce);\n\n // Recalculate search hilites\n if (this.enableSearch) {\n this.removeSearchHilites();\n this.updateSearchHilites();\n }\n};\n\n/**\n * Resizes the inner container to fit within the visible space to prevent\n * the top toolbar and bottom navbar from clipping the visible book\n *\n * @param { boolean } animate - optional\n * When used, BookReader will fill the main container with the book's content.\n * This is primarily for 1up view - a follow up animation to the nav animation\n * So resize isn't perceived sharp/jerky\n */\nBookReader.prototype.resizeBRcontainer = function(animate) {\n if (animate) {\n this.refs.$brContainer.animate({\n top: this.getToolBarHeight(),\n bottom: this.getFooterHeight()\n }, this.constResizeAnimationDuration, 'linear');\n } else {\n this.refs.$brContainer.css({\n top: this.getToolBarHeight(),\n bottom: this.getFooterHeight()\n });\n }\n}\n\n/**\n * Resize the current one page view\n * Note this calls drawLeafs\n */\nBookReader.prototype.resizePageView1up = function() {\n var viewWidth = this.refs.$brContainer.prop('clientWidth');\n var oldScrollTop = this.refs.$brContainer.prop('scrollTop');\n var oldPageViewHeight = this.refs.$brPageViewEl.height();\n var oldPageViewWidth = this.refs.$brPageViewEl.width();\n\n // May have come here after preparing the view, in which case the scrollTop and view height are not set\n\n var scrollRatio = 0;\n if (oldScrollTop > 0) {\n // We have scrolled - implies view has been set up\n var oldCenterY = this.centerY1up();\n var oldCenterX = this.centerX1up();\n scrollRatio = oldCenterY / oldPageViewHeight;\n } else {\n // Have not scrolled, e.g. because in new container\n\n // We set the scroll ratio so that the current index will still be considered the\n // current index in drawLeafsOnePage after we create the new view container\n\n // Make sure this will count as current page after resize\n var fudgeFactor = (this._models.book.getPageHeight(this.currentIndex()) / this.reduce) * 0.6;\n var oldLeafTop = this.onePageGetPageTop(this.currentIndex()) + fudgeFactor;\n var oldViewDimensions = this.onePageCalculateViewDimensions(this.reduce, this.padding);\n scrollRatio = oldLeafTop / oldViewDimensions.height;\n }\n\n // Recalculate 1up reduction factors\n this.onePageCalculateReductionFactors();\n // Update current reduce (if in autofit)\n if (this.onePage.autofit) {\n var reductionFactor = this.nextReduce(this.reduce, this.onePage.autofit, this.onePage.reductionFactors);\n this.reduce = reductionFactor.reduce;\n }\n\n var viewDimensions = this.onePageCalculateViewDimensions(this.reduce, this.padding);\n\n this.refs.$brPageViewEl.height(viewDimensions.height);\n this.refs.$brPageViewEl.width(viewDimensions.width);\n\n\n var newCenterY = scrollRatio * viewDimensions.height;\n var newTop = Math.max(0, Math.floor( newCenterY - this.refs.$brContainer.height() / 2 ));\n this.refs.$brContainer.prop('scrollTop', newTop);\n\n // We use clientWidth here to avoid miscalculating due to scroll bar\n var newCenterX = oldCenterX * (viewWidth / oldPageViewWidth);\n var newLeft = newCenterX - this.refs.$brContainer.prop('clientWidth') / 2;\n newLeft = Math.max(newLeft, 0);\n this.refs.$brContainer.prop('scrollLeft', newLeft);\n\n this.refs.$brPageViewEl.empty();\n this.displayedIndices = [];\n this.drawLeafs();\n\n if (this.enableSearch) {\n this.removeSearchHilites();\n this.updateSearchHilites();\n }\n};\n\n/**\n * Calculate the dimensions for a one page view with images at the given reduce and padding\n * @param {number} reduce\n * @param {number} padding\n */\nBookReader.prototype.onePageCalculateViewDimensions = function(reduce, padding) {\n const { floor } = Math;\n const { book } = this._models;\n let viewWidth = 0;\n let viewHeight = 0;\n for (const page of book.pagesIterator({ combineConsecutiveUnviewables: true })) {\n viewHeight += floor(page.height / reduce) + padding;\n const width = floor(page.width / reduce);\n if (width > viewWidth) viewWidth = width;\n }\n return { width: viewWidth, height: viewHeight };\n};\n\n/**\n * Returns the current offset of the viewport center in scaled document coordinates.\n * @return {number}\n */\nBookReader.prototype.centerX1up = function() {\n var centerX;\n if (this.refs.$brPageViewEl.width() < this.refs.$brContainer.prop('clientWidth')) { // fully shown\n centerX = this.refs.$brPageViewEl.width();\n } else {\n centerX = this.refs.$brContainer.prop('scrollLeft') + this.refs.$brContainer.prop('clientWidth') / 2;\n }\n centerX = Math.floor(centerX);\n return centerX;\n};\n\n/**\n * Returns the current offset of the viewport center in scaled document coordinates.\n * @return {number}\n */\nBookReader.prototype.centerY1up = function() {\n var centerY = this.refs.$brContainer.prop('scrollTop') + this.refs.$brContainer.height() / 2;\n return Math.floor(centerY);\n};\n\nBookReader.prototype.centerPageView = function() {\n var scrollWidth = this.refs.$brContainer.prop('scrollWidth');\n var clientWidth = this.refs.$brContainer.prop('clientWidth');\n if (scrollWidth > clientWidth) {\n this.refs.$brContainer.prop('scrollLeft', (scrollWidth - clientWidth) / 2);\n }\n};\n\nBookReader.prototype.zoomThumb = function(direction) {\n var oldColumns = this.thumbColumns;\n switch (direction) {\n case -1:\n this.thumbColumns += 1;\n break;\n case 1:\n this.thumbColumns -= 1;\n break;\n }\n\n // clamp\n if (this.thumbColumns < 2) {\n this.thumbColumns = 2;\n } else if (this.thumbColumns > 8) {\n this.thumbColumns = 8;\n }\n\n if (this.thumbColumns != oldColumns) {\n this.prepareThumbnailView();\n }\n};\n\n/**\n * Returns the width per thumbnail to display the requested number of columns\n * Note: #BRpageview must already exist since its width is used to calculate the\n * thumbnail width\n * @param {number}\n * @param {number}\n */\nBookReader.prototype.getThumbnailWidth = function(thumbnailColumns) {\n var padding = (thumbnailColumns + 1) * this.thumbPadding;\n var width = (this.refs.$brPageViewEl.width() - padding) / (thumbnailColumns + 0.5); // extra 0.5 is for some space at sides\n return parseInt(width);\n};\n\n/**\n * Quantizes the given reduction factor to closest power of two from set from 12.5% to 200%\n * @param {number}\n * @param {array}\n * @return {number}\n */\nBookReader.prototype.quantizeReduce = function(reduce, reductionFactors) {\n var quantized = reductionFactors[0].reduce;\n var distance = Math.abs(reduce - quantized);\n var newDistance;\n\n for (var i = 1; i < reductionFactors.length; i++) {\n newDistance = Math.abs(reduce - reductionFactors[i].reduce);\n if (newDistance < distance) {\n distance = newDistance;\n quantized = reductionFactors[i].reduce;\n }\n }\n return quantized;\n};\n\n/**\n * @param {number} currentReduce\n * @param {'in' | 'out' | 'auto' | 'height' | 'width'} direction\n * @param {array} reductionFactors should be array of sorted reduction factors\n * e.g. [ {reduce: 0.25, autofit: null}, {reduce: 0.3, autofit: 'width'}, {reduce: 1, autofit: null} ]\n */\nBookReader.prototype.nextReduce = function(currentReduce, direction, reductionFactors) {\n // XXX add 'closest', to replace quantize function\n var i;\n var newReduceIndex;\n\n if (direction === 'in') {\n newReduceIndex = 0;\n for (i = 1; i < reductionFactors.length; i++) {\n if (reductionFactors[i].reduce < currentReduce) {\n newReduceIndex = i;\n }\n }\n return reductionFactors[newReduceIndex];\n } else if (direction === 'out') { // zoom out\n var lastIndex = reductionFactors.length - 1;\n newReduceIndex = lastIndex;\n\n for (i = lastIndex; i >= 0; i--) {\n if (reductionFactors[i].reduce > currentReduce) {\n newReduceIndex = i;\n }\n }\n return reductionFactors[newReduceIndex];\n } else if (direction === 'auto') {\n // Auto mode chooses the least reduction\n var choice = null;\n for (i = 0; i < reductionFactors.length; i++) {\n if (reductionFactors[i].autofit === 'height' || reductionFactors[i].autofit === 'width') {\n if (choice === null || choice.reduce < reductionFactors[i].reduce) {\n choice = reductionFactors[i];\n }\n }\n }\n if (choice) {\n return choice;\n }\n } else if (direction === 'height' || direction === 'width') {\n // Asked for specific autofit mode\n for (i = 0; i < reductionFactors.length; i++) {\n if (reductionFactors[i].autofit === direction) {\n return reductionFactors[i];\n }\n }\n }\n\n alert('Could not find reduction factor for direction ' + direction);\n return reductionFactors[0];\n\n};\n\nBookReader.prototype._reduceSort = function(a, b) {\n return a.reduce - b.reduce;\n};\n\n/**\n * Attempts to jump to page\n * @param {string}\n * @return {boolean} Returns true if page could be found, false otherwise.\n */\nBookReader.prototype.jumpToPage = function(pageNum) {\n var pageIndex = this._models.book.parsePageString(pageNum);\n\n if ('undefined' != typeof(pageIndex)) {\n this.jumpToIndex(pageIndex);\n return true;\n }\n\n // Page not found\n return false;\n};\n\n/**\n * Check whether the specified index is currently displayed\n * @param {PageIndex} index\n */\nBookReader.prototype._isIndexDisplayed = function(index) {\n // One up \"caches\" pages +- current, so exclude those in the test.\n return this.constMode1up == this.mode ? this.displayedIndices.slice(1, -1).includes(index) :\n this.displayedIndices ? this.displayedIndices.includes(index) :\n this.currentIndex() == index;\n}\n\n/**\n * Changes the current page\n * @param {PageIndex} index\n * @param {number} [pageX]\n * @param {number} [pageY]\n * @param {boolean} [noAnimate]\n */\nBookReader.prototype.jumpToIndex = function(index, pageX, pageY, noAnimate) {\n const prevCurrentIndex = this.currentIndex();\n\n // Don't jump into specific unviewable page\n const page = this._models.book.getPage(index);\n if (!page.isViewable && page.unviewablesStart != page.index) {\n // If already in unviewable range, jump to end of that range\n const alreadyInPreview = this._isIndexDisplayed(page.unviewablesStart);\n const newIndex = alreadyInPreview ? page.findNext({ combineConsecutiveUnviewables: true }).index : page.unviewablesStart;\n return this.jumpToIndex(newIndex, pageX, pageY, noAnimate);\n }\n\n this.trigger(BookReader.eventNames.stop);\n\n if (this.constMode2up == this.mode) {\n // By checking against min/max we do nothing if requested index\n // is current\n if (index < Math.min(this.twoPage.currentIndexL, this.twoPage.currentIndexR)) {\n this.flipBackToIndex(index);\n } else if (index > Math.max(this.twoPage.currentIndexL, this.twoPage.currentIndexR)) {\n this.flipFwdToIndex(index);\n }\n } else if (this.constModeThumb == this.mode) {\n const { floor } = Math;\n const { book } = this._models;\n const viewWidth = this.refs.$brContainer.prop('scrollWidth') - 20; // width minus buffer\n const leafWidth = this.thumbWidth;\n let leafTop = 0;\n let rightPos = 0;\n let bottomPos = 0;\n let rowHeight = 0;\n let leafIndex = 0;\n\n for (let i = 0; i <= index; i++) {\n if (rightPos + (leafWidth + this.thumbPadding) > viewWidth) {\n rightPos = 0;\n rowHeight = 0;\n leafIndex = 0;\n }\n\n const leafHeight = floor((book.getPageHeight(leafIndex) * this.thumbWidth) / book.getPageWidth(leafIndex), 10);\n if (leafHeight > rowHeight) { rowHeight = leafHeight; }\n if (leafIndex == 0) {\n leafTop = bottomPos;\n bottomPos += this.thumbPadding + rowHeight;\n }\n rightPos += leafWidth + this.thumbPadding;\n leafIndex++;\n }\n this.updateFirstIndex(index);\n if (this.refs.$brContainer.prop('scrollTop') == leafTop) {\n this.drawLeafs();\n } else {\n this.animating = true;\n this.refs.$brContainer.stop(true)\n .animate({ scrollTop: leafTop }, 'fast', () => { this.animating = false });\n }\n } else { // 1up\n const { abs, floor } = Math;\n let offset = 0;\n let leafTop = this.onePageGetPageTop(index);\n let leafLeft = 0;\n\n if (pageY) {\n const clientHeight = this.refs.$brContainer.prop('clientHeight');\n offset = floor(pageY / this.reduce) - floor(clientHeight / 2);\n leafTop += offset;\n } else {\n // Show page just a little below the top\n leafTop -= this.padding / 2;\n }\n\n if (pageX) {\n const clientWidth = this.refs.$brContainer.prop('clientWidth');\n offset = floor(pageX / this.reduce) - floor(clientWidth / 2);\n leafLeft += offset;\n } else {\n // Preserve left position\n leafLeft = this.refs.$brContainer.scrollLeft();\n }\n\n // Only animate for small distances\n if (!noAnimate && abs(prevCurrentIndex - index) <= 4) {\n this.animating = true;\n this.refs.$brContainer.stop(true).animate({\n scrollTop: leafTop,\n scrollLeft: leafLeft,\n }, 'fast', () => { this.animating = false });\n } else {\n this.refs.$brContainer.stop(true).prop('scrollTop', leafTop);\n }\n }\n};\n\n/**\n * Return mode or 1up if initial thumb\n * @param {number}\n * @see BookReader.prototype.drawLeafsThumbnail\n */\nBookReader.prototype.getPrevReadMode = function(mode) {\n if (mode === BookReader.constMode1up || mode === BookReader.constMode2up) {\n return mode;\n } else if (this.prevReadMode === null) {\n // Initial thumb, return 1up\n return BookReader.constMode1up;\n }\n}\n\n/**\n * Switches the mode (eg 1up 2up thumb)\n * @param {number}\n * @param {object} [options]\n * @param {boolean} [options.suppressFragmentChange = false]\n */\nBookReader.prototype.switchMode = function(\n mode,\n { suppressFragmentChange = false } = {}\n) {\n // Skip checks before init() complete\n if (this.init.initComplete) {\n if (mode === this.mode) {\n return;\n }\n if (!this.canSwitchToMode(mode)) {\n return;\n }\n }\n\n this.trigger(BookReader.eventNames.stop);\n if (this.enableSearch) this.removeSearchHilites();\n\n this.prevReadMode = this.getPrevReadMode(this.mode);\n\n this.mode = mode;\n\n // reinstate scale if moving from thumbnail view\n if (this.pageScale !== this.reduce) {\n this.reduce = this.pageScale;\n }\n\n // $$$ TODO preserve center of view when switching between mode\n // See https://bugs.edge.launchpad.net/gnubook/+bug/416682\n\n // XXX maybe better to preserve zoom in each mode\n if (this.constMode1up == mode) {\n this.onePageCalculateReductionFactors();\n this.reduce = this.quantizeReduce(this.reduce, this.onePage.reductionFactors);\n this.prepareOnePageView();\n } else if (this.constModeThumb == mode) {\n this.reduce = this.quantizeReduce(this.reduce, this.reductionFactors);\n this.prepareThumbnailView();\n } else {\n // $$$ why don't we save autofit?\n // this.twoPage.autofit = null; // Take zoom level from other mode\n this.twoPageCalculateReductionFactors();\n this.reduce = this.quantizeReduce(this.reduce, this.twoPage.reductionFactors);\n this.prepareTwoPageView();\n this.twoPageCenterView(0.5, 0.5); // $$$ TODO preserve center\n }\n\n if (!(this.suppressFragmentChange || suppressFragmentChange)) {\n this.trigger(BookReader.eventNames.fragmentChange);\n }\n var eventName = mode + 'PageViewSelected';\n this.trigger(BookReader.eventNames[eventName]);\n\n this.textSelectionPlugin?.stopPageFlip(this.refs.$brContainer);\n};\n\nBookReader.prototype.updateBrClasses = function() {\n var modeToClass = {};\n modeToClass[this.constMode1up] = 'BRmode1up';\n modeToClass[this.constMode2up] = 'BRmode2Up';\n modeToClass[this.constModeThumb] = 'BRmodeThumb';\n\n this.refs.$br\n .removeClass('BRmode1up BRmode2Up BRmodeThumb')\n .addClass(modeToClass[this.mode]);\n\n if (this.isFullscreen()) {\n this.refs.$br.addClass('fullscreenActive');\n $(document.body).addClass('BRfullscreenActive');\n } else {\n this.refs.$br.removeClass('fullscreenActive');\n $(document.body).removeClass('BRfullscreenActive');\n }\n};\n\nBookReader.prototype.isFullscreen = function() {\n return this.isFullscreenActive;\n};\n\n/**\n * Toggles fullscreen\n * @param { boolean } bindKeyboardControls\n */\nBookReader.prototype.toggleFullscreen = function(bindKeyboardControls = true) {\n if (this.isFullscreen()) {\n this.exitFullScreen();\n } else {\n this.enterFullscreen(bindKeyboardControls);\n }\n};\n\n/**\n * Enters fullscreen\n * including:\n * - animation\n * - binds keyboard controls\n * - fires custom event\n * @param { boolean } bindKeyboardControls\n */\nBookReader.prototype.enterFullscreen = function(bindKeyboardControls = true) {\n const currentIndex = this.currentIndex();\n this.refs.$brContainer.css('opacity', 0);\n\n if (bindKeyboardControls) {\n this._fullscreenCloseHandler = (e) => {\n if (e.keyCode === 27) this.toggleFullscreen();\n };\n $(document).keyup(this._fullscreenCloseHandler);\n }\n\n const windowWidth = $(window).width();\n if (windowWidth <= this.onePageMinBreakpoint) {\n this.switchMode(this.constMode1up);\n }\n\n this.isFullscreenActive = true;\n this.updateBrClasses();\n\n this.refs.$brContainer.animate({opacity: 1}, 'fast', 'linear',() => {\n this.resize();\n this.jumpToIndex(currentIndex);\n });\n\n this.textSelectionPlugin?.stopPageFlip(this.refs.$brContainer);\n this.trigger('fullscreenToggled');\n};\n\n/**\n * Exits fullscreen\n * - toggles fullscreen\n * - binds keyboard controls\n * - fires custom event\n * @param { boolean } bindKeyboardControls\n */\nBookReader.prototype.exitFullScreen = function() {\n this.refs.$brContainer.css('opacity', 0);\n\n $(document).unbind('keyup', this._fullscreenCloseHandler);\n\n var windowWidth = $(window).width();\n if (windowWidth <= this.onePageMinBreakpoint) {\n this.switchMode(this.constMode2up);\n }\n\n this.isFullscreenActive = false;\n this.updateBrClasses()\n\n this.resize();\n this.refs.$brContainer.animate({opacity: 1}, 400, 'linear');\n\n this.textSelectionPlugin?.stopPageFlip(this.refs.$brContainer);\n this.trigger('fullscreenToggled');\n};\n\n/**\n * This is called when we switch to one page view\n */\nBookReader.prototype.prepareOnePageView = function() {\n var startLeaf = this.currentIndex();\n\n this.refs.$brContainer.empty();\n this.refs.$brContainer.css({\n overflowY: 'scroll',\n overflowX: 'auto'\n });\n\n this.refs.$brPageViewEl = $(\"
    \");\n this.refs.$brContainer.append(this.refs.$brPageViewEl);\n\n // Attaches to first child - child must be present\n this.refs.$brContainer.dragscrollable();\n this.bindGestures(this.refs.$brContainer);\n\n // $$$ keep select enabled for now since disabling it breaks keyboard\n // nav in FF 3.6 (https://bugs.edge.launchpad.net/bookreader/+bug/544666)\n // utils.disableSelect(this.$('#BRpageview'));\n\n this.resizePageView1up();\n this.jumpToIndex(startLeaf);\n this.updateBrClasses();\n};\n\nBookReader.prototype.prepareThumbnailView = function() {\n this.refs.$brContainer.empty();\n this.refs.$brContainer.css({\n overflowY: 'scroll',\n overflowX: 'auto'\n });\n\n this.refs.$brPageViewEl = $(\"
    \");\n this.refs.$brContainer.append(this.refs.$brPageViewEl);\n this.refs.$brContainer.dragscrollable({preventDefault:true});\n\n this.bindGestures(this.refs.$brContainer);\n\n // $$$ keep select enabled for now since disabling it breaks keyboard\n // nav in FF 3.6 (https://bugs.edge.launchpad.net/bookreader/+bug/544666)\n // utils.disableSelect(this.$('#BRpageview'));\n\n this.thumbWidth = this.getThumbnailWidth(this.thumbColumns);\n this.reduce = this._models.book.getPageWidth(0) / this.thumbWidth;\n\n this.displayedRows = [];\n\n // Draw leafs with current index directly in view (no animating to the index)\n this.drawLeafsThumbnail( this.currentIndex() );\n this.updateBrClasses();\n};\n\nBookReader.prototype.onePageGetAutofitWidth = function() {\n var widthPadding = 20;\n return (this._models.book.getMedianPageSize().width + 0.0) / (this.refs.$brContainer.prop('clientWidth') - widthPadding * 2);\n};\n\nBookReader.prototype.onePageGetAutofitHeight = function() {\n var availableHeight = this.refs.$brContainer.innerHeight();\n return (this._models.book.getMedianPageSize().height + 0.0) / (availableHeight - this.padding * 2); // make sure a little of adjacent pages show\n};\n\n/**\n * Returns where the top of the page with given index should be in one page view\n * @param {PageIndex} index\n * @return {number}\n */\nBookReader.prototype.onePageGetPageTop = function(index) {\n const { floor } = Math;\n const { book } = this._models;\n let leafTop = 0;\n for (const page of book.pagesIterator({ end: index, combineConsecutiveUnviewables: true })) {\n leafTop += floor(page.height / this.reduce) + this.padding;\n }\n return leafTop;\n};\n\n/**\n * Update the reduction factors for 1up mode given the available width and height.\n * Recalculates the autofit reduction factors.\n */\nBookReader.prototype.onePageCalculateReductionFactors = function() {\n this.onePage.reductionFactors = this.reductionFactors.concat(\n [\n { reduce: this.onePageGetAutofitWidth(), autofit: 'width' },\n { reduce: this.onePageGetAutofitHeight(), autofit: 'height'}\n ]);\n this.onePage.reductionFactors.sort(this._reduceSort);\n};\n\n/**\n * Returns the currently active index\n * @return {number}\n * @throws\n */\nBookReader.prototype.currentIndex = function() {\n // $$$ we should be cleaner with our idea of which index is active in 1up/2up\n if (this.mode == this.constMode1up || this.mode == this.constModeThumb) {\n return this.firstIndex; // $$$ TODO page in center of view would be better\n } else if (this.mode == this.constMode2up) {\n // Only allow indices that are actually present in book\n return utils.clamp(this.firstIndex, 0, this._models.book.getNumLeafs() - 1);\n } else {\n throw 'currentIndex called for unimplemented mode ' + this.mode;\n }\n};\n\n/**\n * Setter for this.firstIndex\n * Also triggers an event and updates the navbar slider position\n * @param {number} index\n * @param {object} [options]\n * @param {boolean} [options.suppressFragmentChange = false]\n */\nBookReader.prototype.updateFirstIndex = function(\n index,\n { suppressFragmentChange = false } = {}\n) {\n // Called multiple times when defaults contains \"mode/1up\",\n // including after init(). Skip fragment change if no index change\n if (this.firstIndex === index) {\n suppressFragmentChange = true;\n }\n this.firstIndex = index;\n if (!(this.suppressFragmentChange || suppressFragmentChange)) {\n this.trigger(BookReader.eventNames.fragmentChange);\n }\n // If there's an initial search we stop suppressing global URL changes\n // when local suppression ends\n // This seems to correctly handle multiple calls during mode/1up\n if (this.options.initialSearchTerm && !suppressFragmentChange) {\n this.suppressFragmentChange = false;\n }\n this.trigger('pageChanged');\n this.updateNavIndexThrottled(index);\n};\n\n/**\n * Flip the right page over onto the left\n */\nBookReader.prototype.right = function() {\n if ('rl' != this.pageProgression) {\n this.next();\n } else {\n this.prev();\n }\n};\n\n/**\n * Flip to the rightmost page\n */\nBookReader.prototype.rightmost = function() {\n if ('rl' != this.pageProgression) {\n this.last();\n } else {\n this.first();\n }\n};\n\n/**\n * Flip the left page over onto the right\n */\nBookReader.prototype.left = function() {\n if ('rl' != this.pageProgression) {\n this.prev();\n } else {\n this.next();\n }\n};\n\n/**\n * Flip to the leftmost page\n */\nBookReader.prototype.leftmost = function() {\n if ('rl' != this.pageProgression) {\n this.first();\n } else {\n this.last();\n }\n};\n\nBookReader.prototype.next = function() {\n if (this.constMode2up == this.mode) {\n this.trigger(BookReader.eventNames.stop);\n this.flipFwdToIndex(null);\n } else {\n if (this.firstIndex < this.lastDisplayableIndex()) {\n this.jumpToIndex(this.firstIndex + 1);\n }\n }\n};\n\nBookReader.prototype.prev = function() {\n const isOnFrontPage = this.firstIndex < 1;\n if (isOnFrontPage) return;\n\n if (this.constMode2up == this.mode) {\n this.trigger(BookReader.eventNames.stop);\n this.flipBackToIndex(null);\n } else {\n if (this.firstIndex >= 1) {\n this.jumpToIndex(this.firstIndex - 1);\n }\n }\n};\n\nBookReader.prototype.first = function() {\n this.jumpToIndex(this.firstDisplayableIndex());\n};\n\nBookReader.prototype.last = function() {\n this.jumpToIndex(this.lastDisplayableIndex());\n};\n\n/**\n * Scrolls down one screen view\n */\nBookReader.prototype.scrollDown = function() {\n if ($.inArray(this.mode, [this.constMode1up, this.constModeThumb]) >= 0) {\n if ( this.mode == this.constMode1up && (this.reduce >= this.onePageGetAutofitHeight()) ) {\n // Whole pages are visible, scroll whole page only\n return this.next();\n }\n\n this.refs.$brContainer.stop(true).animate(\n { scrollTop: '+=' + this._scrollAmount() + 'px'},\n 400, 'easeInOutExpo'\n );\n return true;\n } else {\n return false;\n }\n};\n\n/**\n * Scrolls up one screen view\n */\nBookReader.prototype.scrollUp = function() {\n if ($.inArray(this.mode, [this.constMode1up, this.constModeThumb]) >= 0) {\n if ( this.mode == this.constMode1up && (this.reduce >= this.onePageGetAutofitHeight()) ) {\n // Whole pages are visible, scroll whole page only\n return this.prev();\n }\n\n this.refs.$brContainer.stop(true).animate(\n { scrollTop: '-=' + this._scrollAmount() + 'px'},\n 400, 'easeInOutExpo'\n );\n return true;\n } else {\n return false;\n }\n};\n\n/**\n * The amount to scroll vertically in integer pixels\n */\nBookReader.prototype._scrollAmount = function() {\n if (this.constMode1up == this.mode) {\n // Overlap by % of page size\n return parseInt(this.refs.$brContainer.prop('clientHeight') - this._models.book.getPageHeight(this.currentIndex()) / this.reduce * 0.03);\n }\n\n return parseInt(0.9 * this.refs.$brContainer.prop('clientHeight'));\n};\n\nBookReader.prototype.prefetchImg = function(index) {\n var pageURI = this._getPageURI(index);\n const pageURISrcset = this._getPageURISrcset(index);\n\n // Load image if not loaded or URI has changed (e.g. due to scaling)\n var loadImage = false;\n if (undefined == this.prefetchedImgs[index]) {\n loadImage = true;\n } else if (pageURI != this.prefetchedImgs[index].uri) {\n loadImage = true;\n }\n\n if (loadImage) {\n const pageContainer = this._createPageContainer(index);\n $('', {\n 'class': 'BRpageimage',\n src: pageURI,\n srcset: pageURISrcset\n }).appendTo(pageContainer);\n if (index < 0 || index > (this._models.book.getNumLeafs() - 1) ) {\n // Facing page at beginning or end, or beyond\n pageContainer.addClass('BRemptypage');\n }\n pageContainer[0].uri = pageURI; // browser may rewrite src so we stash raw URI here\n this.prefetchedImgs[index] = pageContainer[0];\n }\n};\n\nBookReader.prototype.pruneUnusedImgs = function() {\n for (var key in this.prefetchedImgs) {\n if ((key != this.twoPage.currentIndexL) && (key != this.twoPage.currentIndexR)) {\n $(this.prefetchedImgs[key]).remove();\n }\n if ((key < this.twoPage.currentIndexL - 4) || (key > this.twoPage.currentIndexR + 4)) {\n delete this.prefetchedImgs[key];\n }\n }\n};\n\n/************************/\n/** Mode2Up extensions **/\n/************************/\nBookReader.prototype.zoom2up = Mode2Up.prototype.zoom;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'zoom', 'zoom2up');\nBookReader.prototype.twoPageGetAutofitReduce = Mode2Up.prototype.getAutofitReduce;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'getAutofitReduce', 'twoPageGetAutofitReduce');\nBookReader.prototype.flipBackToIndex = Mode2Up.prototype.flipBackToIndex;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'flipBackToIndex', 'flipBackToIndex');\nBookReader.prototype.flipFwdToIndex = Mode2Up.prototype.flipFwdToIndex;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'flipFwdToIndex', 'flipFwdToIndex');\nBookReader.prototype.setHilightCss2UP = Mode2Up.prototype.setHilightCss;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'setHilightCss', 'setHilightCss2UP');\n/** @deprecated not used outside Mode2Up */\nBookReader.prototype.setClickHandler2UP = Mode2Up.prototype.setClickHandler;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'setClickHandler', 'setClickHandler2UP');\n/** @deprecated not used outside Mode2Up */\nBookReader.prototype.drawLeafsTwoPage = Mode2Up.prototype.drawLeafs;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'drawLeafs', 'drawLeafsTwoPage');\n/** @deprecated not used outside BookReader */\nBookReader.prototype.prepareTwoPageView = Mode2Up.prototype.prepareTwoPageView;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'prepareTwoPageView', 'prepareTwoPageView');\n/** @deprecated not used outside Mode2Up */\nBookReader.prototype.prepareTwoPagePopUp = Mode2Up.prototype.preparePopUp;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'preparePopUp', 'prepareTwoPagePopUp');\n/** @deprecated not used outside BookReader, Mode2Up */\nBookReader.prototype.calculateSpreadSize = Mode2Up.prototype.calculateSpreadSize;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'calculateSpreadSize', 'calculateSpreadSize');\n/** @deprecated not used outside BookReader, Mode2Up */\nBookReader.prototype.getIdealSpreadSize = Mode2Up.prototype.getIdealSpreadSize;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'getIdealSpreadSize', 'getIdealSpreadSize');\n/** @deprecated not used outside BookReader, Mode2Up */\nBookReader.prototype.getSpreadSizeFromReduce = Mode2Up.prototype.getSpreadSizeFromReduce;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'getSpreadSizeFromReduce', 'getSpreadSizeFromReduce');\n/** @deprecated unused */\nBookReader.prototype.twoPageIsZoomedIn = Mode2Up.prototype.isZoomedIn;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'isZoomedIn', 'twoPageIsZoomedIn');\n/** @deprecated not used outside BookReader */\nBookReader.prototype.twoPageCalculateReductionFactors = Mode2Up.prototype.calculateReductionFactors;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'calculateReductionFactors', 'twoPageCalculateReductionFactors');\n/** @deprecated unused */\nBookReader.prototype.twoPageSetCursor = Mode2Up.prototype.setCursor;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'setCursor', 'twoPageSetCursor');\n/** @deprecated unused outside BookReader, Mode2Up */\nBookReader.prototype.flipLeftToRight = Mode2Up.prototype.flipLeftToRight;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'flipLeftToRight', 'flipLeftToRight');\n/** @deprecated unused outside BookReader, Mode2Up */\nBookReader.prototype.flipRightToLeft = Mode2Up.prototype.flipRightToLeft;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'flipRightToLeft', 'flipRightToLeft');\n/** @deprecated unused outside Mode2Up */\nBookReader.prototype.setMouseHandlers2UP = Mode2Up.prototype.setMouseHandlers;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'setMouseHandlers', 'setMouseHandlers2UP');\n/** @deprecated unused outside BookReader, Mode2Up */\nBookReader.prototype.prepareFlipLeftToRight = Mode2Up.prototype.prepareFlipLeftToRight;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'prepareFlipLeftToRight', 'prepareFlipLeftToRight');\n/** @deprecated unused outside BookReader, Mode2Up */\nBookReader.prototype.prepareFlipRightToLeft = Mode2Up.prototype.prepareFlipRightToLeft;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'prepareFlipRightToLeft', 'prepareFlipRightToLeft');\n/** @deprecated unused outside Mode2Up */\nBookReader.prototype.getPageWidth2UP = Mode2Up.prototype.getPageWidth;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'getPageWidth', 'getPageWidth2UP');\n/** @deprecated unused outside Mode2Up */\nBookReader.prototype.twoPageGutter = Mode2Up.prototype.gutter;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'gutter', 'twoPageGutter');\n/** @deprecated unused outside Mode2Up */\nBookReader.prototype.twoPageTop = Mode2Up.prototype.top;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'top', 'twoPageTop');\n/** @deprecated unused outside Mode2Up */\nBookReader.prototype.twoPageCoverWidth = Mode2Up.prototype.coverWidth;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'coverWidth', 'twoPageCoverWidth');\n/** @deprecated unused outside Mode2Up */\nBookReader.prototype.twoPageGetViewCenter = Mode2Up.prototype.getViewCenter;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'getViewCenter', 'twoPageGetViewCenter');\n/** @deprecated unused outside BookReader, Mode2Up */\nBookReader.prototype.twoPageCenterView = Mode2Up.prototype.centerView;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'centerView', 'twoPageCenterView');\n/** @deprecated unused outside Mode2Up */\nBookReader.prototype.twoPageFlipAreaHeight = Mode2Up.prototype.flipAreaHeight;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'flipAreaHeight', 'twoPageFlipAreaHeight');\n/** @deprecated unused outside Mode2Up */\nBookReader.prototype.twoPageFlipAreaWidth = Mode2Up.prototype.flipAreaWidth;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'flipAreaWidth', 'twoPageFlipAreaWidth');\n/** @deprecated unused outside BookReader, Mode2Up */\nBookReader.prototype.twoPageFlipAreaTop = Mode2Up.prototype.flipAreaTop;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'flipAreaTop', 'twoPageFlipAreaTop');\n/** @deprecated unused outside Mode2Up */\nBookReader.prototype.twoPageLeftFlipAreaLeft = Mode2Up.prototype.leftFlipAreaLeft;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'leftFlipAreaLeft', 'twoPageLeftFlipAreaLeft');\n/** @deprecated unused outside Mode2Up */\nBookReader.prototype.twoPageRightFlipAreaLeft = Mode2Up.prototype.rightFlipAreaLeft;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'rightFlipAreaLeft', 'twoPageRightFlipAreaLeft');\n/** @deprecated unused outside BookReader, Mode2Up */\nBookReader.prototype.gutterOffsetForIndex = Mode2Up.prototype.gutterOffsetForIndex;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'gutterOffsetForIndex', 'gutterOffsetForIndex');\n/** @deprecated unused outside BookReader, Mode2Up */\nBookReader.prototype.leafEdgeWidth = Mode2Up.prototype.leafEdgeWidth;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'leafEdgeWidth', 'leafEdgeWidth');\n/** @deprecated unused outside BookReader, Mode2Up */\nBookReader.prototype.jumpIndexForLeftEdgePageX = Mode2Up.prototype.jumpIndexForLeftEdgePageX;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'jumpIndexForLeftEdgePageX', 'jumpIndexForLeftEdgePageX');\n/** @deprecated unused outside BookReader, Mode2Up */\nBookReader.prototype.jumpIndexForRightEdgePageX = Mode2Up.prototype.jumpIndexForRightEdgePageX;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'jumpIndexForRightEdgePageX', 'jumpIndexForRightEdgePageX');\n/** @deprecated unused outside Mode2Up */\nBookReader.prototype.prefetch = Mode2Up.prototype.prefetch;\nexposeOverrideableMethod(Mode2Up, '_modes.mode2Up', 'prefetch', 'prefetch');\n\n/**\n * Immediately stop flip animations. Callbacks are triggered.\n */\nBookReader.prototype.stopFlipAnimations = function() {\n this.trigger(BookReader.eventNames.stop);\n\n // Stop animation, clear queue, trigger callbacks\n if (this.leafEdgeTmp) {\n $(this.leafEdgeTmp).stop(false, true);\n }\n jQuery.each(this.prefetchedImgs, function() {\n $(this).stop(false, true);\n });\n\n // And again since animations also queued in callbacks\n if (this.leafEdgeTmp) {\n $(this.leafEdgeTmp).stop(false, true);\n }\n jQuery.each(this.prefetchedImgs, function() {\n $(this).stop(false, true);\n });\n};\n\n/**\n * Returns true if keyboard navigation should be disabled for the event\n * @param {Event}\n * @return {boolean}\n */\nBookReader.prototype.keyboardNavigationIsDisabled = function(event) {\n return event.target.tagName == \"INPUT\";\n};\n\n/**\n * @template TClass extends { br: BookReader }\n * Helper method to expose a method onto BookReader from a composed class.\n * Only composed classes in BookReader._overridable can be exposed in this\n * way.\n * @param {new () => TClass} Class\n * @param {keyof BookReader['_overrideable']} classKey\n * @param {keyof TClass} method\n * @param {string} [brMethod]\n */\nfunction exposeOverrideableMethod(Class, classKey, method, brMethod = method) {\n /** @type {function(TClass): BookReader} */\n const classToBr = cls => cls.br;\n /** @type {function(BookReader): TClass} */\n const brToClass = br => br._overrideable[classKey];\n exposeOverrideable(Class, method, classToBr, BookReader, brMethod, brToClass);\n}\n\n\n/***********************/\n/** Navbar extensions **/\n/***********************/\nBookReader.prototype.initNavbar = Navbar.prototype.init;\nexposeOverrideableMethod(Navbar, '_components.navbar', 'init', 'initNavbar');\nBookReader.prototype.getNavPageNumString = Navbar.prototype.getNavPageNumString;\nexposeOverrideableMethod(Navbar, '_components.navbar', 'getNavPageNumString');\n/** @deprecated */\nBookReader.prototype.initEmbedNavbar = Navbar.prototype.initEmbed;\nexposeOverrideableMethod(Navbar, '_components.navbar', 'initEmbed', 'initEmbedNavbar');\n/** @deprecated unused */\nBookReader.prototype.getNavPageNumHtml = getNavPageNumHtml;\n/** @deprecated unused outside this file */\nBookReader.prototype.updateNavPageNum = Navbar.prototype.updateNavPageNum;\nexposeOverrideableMethod(Navbar, '_components.navbar', 'updateNavPageNum');\n/** @deprecated unused outside this file */\nBookReader.prototype.updateNavIndex = Navbar.prototype.updateNavIndex;\nexposeOverrideableMethod(Navbar, '_components.navbar', 'updateNavIndex');\n/** @deprecated unused outside this file */\nBookReader.prototype.updateNavIndexThrottled = utils.throttle(BookReader.prototype.updateNavIndex, 250, false);\n/** @deprecated unused */\nBookReader.prototype.updateNavIndexDebounced = utils.debounce(BookReader.prototype.updateNavIndex, 500, false);\n\n\n/************************/\n/** Toolbar extensions **/\n/************************/\nBookReader.prototype.buildToolbarElement = Toolbar.prototype.buildToolbarElement;\nexposeOverrideableMethod(Toolbar, '_components.toolbar', 'buildToolbarElement');\nBookReader.prototype.initToolbar = Toolbar.prototype.initToolbar;\nexposeOverrideableMethod(Toolbar, '_components.toolbar', 'initToolbar');\nBookReader.prototype.buildShareDiv = Toolbar.prototype.buildShareDiv;\nexposeOverrideableMethod(Toolbar, '_components.toolbar', 'buildShareDiv');\nBookReader.prototype.buildInfoDiv = Toolbar.prototype.buildInfoDiv;\nexposeOverrideableMethod(Toolbar, '_components.toolbar', 'buildInfoDiv');\nBookReader.prototype.getToolBarHeight = Toolbar.prototype.getToolBarHeight;\nexposeOverrideableMethod(Toolbar, '_components.toolbar', 'getToolBarHeight');\n/** @deprecated zoom no longer in toolbar */\nBookReader.prototype.updateToolbarZoom = Toolbar.prototype.updateToolbarZoom;\nexposeOverrideableMethod(Toolbar, '_components.toolbar', 'updateToolbarZoom');\n/** @deprecated unused */\nBookReader.prototype.blankInfoDiv = blankInfoDiv;\n/** @deprecated unused */\nBookReader.prototype.blankShareDiv = blankShareDiv;\n/** @deprecated unused */\nBookReader.prototype.createPopup = createPopup;\n\n/**\n * Bind navigation handlers\n */\nBookReader.prototype.bindNavigationHandlers = function() {\n const self = this;\n\n // Note the mobile plugin attaches itself to body, so we need to select outside\n const jIcons = this.$('.BRicon').add('.BRmobileMenu .BRicon');\n // Map of jIcon class -> click handler\n const navigationControls = {\n book_left: () => {\n this.trigger(BookReader.eventNames.stop);\n this.left();\n },\n book_right: () => {\n this.trigger(BookReader.eventNames.stop);\n this.right();\n },\n book_up: () => {\n if ($.inArray(this.mode, [this.constMode1up, this.constModeThumb]) >= 0) {\n this.scrollUp();\n } else {\n this.prev();\n }\n },\n book_down: () => {\n if ($.inArray(this.mode, [this.constMode1up, this.constModeThumb]) >= 0) {\n this.scrollDown();\n } else {\n this.next();\n }\n },\n book_top: this.first.bind(this),\n book_bottom: this.last.bind(this),\n book_leftmost: this.leftmost.bind(this),\n book_rightmost: this.rightmost.bind(this),\n onepg: () => {\n this.switchMode(self.constMode1up);\n },\n thumb: () => {\n this.switchMode(self.constModeThumb);\n },\n twopg: () => {\n this.switchMode(self.constMode2up);\n },\n zoom_in: () => {\n this.trigger(BookReader.eventNames.stop);\n this.zoom(1);\n this.trigger(BookReader.eventNames.zoomIn);\n },\n zoom_out: () => {\n this.trigger(BookReader.eventNames.stop);\n this.zoom(-1);\n this.trigger(BookReader.eventNames.zoomOut);\n },\n full: () => {\n if (this.ui == 'embed') {\n var url = this.$('.BRembedreturn a').attr('href');\n window.open(url);\n } else {\n this.toggleFullscreen();\n }\n },\n };\n\n jIcons.filter('.fit').bind('fit', function() {\n // XXXmang implement autofit zoom\n });\n\n for (const control in navigationControls) {\n jIcons.filter(`.${control}`).on('click.bindNavigationHandlers', () => {\n navigationControls[control]()\n return false;\n });\n }\n\n var $brNavCntlBtmEl = this.$('.BRnavCntlBtm');\n var $brNavCntlTopEl = this.$('.BRnavCntlTop');\n\n this.$('.BRnavCntl').click(\n function() {\n var promises = [];\n // TODO don't use magic constants\n // TODO move this to a function\n if ($brNavCntlBtmEl.hasClass('BRdn')) {\n if (self.refs.$BRtoolbar)\n promises.push(self.refs.$BRtoolbar.animate(\n {top: self.getToolBarHeight() * -1}\n ).promise());\n promises.push(self.$('.BRfooter').animate({bottom: self.getFooterHeight() * -1}).promise());\n $brNavCntlBtmEl.addClass('BRup').removeClass('BRdn');\n $brNavCntlTopEl.addClass('BRdn').removeClass('BRup');\n self.$('.BRnavCntlBtm.BRnavCntl').animate({height:'45px'});\n self.$('.BRnavCntl').delay(1000).animate({opacity:.75}, 1000);\n } else {\n if (self.refs.$BRtoolbar)\n promises.push(self.refs.$BRtoolbar.animate({top:0}).promise());\n promises.push(self.$('.BRfooter').animate({bottom:0}).promise());\n $brNavCntlBtmEl.addClass('BRdn').removeClass('BRup');\n $brNavCntlTopEl.addClass('BRup').removeClass('BRdn');\n self.$('.BRnavCntlBtm.BRnavCntl').animate({height:'30px'});\n self.$('.BRvavCntl').animate({opacity:1})\n }\n $.when.apply($, promises).done(function() {\n // Only do full resize in auto mode and need to recalc. size\n if (self.mode == self.constMode2up && self.twoPage.autofit != null\n && self.twoPage.autofit != 'none'\n ) {\n self.resize();\n } else if (self.mode == self.constMode1up && self.onePage.autofit != null\n && self.onePage.autofit != 'none') {\n self.resize();\n } else {\n // Don't do a full resize to avoid redrawing images\n self.resizeBRcontainer();\n }\n });\n }\n );\n $brNavCntlBtmEl.mouseover(function() {\n if ($(this).hasClass('BRup')) {\n self.$('.BRnavCntl').animate({opacity:1},250);\n }\n }).mouseleave(function() {\n if ($(this).hasClass('BRup')) {\n self.$('.BRnavCntl').animate({opacity:.75},250);\n }\n });\n $brNavCntlTopEl.mouseover(function() {\n if ($(this).hasClass('BRdn')) {\n self.$('.BRnavCntl').animate({opacity:1},250);\n }\n }).mouseleave(function() {\n if ($(this).hasClass('BRdn')) {\n self.$('.BRnavCntl').animate({opacity:.75},250);\n }\n });\n\n this.initSwipeData();\n\n $(document).off('mousemove.navigation', this.el);\n $(document).on(\n 'mousemove.navigation',\n this.el,\n { 'br': this },\n this.navigationMousemoveHandler\n );\n\n $(document).off('mousedown.swipe', '.BRpageimage');\n $(document).on(\n 'mousedown.swipe',\n '.BRpageimage',\n { 'br': this },\n this.swipeMousedownHandler\n );\n\n this.bindMozTouchHandlers();\n};\n\n/**\n * Unbind navigation handlers\n */\nBookReader.prototype.unbindNavigationHandlers = function() {\n $(document).off('mousemove.navigation', this.el);\n};\n\n/**\n * Handle mousemove related to navigation. Bind at #BookReader level to allow autohide.\n */\nBookReader.prototype.navigationMousemoveHandler = function(event) {\n // $$$ possibly not great to be calling this for every mousemove\n if (event.data['br'].uiAutoHide) {\n // 77px is an approximate height of the Internet Archive Top Nav\n // 75 & 76 (pixels) provide used in this context is checked againt the IA top nav height\n var navkey = $(document).height() - 75;\n if ((event.pageY < 76) || (event.pageY > navkey)) {\n // inside or near navigation elements\n event.data['br'].hideNavigation();\n } else {\n event.data['br'].showNavigation();\n }\n }\n};\n\nBookReader.prototype.initSwipeData = function(clientX, clientY) {\n /*\n * Based on the really quite awesome \"Today's Guardian\" at http://guardian.gyford.com/\n */\n this._swipe = {\n mightBeSwiping: false,\n didSwipe: false,\n mightBeDraggin: false,\n didDrag: false,\n startTime: (new Date).getTime(),\n startX: clientX,\n startY: clientY,\n lastX: clientX,\n lastY: clientY,\n deltaX: 0,\n deltaY: 0,\n deltaT: 0\n }\n};\n\nBookReader.prototype.swipeMousedownHandler = function(event) {\n var self = event.data['br'];\n\n // We should be the last bubble point for the page images\n // Disable image drag and select, but keep right-click\n if (event.which == 3) {\n return !self.protected;\n }\n\n $(event.target).bind('mouseout.swipe',\n { 'br': self},\n self.swipeMouseupHandler\n ).bind('mouseup.swipe',\n { 'br': self},\n self.swipeMouseupHandler\n ).bind('mousemove.swipe',\n { 'br': self },\n self.swipeMousemoveHandler\n );\n\n self.initSwipeData(event.clientX, event.clientY);\n self._swipe.mightBeSwiping = true;\n self._swipe.mightBeDragging = true;\n\n event.preventDefault();\n event.returnValue = false;\n event.cancelBubble = true;\n return false;\n};\n\nBookReader.prototype.swipeMousemoveHandler = function(event) {\n var self = event.data['br'];\n var _swipe = self._swipe;\n if (! _swipe.mightBeSwiping) {\n return;\n }\n\n // Update swipe data\n _swipe.deltaX = event.clientX - _swipe.startX;\n _swipe.deltaY = event.clientY - _swipe.startY;\n _swipe.deltaT = (new Date).getTime() - _swipe.startTime;\n\n var absX = Math.abs(_swipe.deltaX);\n var absY = Math.abs(_swipe.deltaY);\n\n // Minimum distance in the amount of tim to trigger the swipe\n var minSwipeLength = Math.min(self.refs.$br.width() / 5, 80);\n var maxSwipeTime = 400;\n\n // Check for horizontal swipe\n if (absX > absY && (absX > minSwipeLength) && _swipe.deltaT < maxSwipeTime) {\n _swipe.mightBeSwiping = false; // only trigger once\n _swipe.didSwipe = true;\n if (self.mode == self.constMode2up) {\n if (_swipe.deltaX < 0) {\n self.right();\n } else {\n self.left();\n }\n }\n }\n\n if ( _swipe.deltaT > maxSwipeTime && !_swipe.didSwipe) {\n if (_swipe.mightBeDragging) {\n // Dragging\n _swipe.didDrag = true;\n self.refs.$brContainer\n .scrollTop(self.refs.$brContainer.scrollTop() - event.clientY + _swipe.lastY)\n .scrollLeft(self.refs.$brContainer.scrollLeft() - event.clientX + _swipe.lastX);\n }\n }\n _swipe.lastX = event.clientX;\n _swipe.lastY = event.clientY;\n\n event.preventDefault();\n event.returnValue = false;\n event.cancelBubble = true;\n return false;\n};\n\nBookReader.prototype.swipeMouseupHandler = function(event) {\n var _swipe = event.data['br']._swipe;\n _swipe.mightBeSwiping = false;\n _swipe.mightBeDragging = false;\n\n $(event.target).unbind('mouseout.swipe').unbind('mouseup.swipe').unbind('mousemove.swipe');\n\n if (_swipe.didSwipe || _swipe.didDrag) {\n // Swallow event if completed swipe gesture\n event.preventDefault();\n event.returnValue = false;\n event.cancelBubble = true;\n return false;\n }\n return true;\n};\n\nBookReader.prototype.bindMozTouchHandlers = function() {\n var self = this;\n\n // Currently only want touch handlers in 2up\n this.refs.$br.bind('MozTouchDown', function(event) {\n if (this.mode == self.constMode2up) {\n event.preventDefault();\n }\n })\n .bind('MozTouchMove', function(event) {\n if (this.mode == self.constMode2up) {\n event.preventDefault();\n }\n })\n .bind('MozTouchUp', function(event) {\n if (this.mode == self.constMode2up) {\n event.preventDefault();\n }\n });\n};\n\n/**\n * Returns true if the navigation elements are currently visible\n * @return {boolean}\n */\nBookReader.prototype.navigationIsVisible = function() {\n // $$$ doesn't account for transitioning states, nav must be fully visible to return true\n var toolpos = this.refs.$BRtoolbar.position();\n var tooltop = toolpos.top;\n return tooltop == 0;\n};\n\n/**\n * Main controller that sets navigation into view.\n * Defaults to SHOW the navigation chrome\n */\nBookReader.prototype.setNavigationView = function brSetNavigationView(hide) {\n var animationLength = this.constNavAnimationDuration;\n var animationType = 'linear';\n var resizePageContainer = function resizePageContainer () {\n /* main page container fills whole container */\n if (this.constMode2up !== this.mode) {\n var animate = true;\n this.resizeBRcontainer(animate);\n }\n this.trigger(BookReader.eventNames.navToggled);\n }.bind(this);\n\n var toolbarHeight = 0;\n var navbarHeight = 0;\n if (hide) {\n toolbarHeight = this.getToolBarHeight() * -1;\n navbarHeight = this.getFooterHeight() * -1;\n\n this.refs.$BRtoolbar.addClass('js-menu-hide');\n this.refs.$BRfooter.addClass('js-menu-hide');\n } else {\n this.refs.$BRtoolbar.removeClass('js-menu-hide');\n this.refs.$BRfooter.removeClass('js-menu-hide');\n }\n\n this.refs.$BRtoolbar.animate(\n { top: toolbarHeight },\n animationLength,\n animationType,\n resizePageContainer\n );\n this.refs.$BRfooter.animate(\n { bottom: navbarHeight },\n animationLength,\n animationType,\n resizePageContainer\n );\n};\n/**\n * Hide navigation elements, if visible\n */\nBookReader.prototype.hideNavigation = function() {\n // Check if navigation is showing\n if (this.navigationIsVisible()) {\n var hide = true;\n this.setNavigationView(hide);\n }\n};\n\n/**\n * Show navigation elements\n */\nBookReader.prototype.showNavigation = function() {\n // Check if navigation is hidden\n if (!this.navigationIsVisible()) {\n this.setNavigationView();\n }\n};\n\n/**\n * Returns the index of the first visible page, dependent on the mode.\n * $$$ Currently we cannot display the front/back cover in 2-up and will need to update\n * this function when we can as part of https://bugs.launchpad.net/gnubook/+bug/296788\n * @return {number}\n */\nBookReader.prototype.firstDisplayableIndex = function() {\n if (this.mode != this.constMode2up) {\n return 0;\n }\n\n if ('rl' != this.pageProgression) {\n // LTR\n if (this._models.book.getPageSide(0) == 'L') {\n return 0;\n } else {\n return -1;\n }\n } else {\n // RTL\n if (this._models.book.getPageSide(0) == 'R') {\n return 0;\n } else {\n return -1;\n }\n }\n};\n\n/**\n * Returns the index of the last visible page, dependent on the mode.\n * $$$ Currently we cannot display the front/back cover in 2-up and will need to update\n * this function when we can as part of https://bugs.launchpad.net/gnubook/+bug/296788\n * @return {number}\n */\nBookReader.prototype.lastDisplayableIndex = function() {\n\n var lastIndex = this._models.book.getNumLeafs() - 1;\n\n if (this.mode != this.constMode2up) {\n return lastIndex;\n }\n\n if ('rl' != this.pageProgression) {\n // LTR\n if (this._models.book.getPageSide(lastIndex) == 'R') {\n return lastIndex;\n } else {\n return lastIndex + 1;\n }\n } else {\n // RTL\n if (this._models.book.getPageSide(lastIndex) == 'L') {\n return lastIndex;\n } else {\n return lastIndex + 1;\n }\n }\n};\n\n\n/**************************/\n/** BookModel extensions **/\n/**************************/\n/** @deprecated not used outside */\nBookReader.prototype.getMedianPageSize = BookModel.prototype.getMedianPageSize;\nexposeOverrideableMethod(BookModel, '_models.book', 'getMedianPageSize');\nBookReader.prototype._getPageWidth = BookModel.prototype._getPageWidth;\nexposeOverrideableMethod(BookModel, '_models.book', '_getPageWidth');\nBookReader.prototype._getPageHeight = BookModel.prototype._getPageHeight;\nexposeOverrideableMethod(BookModel, '_models.book', '_getPageHeight');\nBookReader.prototype.getPageIndex = BookModel.prototype.getPageIndex;\nexposeOverrideableMethod(BookModel, '_models.book', 'getPageIndex');\n/** @deprecated not used outside */\nBookReader.prototype.getPageIndices = BookModel.prototype.getPageIndices;\nexposeOverrideableMethod(BookModel, '_models.book', 'getPageIndices');\nBookReader.prototype.getPageName = BookModel.prototype.getPageName;\nexposeOverrideableMethod(BookModel, '_models.book', 'getPageName');\nBookReader.prototype.getNumLeafs = BookModel.prototype.getNumLeafs;\nexposeOverrideableMethod(BookModel, '_models.book', 'getNumLeafs');\nBookReader.prototype.getPageWidth = BookModel.prototype.getPageWidth;\nexposeOverrideableMethod(BookModel, '_models.book', 'getPageWidth');\nBookReader.prototype.getPageHeight = BookModel.prototype.getPageHeight;\nexposeOverrideableMethod(BookModel, '_models.book', 'getPageHeight');\nBookReader.prototype.getPageURI = BookModel.prototype.getPageURI;\nexposeOverrideableMethod(BookModel, '_models.book', 'getPageURI');\nBookReader.prototype.getPageSide = BookModel.prototype.getPageSide;\nexposeOverrideableMethod(BookModel, '_models.book', 'getPageSide');\nBookReader.prototype.getPageNum = BookModel.prototype.getPageNum;\nexposeOverrideableMethod(BookModel, '_models.book', 'getPageNum');\nBookReader.prototype.getPageProp = BookModel.prototype.getPageProp;\nexposeOverrideableMethod(BookModel, '_models.book', 'getPageProp');\nBookReader.prototype.getSpreadIndices = BookModel.prototype.getSpreadIndices;\nexposeOverrideableMethod(BookModel, '_models.book', 'getSpreadIndices');\nBookReader.prototype.leafNumToIndex = BookModel.prototype.leafNumToIndex;\nexposeOverrideableMethod(BookModel, '_models.book', 'leafNumToIndex');\nBookReader.prototype.parsePageString = BookModel.prototype.parsePageString;\nexposeOverrideableMethod(BookModel, '_models.book', 'parsePageString');\n/** @deprecated unused */\nBookReader.prototype._getDataFlattened = BookModel.prototype._getDataFlattened;\nexposeOverrideableMethod(BookModel, '_models.book', '_getDataFlattened');\n/** @deprecated unused */\nBookReader.prototype._getDataProp = BookModel.prototype._getDataProp;\nexposeOverrideableMethod(BookModel, '_models.book', '_getDataProp');\n\n// Parameter related functions\n\n/**\n * Update from the params object\n * @param {Object}\n */\nBookReader.prototype.updateFromParams = function(params) {\n // Set init, fragment change options for switchMode()\n const {\n mode = 0,\n init = false,\n fragmentChange = false,\n } = params;\n\n if (mode) {\n this.switchMode(\n mode,\n { init: init, suppressFragmentChange: !fragmentChange }\n );\n }\n\n // $$$ process /zoom\n // We only respect page if index is not set\n if ('undefined' != typeof(params.index)) {\n if (params.index != this.currentIndex()) {\n this.jumpToIndex(params.index);\n }\n } else if ('undefined' != typeof(params.page)) {\n // $$$ this assumes page numbers are unique\n if (params.page != this._models.book.getPageNum(this.currentIndex())) {\n this.jumpToPage(params.page);\n }\n }\n\n\n // process /search\n // @deprecated for urlMode 'history'\n // Continues to work for urlMode 'hash'\n if (this.enableSearch && 'undefined' != typeof(params.search)) {\n if (this.searchTerm !== params.search) {\n this.$('.BRsearchInput').val(params.search);\n }\n }\n\n // $$$ process /region\n // $$$ process /highlight\n\n // $$$ process /theme\n if (this.enableThemesPlugin && 'undefined' != typeof(params.theme)) {\n this.updateTheme(params.theme);\n }\n};\n\n/**\n * Returns true if we can switch to the requested mode\n * @param {number} mode\n * @return {boolean}\n */\nBookReader.prototype.canSwitchToMode = function(mode) {\n if (mode == this.constMode2up || mode == this.constModeThumb) {\n // check there are enough pages to display\n // $$$ this is a workaround for the mis-feature that we can't display\n // short books in 2up mode\n if (this._models.book.getNumLeafs() < 2) {\n return false;\n }\n }\n\n return true;\n};\n\n\n/**\n * Returns the srcset with correct URIs or void string if out of range\n * Also makes the reduce argument optional\n * @param {number} index\n * @param {number} [reduce]\n * @param {number} [rotate]\n * @return {string}\n */\nBookReader.prototype._getPageURISrcset = function(index, reduce, rotate) {\n if (index < 0 || index >= this._models.book.getNumLeafs()) { // Synthesize page\n return \"\";\n }\n\n let ratio = reduce;\n if ('undefined' == typeof(reduce)) {\n // reduce not passed in\n // $$$ this probably won't work for thumbnail mode\n ratio = this._models.book.getPageHeight(index) / this.twoPage.height;\n }\n let scale = [16,8,4,2,1];\n // $$$ we make an assumption here that the scales are available pow2 (like kakadu)\n if (ratio < 2) {\n return \"\";\n } else if (ratio < 4) {\n scale = [1];\n } else if (ratio < 8) {\n scale = [2,1];\n } else if (ratio < 16) {\n scale = [4,2,1];\n } else if (ratio < 32) {\n scale = [8,4,2,1];\n }\n return scale.map((el, i) => (\n this._models.book.getPageURI(index, scale[i], rotate) + \" \"\n + Math.pow(2, i + 1) + \"x\"\n )).join(', ');\n}\n\n\n/**\n * Returns the page URI or transparent image if out of range\n * Also makes the reduce argument optional\n * @param {number} index\n * @param {number} [reduce]\n * @param {number} [rotate]\n * @return {string}\n */\nBookReader.prototype._getPageURI = function(index, reduce, rotate) {\n if (index < 0 || index >= this._models.book.getNumLeafs()) { // Synthesize page\n return this.imagesBaseURL + \"transparent.png\";\n }\n\n if ('undefined' == typeof(reduce)) {\n // reduce not passed in\n // $$$ this probably won't work for thumbnail mode\n var ratio = this._models.book.getPageHeight(index) / this.twoPage.height;\n var scale;\n // $$$ we make an assumption here that the scales are available pow2 (like kakadu)\n if (ratio < 2) {\n scale = 1;\n } else if (ratio < 4) {\n scale = 2;\n } else if (ratio < 8) {\n scale = 4;\n } else if (ratio < 16) {\n scale = 8;\n } else if (ratio < 32) {\n scale = 16;\n } else {\n scale = 32;\n }\n reduce = scale;\n }\n\n return this._models.book.getPageURI(index, reduce, rotate);\n};\n\n/**\n * @param {string}\n */\nBookReader.prototype.showProgressPopup = function(msg) {\n if (this.popup) return;\n\n this.popup = document.createElement(\"div\");\n $(this.popup).prop('className', 'BRprogresspopup');\n var bar = document.createElement(\"div\");\n $(bar).css({\n height: '20px'\n }).prop('className', 'BRprogressbar');\n $(this.popup).append(bar);\n\n if (msg) {\n var msgdiv = document.createElement(\"div\");\n msgdiv.innerHTML = msg;\n $(this.popup).append(msgdiv);\n }\n\n $(this.popup).appendTo(this.refs.$br);\n};\n\nBookReader.prototype.removeProgressPopup = function() {\n $(this.popup).remove();\n this.$('.BRprogresspopup').remove();\n this.popup = null;\n};\n\n/**\n * Can be overriden\n */\nBookReader.prototype.initUIStrings = function() {\n // Navigation handlers will be bound after all UI is in place -- makes moving icons between\n // the toolbar and nav bar easier\n\n // Setup tooltips -- later we could load these from a file for i18n\n var titles = {\n '.logo': 'Go to Archive.org', // $$$ update after getting OL record\n '.zoom_in': 'Zoom in',\n '.zoom_out': 'Zoom out',\n '.onepg': 'One-page view',\n '.twopg': 'Two-page view',\n '.thumb': 'Thumbnail view',\n '.print': 'Print this page',\n '.embed': 'Embed BookReader',\n '.link': 'Link to this book (and page)',\n '.bookmark': 'Bookmark this page',\n '.share': 'Share this book',\n '.info': 'About this book',\n '.full': 'Toggle fullscreen',\n '.book_left': 'Flip left',\n '.book_right': 'Flip right',\n '.book_up': 'Page up',\n '.book_down': 'Page down',\n '.play': 'Play',\n '.pause': 'Pause',\n '.BRdn': 'Show/hide nav bar', // Would have to keep updating on state change to have just \"Hide nav bar\"\n '.BRup': 'Show/hide nav bar',\n '.book_top': 'First page',\n '.book_bottom': 'Last page',\n '.book_leftmost': 'First page',\n '.book_rightmost': 'Last page',\n };\n if ('rl' == this.pageProgression) {\n titles['.book_leftmost'] = 'Last page';\n titles['.book_rightmost'] = 'First page';\n }\n\n for (var icon in titles) {\n this.$(icon).prop('title', titles[icon]);\n }\n}\n\n/**\n * Reloads images. Useful when some images might have failed.\n */\nBookReader.prototype.reloadImages = function() {\n this.refs.$brContainer.find('img').each(function(index, elem) {\n if (!elem.complete || elem.naturalHeight === 0) {\n var src = elem.src;\n elem.src = '';\n setTimeout(function() {\n elem.src = src;\n }, 1000);\n }\n });\n};\n\n/**\n * @param {boolean} ignoreDisplay - bypass the display check\n * @return {number}\n */\nBookReader.prototype.getFooterHeight = function() {\n var $heightEl = this.mode == this.constMode2up ? this.refs.$BRfooter : this.refs.$BRnav;\n if ($heightEl && this.refs.$BRfooter) {\n var outerHeight = $heightEl.outerHeight();\n var bottom = parseInt(this.refs.$BRfooter.css('bottom'));\n if (!isNaN(outerHeight) && !isNaN(bottom)) {\n return outerHeight + bottom;\n }\n }\n return 0;\n}\n\n// Basic Usage built-in Methods (can be overridden through options)\n// This implementation uses options.data value for populating BookReader\n\n/**\n * Create a params object from the current parameters.\n * @return {Object}\n */\nBookReader.prototype.paramsFromCurrent = function() {\n var params = {};\n\n var index = this.currentIndex();\n var pageNum = this._models.book.getPageNum(index);\n if ((pageNum === 0) || pageNum) {\n params.page = pageNum;\n }\n\n params.index = index;\n params.mode = this.mode;\n\n // $$$ highlight\n // $$$ region\n\n // search\n if (this.enableSearch) {\n params.search = this.searchTerm;\n }\n\n return params;\n};\n\n/**\n * Return an object with configuration parameters from a fragment string.\n *\n * Fragments are formatted as a URL path but may be used outside of URLs as a\n * serialization format for BookReader parameters\n *\n * @see http://openlibrary.org/dev/docs/bookurls for fragment syntax\n *\n * @param {string} fragment initial # is allowed for backwards compatibility\n * but is deprecated\n * @return {Object}\n */\nBookReader.prototype.paramsFromFragment = function(fragment) {\n var params = {};\n\n // For backwards compatibility we allow an initial # character\n // (as from window.location.hash) but don't require it\n if (fragment.substr(0, 1) == '#') {\n fragment = fragment.substr(1);\n }\n\n // Simple #nn syntax\n var oldStyleLeafNum = parseInt( /^\\d+$/.exec(fragment) );\n if ( !isNaN(oldStyleLeafNum) ) {\n params.index = oldStyleLeafNum;\n\n // Done processing if using old-style syntax\n return params;\n }\n\n // Split into key-value pairs\n var urlArray = fragment.split('/');\n var urlHash = {};\n for (var i = 0; i < urlArray.length; i += 2) {\n urlHash[urlArray[i]] = urlArray[i + 1];\n }\n\n // Mode\n if ('1up' == urlHash['mode']) {\n params.mode = this.constMode1up;\n } else if ('2up' == urlHash['mode']) {\n params.mode = this.constMode2up;\n } else if ('thumb' == urlHash['mode']) {\n params.mode = this.constModeThumb;\n }\n\n // Index and page\n if ('undefined' != typeof(urlHash['page'])) {\n // page was set -- may not be int\n params.page = urlHash['page'];\n }\n\n // $$$ process /region\n // $$$ process /search\n\n if (urlHash['search'] != undefined) {\n params.search = utils.decodeURIComponentPlus(urlHash['search']);\n }\n\n // $$$ process /highlight\n\n // $$$ process /theme\n if (urlHash['theme'] != undefined) {\n params.theme = urlHash['theme']\n }\n return params;\n};\n\n/**\n * Create a fragment string from the params object.\n *\n * Fragments are formatted as a URL path but may be used outside of URLs as a\n * serialization format for BookReader parameters\n *\n * @see https://openlibrary.org/dev/docs/bookurls for fragment syntax\n *\n * @param {Object} params\n * @param {string} [urlMode]\n * @return {string}\n */\nBookReader.prototype.fragmentFromParams = function(params, urlMode = 'hash') {\n const separator = '/';\n const fragments = [];\n\n if ('undefined' != typeof(params.page)) {\n fragments.push('page', params.page);\n } else {\n if ('undefined' != typeof(params.index)) {\n // Don't have page numbering but we do have the index\n fragments.push('page', 'n' + params.index);\n }\n }\n\n // $$$ highlight\n // $$$ region\n\n // mode\n if ('undefined' != typeof(params.mode)) {\n if (params.mode == this.constMode1up) {\n fragments.push('mode', '1up');\n } else if (params.mode == this.constMode2up) {\n fragments.push('mode', '2up');\n } else if (params.mode == this.constModeThumb) {\n fragments.push('mode', 'thumb');\n } else {\n throw 'fragmentFromParams called with unknown mode ' + params.mode;\n }\n }\n\n // search\n if (params.search && urlMode === 'hash') {\n fragments.push('search', params.search);\n }\n\n return utils.encodeURIComponentPlus(fragments.join(separator)).replace(/%2F/g, '/');\n};\n\n/**\n * Create, update querystring from the params object\n *\n * @param {Object} params\n * @param {string} currQueryString\n * @param {string} [urlMode]\n * @return {string}\n */\nBookReader.prototype.queryStringFromParams = function(\n params,\n currQueryString,\n urlMode = 'hash'\n) {\n const newParams = new URLSearchParams(currQueryString);\n if (params.search && urlMode === 'history') {\n newParams.set('q', params.search)\n }\n // https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams/toString\n // Note: This method returns the query string without the question mark.\n const result = newParams.toString();\n return result ? '?' + result : '';\n}\n\n/**\n * Helper to select within instance's elements\n */\nBookReader.prototype.$ = function(selector) {\n return this.refs.$br.find(selector);\n}\n\n/**\n * Polyfill for deprecated method\n */\njQuery.curCSS = function(element, prop, val) {\n return jQuery(element).css(prop, val);\n};\n\nwindow.BookReader = BookReader;\n","/**\n * Displays a console on the document for debugging devices where remote\n * debugging is not feasible, and forwards all console.log's to be displayed\n * on screen.\n */\nexport class DebugConsole {\n constructor() {\n /** How many times we've seen the same line in a row */\n this.currentRun = 0;\n }\n\n init() {\n this.$log = $(`
    `);\n $(document.body).prepend(this.$log);\n\n this.$form = $(`\n
    \n \n
    `);\n this.$log.append(this.$form);\n\n this.$form.submit(ev => {\n ev.preventDefault();\n const result = eval(this.$form.find('input').val());\n this.logToScreen([result]);\n });\n\n const _realLog = console.log.bind(console);\n console.log = (...args) => {\n _realLog(...args);\n this.logToScreen(args);\n }\n\n window.onerror = (...args) => this.logToScreen(args);\n }\n\n /**\n * Log the provided array onto the on screen console\n * @param {Array} args\n */\n logToScreen(args) {\n const html = args.map(JSON.stringify).join(',');\n const $lastEntry = this.$log.children('.log-entry:last-child')\n if ($lastEntry.find('.entry-code').html() == html) {\n $lastEntry.find('.count').text(`(${++this.currentRun})`);\n } else {\n this.currentRun = 1;\n this.$log.append($(`\n
    \n ${html}\n
    `));\n }\n }\n}\n","/**\n * Bind mouse handlers\n * Disable mouse click to avoid selected/highlighted page images\n * @param {JQuery} jObject\n */\nexport function disableSelect(jObject) {\n // $$$ check here for right-click and don't disable. Also use jQuery style\n // for stopping propagation. See https://bugs.edge.launchpad.net/gnubook/+bug/362626\n jObject.bind('mousedown', () => false);\n // Special hack for IE7\n jObject[0].onselectstart = () => false;\n}\n\n/**\n * @param {number} value\n * @param {number} min\n * @param {number} max\n * @return {number}\n */\nexport function clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Given value and maximum, calculate a percentage suitable for CSS\n * @param {number} value\n * @param {number} max\n * @return {string}\n */\nexport function cssPercentage(value, max) {\n return ((value / max) * 100) + '%';\n}\n\n/**\n * @param {*} value\n * @param {Array} array\n * @return {boolean}\n */\nexport function notInArray(value, array) {\n return !array.includes(value);\n}\n\n/**\n * @param {HTMLIFrameElement} iframe\n * @return {Document}\n */\nexport function getIFrameDocument(iframe) {\n// Adapted from http://xkr.us/articles/dom/iframe-document/\n const outer = iframe.contentWindow || iframe.contentDocument;\n return outer.document || outer;\n}\n\n/**\n * @param {string} str\n * @return {string}\n */\nexport function escapeHTML(str) {\n return str.replace(/&/g,'&')\n .replace(/>/g,'>')\n .replace(/ {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n const callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) func.apply(context, args);\n };\n}\n\n/**\n * Throttle function\n * @see https://remysharp.com/2010/07/21/throttling-function-calls\n * @param {Function} fn\n * @param {number} threshold\n * @param {boolean} delay\n * @return {Function}\n */\nexport function throttle(fn, threshold, delay) {\n threshold || (threshold = 250);\n let last;\n let deferTimer;\n if (delay) last = +new Date;\n return function () {\n const context = this;\n const now = +new Date;\n const args = arguments;\n if (last && now < last + threshold) {\n // hold on to it\n clearTimeout(deferTimer);\n deferTimer = setTimeout(() => {\n last = now;\n fn.apply(context, args);\n }, threshold);\n } else {\n last = now;\n fn.apply(context, args);\n }\n };\n}\n\n/**\n * FIXME we need a better way to do this :/ This is not automatically poly-filled by\n * core-js https://github.com/zloirock/core-js/issues/354\n * @param {Window} window\n */\nexport function polyfillCustomEvent(window) {\n if (typeof window.CustomEvent === \"function\") return false;\n window.CustomEvent = PolyfilledCustomEvent;\n}\n\n/**\n * https://caniuse.com/customevent has issues on older browsers where it can't be\n * called as a constructor, so we have to use older methods.\n * @param {String} eventName\n * @return {CustomEvent}\n */\nexport function PolyfilledCustomEvent(eventName, {bubbles = false, cancelable = false, detail = null} = {}) {\n const event = document.createEvent('CustomEvent');\n event.initCustomEvent(eventName, bubbles, cancelable, detail);\n return event;\n}\n","module.exports = function (it) {\n if (typeof it != 'function') {\n throw TypeError(String(it) + ' is not a function');\n } return it;\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it) && it !== null) {\n throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\n } return it;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? charAt(S, index).length : 1);\n};\n","module.exports = function (it, Constructor, name) {\n if (!(it instanceof Constructor)) {\n throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n } return it;\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it)) {\n throw TypeError(String(it) + ' is not an object');\n } return it;\n};\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\n// `Array.from` method implementation\n// https://tc39.github.io/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iteratorMethod = getIteratorMethod(O);\n var index = 0;\n var length, result, step, iterator, next, value;\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);\n // if the target is not iterable or it's an array with the default iterator - use a simple case\n if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) {\n iterator = iteratorMethod.call(O);\n next = iterator.next;\n result = new C();\n for (;!(step = next.call(iterator)).done; index++) {\n value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n createProperty(result, index, value);\n }\n } else {\n length = toLength(O.length);\n result = new C(length);\n for (;length > index; index++) {\n value = mapping ? mapfn(O[index], index) : O[index];\n createProperty(result, index, value);\n }\n }\n result.length = index;\n return result;\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","var bind = require('../internals/function-bind-context');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = [].push;\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push.call(target, value); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6)\n};\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call,no-throw-literal\n method.call(null, argument || function () { throw 1; }, 1);\n });\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\n\nvar defineProperty = Object.defineProperty;\nvar cache = {};\n\nvar thrower = function (it) { throw it; };\n\nmodule.exports = function (METHOD_NAME, options) {\n if (has(cache, METHOD_NAME)) return cache[METHOD_NAME];\n if (!options) options = {};\n var method = [][METHOD_NAME];\n var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false;\n var argument0 = has(options, 0) ? options[0] : thrower;\n var argument1 = has(options, 1) ? options[1] : undefined;\n\n return cache[METHOD_NAME] = !!method && !fails(function () {\n if (ACCESSORS && !DESCRIPTORS) return true;\n var O = { length: -1 };\n\n if (ACCESSORS) defineProperty(O, 1, { enumerable: true, get: thrower });\n else O[1] = 1;\n\n method.call(O, argument0, argument1);\n });\n};\n","var aFunction = require('../internals/a-function');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\nvar toLength = require('../internals/to-length');\n\n// `Array.prototype.{ reduce, reduceRight }` methods implementation\nvar createMethod = function (IS_RIGHT) {\n return function (that, callbackfn, argumentsLength, memo) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IndexedObject(O);\n var length = toLength(O.length);\n var index = IS_RIGHT ? length - 1 : 0;\n var i = IS_RIGHT ? -1 : 1;\n if (argumentsLength < 2) while (true) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (IS_RIGHT ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.reduce` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.reduce\n left: createMethod(false),\n // `Array.prototype.reduceRight` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.reduceright\n right: createMethod(true)\n};\n","var isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.github.io/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return new (C === undefined ? Array : C)(length === 0 ? 0 : length);\n};\n","var anObject = require('../internals/an-object');\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n try {\n return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (error) {\n var returnMethod = iterator['return'];\n if (returnMethod !== undefined) anObject(returnMethod.call(iterator));\n throw error;\n }\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line no-throw-literal\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;\n};\n","var has = require('../internals/has');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n var regexp = /./;\n try {\n '/./'[METHOD_NAME](regexp);\n } catch (e) {\n try {\n regexp[MATCH] = false;\n return '/./'[METHOD_NAME](regexp);\n } catch (f) { /* empty */ }\n } return false;\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPrimitive(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\n createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return nativeIterator.call(this); };\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);\n }\n Iterators[NAME] = defaultIterator;\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n return methods;\n};\n","var path = require('../internals/path');\nvar has = require('../internals/has');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!has(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n","var fails = require('../internals/fails');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !fails(function () {\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n version = match[0] + match[1];\n} else if (userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = match[1];\n }\n}\n\nmodule.exports = version && +version;\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty === typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","'use strict';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar redefine = require('../internals/redefine');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar regexpExec = require('../internals/regexp-exec');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar SPECIES = wellKnownSymbol('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n return 'a'.replace(/./, '$0') === '$0';\n})();\n\nvar REPLACE = wellKnownSymbol('replace');\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n if (/./[REPLACE]) {\n return /./[REPLACE]('a', '$0') === '';\n }\n return false;\n})();\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\nmodule.exports = function (KEY, length, exec, sham) {\n var SYMBOL = wellKnownSymbol(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n\n if (KEY === 'split') {\n // We can't use real regex here since it causes deoptimization\n // and serious performance degradation in V8\n // https://github.com/zloirock/core-js/issues/306\n re = {};\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n re.flags = '';\n re[SYMBOL] = /./[SYMBOL];\n }\n\n re.exec = function () { execCalled = true; return null; };\n\n re[SYMBOL]('');\n return !execCalled;\n });\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !(\n REPLACE_SUPPORTS_NAMED_GROUPS &&\n REPLACE_KEEPS_$0 &&\n !REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE\n )) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }, {\n REPLACE_KEEPS_$0: REPLACE_KEEPS_$0,\n REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE: REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE\n });\n var stringMethod = methods[0];\n var regexMethod = methods[1];\n\n redefine(String.prototype, KEY, stringMethod);\n redefine(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return regexMethod.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return regexMethod.call(string, this); }\n );\n }\n\n if (sham) createNonEnumerableProperty(RegExp.prototype[SYMBOL], 'sham', true);\n};\n","'use strict';\nvar isArray = require('../internals/is-array');\nvar toLength = require('../internals/to-length');\nvar bind = require('../internals/function-bind-context');\n\n// `FlattenIntoArray` abstract operation\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar flattenIntoArray = function (target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? bind(mapper, thisArg, 3) : false;\n var element;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n if (depth > 0 && isArray(element)) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1FFFFFFFFFFFFF) throw TypeError('Exceed the acceptable array length');\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n};\n\nmodule.exports = flattenIntoArray;\n","var aFunction = require('../internals/a-function');\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 0: return function () {\n return fn.call(that);\n };\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var path = require('../internals/path');\nvar global = require('../internals/global');\n\nvar aFunction = function (variable) {\n return typeof variable == 'function' ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\n","var classof = require('../internals/classof');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","var anObject = require('../internals/an-object');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nmodule.exports = function (it) {\n var iteratorMethod = getIteratorMethod(it);\n if (typeof iteratorMethod != 'function') {\n throw TypeError(String(it) + ' is not iterable');\n } return anObject(iteratorMethod.call(it));\n};\n","var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line no-undef\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func\n Function('return this')();\n","var hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","module.exports = {};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar split = ''.split;\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n","var store = require('../internals/shared-store');\n\nvar functionToString = Function.toString;\n\n// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper\nif (typeof store.inspectSource != 'function') {\n store.inspectSource = function (it) {\n return functionToString.call(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar objectHas = require('../internals/has');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP) {\n var store = new WeakMap();\n var wmget = store.get;\n var wmhas = store.has;\n var wmset = store.set;\n set = function (it, metadata) {\n wmset.call(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget.call(store, it) || {};\n };\n has = function (it) {\n return wmhas.call(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return objectHas(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return objectHas(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.github.io/ecma262/#sec-isarray\nmodule.exports = Array.isArray || function isArray(arg) {\n return classof(arg) == 'Array';\n};\n","var fails = require('../internals/fails');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : typeof detection == 'function' ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","module.exports = false;\n","var isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.github.io/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n","'use strict';\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\nvar returnThis = function () { return this; };\n\n// `%IteratorPrototype%` object\n// https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nif (IteratorPrototype == undefined) IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nif (!IS_PURE && !has(IteratorPrototype, ITERATOR)) {\n createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","module.exports = {};\n","var fails = require('../internals/fails');\n\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n // Chrome 38 Symbol has incorrect toString conversion\n // eslint-disable-next-line no-undef\n return !String(Symbol());\n});\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = !fails(function () {\n var url = new URL('b?a=1&b=2&c=3', 'http://a');\n var searchParams = url.searchParams;\n var result = '';\n url.pathname = 'c%20d';\n searchParams.forEach(function (value, key) {\n searchParams['delete']('b');\n result += key + value;\n });\n return (IS_PURE && !url.toJSON)\n || !searchParams.sort\n || url.href !== 'http://a/c%20d?a=1&c=3'\n || searchParams.get('c') !== '3'\n || String(new URLSearchParams('?a=1')) !== 'a=1'\n || !searchParams[ITERATOR]\n // throws in Edge\n || new URL('https://a@b').username !== 'a'\n || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'\n // not punycoded in Edge\n || new URL('http://тест').host !== 'xn--e1aybc'\n // not escaped in Chrome 62-\n || new URL('http://a#б').hash !== '#%D0%B1'\n // fails in Chrome 66-\n || result !== 'a1c3'\n // throws in Safari\n || new URL('http://x', undefined).host !== 'x';\n});\n","var global = require('../internals/global');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\n","var isRegExp = require('../internals/is-regexp');\n\nmodule.exports = function (it) {\n if (isRegExp(it)) {\n throw TypeError(\"The method doesn't accept regular expressions\");\n } return it;\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\nvar nativeAssign = Object.assign;\nvar defineProperty = Object.defineProperty;\n\n// `Object.assign` method\n// https://tc39.github.io/ecma262/#sec-object.assign\nmodule.exports = !nativeAssign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && nativeAssign({ b: 1 }, nativeAssign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var symbol = Symbol();\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : nativeAssign;\n","var anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n /* global ActiveXObject */\n activeXDocument = document.domain && new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.github.io/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : defineProperties(result, Properties);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperties\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPrimitive = require('../internals/to-primitive');\n\nvar nativeDefineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return nativeDefineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar has = require('../internals/has');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return nativeGetOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyNames = require('../internals/object-get-own-property-names').f;\n\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return nativeGetOwnPropertyNames(it);\n } catch (error) {\n return windowNames.slice();\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]'\n ? getWindowNames(it)\n : nativeGetOwnPropertyNames(toIndexedObject(it));\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertynames\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","var has = require('../internals/has');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectPrototype : null;\n};\n","var has = require('../internals/has');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~indexOf(result, key) || result.push(key);\n }\n return result;\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.github.io/ecma262/#sec-object.keys\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\nvar nativePropertyIsEnumerable = {}.propertyIsEnumerable;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : nativePropertyIsEnumerable;\n","var anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\n setter.call(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter.call(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.github.io/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n","var getBuiltIn = require('../internals/get-built-in');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","var redefine = require('../internals/redefine');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) redefine(target, key, src[key], options);\n return target;\n};\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n if (typeof value == 'function') {\n if (typeof key == 'string' && !has(value, 'name')) createNonEnumerableProperty(value, 'name', key);\n enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : '');\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return typeof this == 'function' && getInternalState(this).source || inspectSource(this);\n});\n","var classof = require('./classof-raw');\nvar regexpExec = require('./regexp-exec');\n\n// `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n\n if (classof(R) !== 'RegExp') {\n throw TypeError('RegExp#exec called on incompatible receiver');\n }\n\n return regexpExec.call(R, S);\n};\n\n","'use strict';\nvar regexpFlags = require('./regexp-flags');\nvar stickyHelpers = require('./regexp-sticky-helpers');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/;\n var re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n var sticky = UNSUPPORTED_Y && re.sticky;\n var flags = regexpFlags.call(re);\n var source = re.source;\n var charsAdded = 0;\n var strCopy = str;\n\n if (sticky) {\n flags = flags.replace('y', '');\n if (flags.indexOf('g') === -1) {\n flags += 'g';\n }\n\n strCopy = String(str).slice(re.lastIndex);\n // Support anchored sticky behavior.\n if (re.lastIndex > 0 && (!re.multiline || re.multiline && str[re.lastIndex - 1] !== '\\n')) {\n source = '(?: ' + source + ')';\n strCopy = ' ' + strCopy;\n charsAdded++;\n }\n // ^(? + rx + ) is needed, in combination with some str slicing, to\n // simulate the 'y' flag.\n reCopy = new RegExp('^(?:' + source + ')', flags);\n }\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n match = nativeExec.call(sticky ? reCopy : re, strCopy);\n\n if (sticky) {\n if (match) {\n match.input = match.input.slice(charsAdded);\n match[0] = match[0].slice(charsAdded);\n match.index = re.lastIndex;\n re.lastIndex += match[0].length;\n } else re.lastIndex = 0;\n } else if (UPDATES_LAST_INDEX_WRONG && match) {\n re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.github.io/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\n\nvar fails = require('./fails');\n\n// babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError,\n// so we use an intermediate function.\nfunction RE(s, f) {\n return RegExp(s, f);\n}\n\nexports.UNSUPPORTED_Y = fails(function () {\n // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\n var re = RE('a', 'y');\n re.lastIndex = 2;\n return re.exec('abcd') != null;\n});\n\nexports.BROKEN_CARET = fails(function () {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n var re = RE('^r', 'gy');\n re.lastIndex = 2;\n return re.exec('str') != null;\n});\n","// `RequireObjectCoercible` abstract operation\n// https://tc39.github.io/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// `SameValue` abstract operation\n// https://tc39.github.io/ecma262/#sec-samevalue\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (key, value) {\n try {\n createNonEnumerableProperty(global, key, value);\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var defineProperty = require('../internals/object-define-property').f;\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.6.5',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n","var anObject = require('../internals/an-object');\nvar aFunction = require('../internals/a-function');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.github.io/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S);\n};\n","var toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.{ codePointAt, at }` methods implementation\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = String(requireObjectCoercible($this));\n var position = toInteger(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = S.charCodeAt(position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING ? S.charAt(position) : first\n : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","'use strict';\n// based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\nvar regexNonASCII = /[^\\0-\\u007E]/; // non-ASCII chars\nvar regexSeparators = /[.\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\nvar OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';\nvar baseMinusTMin = base - tMin;\nvar floor = Math.floor;\nvar stringFromCharCode = String.fromCharCode;\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n */\nvar ucs2decode = function (string) {\n var output = [];\n var counter = 0;\n var length = string.length;\n while (counter < length) {\n var value = string.charCodeAt(counter++);\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n // It's a high surrogate, and there is a next character.\n var extra = string.charCodeAt(counter++);\n if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n // It's an unmatched surrogate; only append this code unit, in case the\n // next code unit is the high surrogate of a surrogate pair.\n output.push(value);\n counter--;\n }\n } else {\n output.push(value);\n }\n }\n return output;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n */\nvar digitToBasic = function (digit) {\n // 0..25 map to ASCII a..z or A..Z\n // 26..35 map to ASCII 0..9\n return digit + 22 + 75 * (digit < 26);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n */\nvar adapt = function (delta, numPoints, firstTime) {\n var k = 0;\n delta = firstTime ? floor(delta / damp) : delta >> 1;\n delta += floor(delta / numPoints);\n for (; delta > baseMinusTMin * tMax >> 1; k += base) {\n delta = floor(delta / baseMinusTMin);\n }\n return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n */\n// eslint-disable-next-line max-statements\nvar encode = function (input) {\n var output = [];\n\n // Convert the input in UCS-2 to an array of Unicode code points.\n input = ucs2decode(input);\n\n // Cache the length.\n var inputLength = input.length;\n\n // Initialize the state.\n var n = initialN;\n var delta = 0;\n var bias = initialBias;\n var i, currentValue;\n\n // Handle the basic code points.\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < 0x80) {\n output.push(stringFromCharCode(currentValue));\n }\n }\n\n var basicLength = output.length; // number of basic code points.\n var handledCPCount = basicLength; // number of code points that have been handled;\n\n // Finish the basic string with a delimiter unless it's empty.\n if (basicLength) {\n output.push(delimiter);\n }\n\n // Main encoding loop:\n while (handledCPCount < inputLength) {\n // All non-basic code points < n have been handled already. Find the next larger one:\n var m = maxInt;\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue >= n && currentValue < m) {\n m = currentValue;\n }\n }\n\n // Increase `delta` enough to advance the decoder's state to , but guard against overflow.\n var handledCPCountPlusOne = handledCPCount + 1;\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n throw RangeError(OVERFLOW_ERROR);\n }\n\n delta += (m - n) * handledCPCountPlusOne;\n n = m;\n\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < n && ++delta > maxInt) {\n throw RangeError(OVERFLOW_ERROR);\n }\n if (currentValue == n) {\n // Represent delta as a generalized variable-length integer.\n var q = delta;\n for (var k = base; /* no condition */; k += base) {\n var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n if (q < t) break;\n var qMinusT = q - t;\n var baseMinusT = base - t;\n output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT)));\n q = floor(qMinusT / baseMinusT);\n }\n\n output.push(stringFromCharCode(digitToBasic(q)));\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n delta = 0;\n ++handledCPCount;\n }\n }\n\n ++delta;\n ++n;\n }\n return output.join('');\n};\n\nmodule.exports = function (input) {\n var encoded = [];\n var labels = input.toLowerCase().replace(regexSeparators, '\\u002E').split('.');\n var i, label;\n for (i = 0; i < labels.length; i++) {\n label = labels[i];\n encoded.push(regexNonASCII.test(label) ? 'xn--' + encode(label) : label);\n }\n return encoded.join('.');\n};\n","'use strict';\nvar toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.repeat` method implementation\n// https://tc39.github.io/ecma262/#sec-string.prototype.repeat\nmodule.exports = ''.repeat || function repeat(count) {\n var str = String(requireObjectCoercible(this));\n var result = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n return result;\n};\n","var classof = require('../internals/classof-raw');\n\n// `thisNumberValue` abstract operation\n// https://tc39.github.io/ecma262/#sec-thisnumbervalue\nmodule.exports = function (value) {\n if (typeof value != 'number' && classof(value) != 'Number') {\n throw TypeError('Incorrect invocation');\n }\n return +value;\n};\n","var toInteger = require('../internals/to-integer');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toInteger(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.github.io/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n","var toInteger = require('../internals/to-integer');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.github.io/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `ToObject` abstract operation\n// https://tc39.github.io/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var isObject = require('../internals/is-object');\n\n// `ToPrimitive` abstract operation\n// https://tc39.github.io/ecma262/#sec-toprimitive\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (input, PREFERRED_STRING) {\n if (!isObject(input)) return input;\n var fn, val;\n if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n","var NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n // eslint-disable-next-line no-undef\n && !Symbol.sham\n // eslint-disable-next-line no-undef\n && typeof Symbol.iterator == 'symbol';\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar has = require('../internals/has');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!has(WellKnownSymbolsStore, name)) {\n if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name];\n else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n var array = [];\n array[IS_CONCAT_SPREADABLE] = false;\n return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n if (!isObject(O)) return false;\n var spreadable = O[IS_CONCAT_SPREADABLE];\n return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n concat: function concat(arg) { // eslint-disable-line no-unused-vars\n var O = toObject(this);\n var A = arraySpeciesCreate(O, 0);\n var n = 0;\n var i, k, length, len, E;\n for (i = -1, length = arguments.length; i < length; i++) {\n E = i === -1 ? O : arguments[i];\n if (isConcatSpreadable(E)) {\n len = toLength(E.length);\n if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n } else {\n if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n createProperty(A, n++, E);\n }\n }\n A.length = n;\n return A;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n// Edge 14- issue\nvar USES_TO_LENGTH = arrayMethodUsesToLength('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $findIndex = require('../internals/array-iteration').findIndex;\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar FIND_INDEX = 'findIndex';\nvar SKIPS_HOLES = true;\n\nvar USES_TO_LENGTH = arrayMethodUsesToLength(FIND_INDEX);\n\n// Shouldn't skip holes\nif (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.findIndex` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.findindex\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES || !USES_TO_LENGTH }, {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $findIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND_INDEX);\n","'use strict';\nvar $ = require('../internals/export');\nvar $find = require('../internals/array-iteration').find;\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar FIND = 'find';\nvar SKIPS_HOLES = true;\n\nvar USES_TO_LENGTH = arrayMethodUsesToLength(FIND);\n\n// Shouldn't skip holes\nif (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.find` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.find\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES || !USES_TO_LENGTH }, {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND);\n","'use strict';\nvar $ = require('../internals/export');\nvar flattenIntoArray = require('../internals/flatten-into-array');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar aFunction = require('../internals/a-function');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\n// `Array.prototype.flatMap` method\n// https://github.com/tc39/proposal-flatMap\n$({ target: 'Array', proto: true }, {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A;\n aFunction(callbackfn);\n A = arraySpeciesCreate(O, 0);\n A.length = flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n return A;\n }\n});\n","var $ = require('../internals/export');\nvar from = require('../internals/array-from');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.github.io/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n from: from\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $includes = require('../internals/array-includes').includes;\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 });\n\n// `Array.prototype.includes` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true, forced: !USES_TO_LENGTH }, {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n","'use strict';\nvar $ = require('../internals/export');\nvar $indexOf = require('../internals/array-includes').indexOf;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar nativeIndexOf = [].indexOf;\n\nvar NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('indexOf');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 });\n\n// `Array.prototype.indexOf` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.indexof\n$({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || !STRICT_METHOD || !USES_TO_LENGTH }, {\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? nativeIndexOf.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.github.io/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return { value: undefined, done: true };\n }\n if (kind == 'keys') return { value: index, done: false };\n if (kind == 'values') return { value: target[index], done: false };\n return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.github.io/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\nvar $ = require('../internals/export');\nvar IndexedObject = require('../internals/indexed-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar nativeJoin = [].join;\n\nvar ES3_STRINGS = IndexedObject != Object;\nvar STRICT_METHOD = arrayMethodIsStrict('join', ',');\n\n// `Array.prototype.join` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.join\n$({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, {\n join: function join(separator) {\n return nativeJoin.call(toIndexedObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n// FF49- issue\nvar USES_TO_LENGTH = arrayMethodUsesToLength('map');\n\n// `Array.prototype.map` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $reduce = require('../internals/array-reduce').left;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar STRICT_METHOD = arrayMethodIsStrict('reduce');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('reduce', { 1: 0 });\n\n// `Array.prototype.reduce` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.reduce\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH }, {\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('slice', { ACCESSORS: true, 0: 0, 1: 2 });\n\nvar SPECIES = wellKnownSymbol('species');\nvar nativeSlice = [].slice;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {\n slice: function slice(start, end) {\n var O = toIndexedObject(this);\n var length = toLength(O.length);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n var Constructor, result, n;\n if (isArray(O)) {\n Constructor = O.constructor;\n // cross-realm fallback\n if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) {\n Constructor = undefined;\n } else if (isObject(Constructor)) {\n Constructor = Constructor[SPECIES];\n if (Constructor === null) Constructor = undefined;\n }\n if (Constructor === Array || Constructor === undefined) {\n return nativeSlice.call(O, k, fin);\n }\n }\n result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n }\n});\n","// this method was added to unscopables after implementation\n// in popular engines, so it's moved to a separate module\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\naddToUnscopables('flatMap');\n","var DESCRIPTORS = require('../internals/descriptors');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar FunctionPrototype = Function.prototype;\nvar FunctionPrototypeToString = FunctionPrototype.toString;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// Function instances `.name` property\n// https://tc39.github.io/ecma262/#sec-function-instances-name\nif (DESCRIPTORS && !(NAME in FunctionPrototype)) {\n defineProperty(FunctionPrototype, NAME, {\n configurable: true,\n get: function () {\n try {\n return FunctionPrototypeToString.call(this).match(nameRE)[1];\n } catch (error) {\n return '';\n }\n }\n });\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar toInteger = require('../internals/to-integer');\nvar thisNumberValue = require('../internals/this-number-value');\nvar repeat = require('../internals/string-repeat');\nvar fails = require('../internals/fails');\n\nvar nativeToFixed = 1.0.toFixed;\nvar floor = Math.floor;\n\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\n\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\nvar FORCED = nativeToFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !fails(function () {\n // V8 ~ Android 4.3-\n nativeToFixed.call({});\n});\n\n// `Number.prototype.toFixed` method\n// https://tc39.github.io/ecma262/#sec-number.prototype.tofixed\n$({ target: 'Number', proto: true, forced: FORCED }, {\n // eslint-disable-next-line max-statements\n toFixed: function toFixed(fractionDigits) {\n var number = thisNumberValue(this);\n var fractDigits = toInteger(fractionDigits);\n var data = [0, 0, 0, 0, 0, 0];\n var sign = '';\n var result = '0';\n var e, z, j, k;\n\n var multiply = function (n, c) {\n var index = -1;\n var c2 = c;\n while (++index < 6) {\n c2 += n * data[index];\n data[index] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n };\n\n var divide = function (n) {\n var index = 6;\n var c = 0;\n while (--index >= 0) {\n c += data[index];\n data[index] = floor(c / n);\n c = (c % n) * 1e7;\n }\n };\n\n var dataToString = function () {\n var index = 6;\n var s = '';\n while (--index >= 0) {\n if (s !== '' || index === 0 || data[index] !== 0) {\n var t = String(data[index]);\n s = s === '' ? t : s + repeat.call('0', 7 - t.length) + t;\n }\n } return s;\n };\n\n if (fractDigits < 0 || fractDigits > 20) throw RangeError('Incorrect fraction digits');\n // eslint-disable-next-line no-self-compare\n if (number != number) return 'NaN';\n if (number <= -1e21 || number >= 1e21) return String(number);\n if (number < 0) {\n sign = '-';\n number = -number;\n }\n if (number > 1e-21) {\n e = log(number * pow(2, 69, 1)) - 69;\n z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = fractDigits;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n result = dataToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n result = dataToString() + repeat.call('0', fractDigits);\n }\n }\n if (fractDigits > 0) {\n k = result.length;\n result = sign + (k <= fractDigits\n ? '0.' + repeat.call('0', fractDigits - k) + result\n : result.slice(0, k - fractDigits) + '.' + result.slice(k - fractDigits));\n } else {\n result = sign + result;\n } return result;\n }\n});\n","var $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.github.io/ecma262/#sec-object.assign\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n assign: assign\n});\n","var $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar nativeKeys = require('../internals/object-keys');\nvar fails = require('../internals/fails');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.github.io/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n keys: function keys(it) {\n return nativeKeys(toObject(it));\n }\n});\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar redefine = require('../internals/redefine');\nvar toString = require('../internals/object-to-string');\n\n// `Object.prototype.toString` method\n// https://tc39.github.io/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar exec = require('../internals/regexp-exec');\n\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n exec: exec\n});\n","'use strict';\nvar redefine = require('../internals/redefine');\nvar anObject = require('../internals/an-object');\nvar fails = require('../internals/fails');\nvar flags = require('../internals/regexp-flags');\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar nativeToString = RegExpPrototype[TO_STRING];\n\nvar NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = nativeToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.github.io/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n redefine(RegExp.prototype, TO_STRING, function toString() {\n var R = anObject(this);\n var p = String(R.source);\n var rf = R.flags;\n var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf);\n return '/' + p + '/' + f;\n }, { unsafe: true });\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\n// `String.prototype.includes` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~String(requireObjectCoercible(this))\n .indexOf(notARegExp(searchString), arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: String(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative, reason) {\n var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = reason.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE;\n var REPLACE_KEEPS_$0 = reason.REPLACE_KEEPS_$0;\n var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var replacer = searchValue == undefined ? undefined : searchValue[REPLACE];\n return replacer !== undefined\n ? replacer.call(searchValue, O, replaceValue)\n : nativeReplace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n if (\n (!REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE && REPLACE_KEEPS_$0) ||\n (typeof replaceValue === 'string' && replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1)\n ) {\n var res = maybeCallNative(nativeReplace, regexp, this, replaceValue);\n if (res.done) return res.value;\n }\n\n var rx = anObject(regexp);\n var S = String(this);\n\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n\n results.push(result);\n if (!global) break;\n\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return nativeReplace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar sameValue = require('../internals/same-value');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@search logic\nfixRegExpWellKnownSymbolLogic('search', 1, function (SEARCH, nativeSearch, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = requireObjectCoercible(this);\n var searcher = regexp == undefined ? undefined : regexp[SEARCH];\n return searcher !== undefined ? searcher.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative(nativeSearch, regexp, this);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar isRegExp = require('../internals/is-regexp');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar toLength = require('../internals/to-length');\nvar callRegExpExec = require('../internals/regexp-exec-abstract');\nvar regexpExec = require('../internals/regexp-exec');\nvar fails = require('../internals/fails');\n\nvar arrayPush = [].push;\nvar min = Math.min;\nvar MAX_UINT32 = 0xFFFFFFFF;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { return !RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'.split(/(b)*/)[1] == 'c' ||\n 'test'.split(/(?:)/, -1).length != 4 ||\n 'ab'.split(/(?:ab)*/).length != 2 ||\n '.'.split(/(.?)(.?)/).length != 4 ||\n '.'.split(/()()/).length > 1 ||\n ''.split(/.?/).length\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(requireObjectCoercible(this));\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (separator === undefined) return [string];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) {\n return nativeSplit.call(string, separator, lim);\n }\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy.lastIndex;\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1));\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= lim) break;\n }\n if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output.length > lim ? output.slice(0, lim) : output;\n };\n // Chakra, V8\n } else if ('0'.split(undefined, 0).length) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit);\n };\n } else internalSplit = nativeSplit;\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = requireObjectCoercible(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== nativeSplit);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n}, !SUPPORTS_Y);\n","// `Symbol.prototype.description` getter\n// https://tc39.github.io/ecma262/#sec-symbol.prototype.description\n'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar has = require('../internals/has');\nvar isObject = require('../internals/is-object');\nvar defineProperty = require('../internals/object-define-property').f;\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\n\nvar NativeSymbol = global.Symbol;\n\nif (DESCRIPTORS && typeof NativeSymbol == 'function' && (!('description' in NativeSymbol.prototype) ||\n // Safari 12 bug\n NativeSymbol().description !== undefined\n)) {\n var EmptyStringDescriptionStore = {};\n // wrap Symbol constructor for correct work with undefined description\n var SymbolWrapper = function Symbol() {\n var description = arguments.length < 1 || arguments[0] === undefined ? undefined : String(arguments[0]);\n var result = this instanceof SymbolWrapper\n ? new NativeSymbol(description)\n // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'\n : description === undefined ? NativeSymbol() : NativeSymbol(description);\n if (description === '') EmptyStringDescriptionStore[result] = true;\n return result;\n };\n copyConstructorProperties(SymbolWrapper, NativeSymbol);\n var symbolPrototype = SymbolWrapper.prototype = NativeSymbol.prototype;\n symbolPrototype.constructor = SymbolWrapper;\n\n var symbolToString = symbolPrototype.toString;\n var native = String(NativeSymbol('test')) == 'Symbol(test)';\n var regexp = /^Symbol\\((.*)\\)[^)]+$/;\n defineProperty(symbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n var symbol = isObject(this) ? this.valueOf() : this;\n var string = symbolToString.call(symbol);\n if (has(EmptyStringDescriptionStore, symbol)) return '';\n var desc = native ? string.slice(7, -1) : string.replace(regexp, '$1');\n return desc === '' ? undefined : desc;\n }\n });\n\n $({ global: true, forced: true }, {\n Symbol: SymbolWrapper\n });\n}\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (O, P, Attributes) {\n var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n nativeDefineProperty(O, P, Attributes);\n if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n var symbol = AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE]);\n setInternalState(symbol, {\n type: SYMBOL,\n tag: tag,\n description: description\n });\n if (!DESCRIPTORS) symbol.description = description;\n return symbol;\n};\n\nvar isSymbol = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return Object(it) instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n anObject(O);\n var key = toPrimitive(P, true);\n anObject(Attributes);\n if (has(AllSymbols, key)) {\n if (!Attributes.enumerable) {\n if (!has(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n O[HIDDEN][key] = true;\n } else {\n if (has(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n } return setSymbolDescriptor(O, key, Attributes);\n } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n anObject(O);\n var properties = toIndexedObject(Properties);\n var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n $forEach(keys, function (key) {\n if (!DESCRIPTORS || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]);\n });\n return O;\n};\n\nvar $create = function create(O, Properties) {\n return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n var P = toPrimitive(V, true);\n var enumerable = nativePropertyIsEnumerable.call(this, P);\n if (this === ObjectPrototype && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false;\n return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n var it = toIndexedObject(O);\n var key = toPrimitive(P, true);\n if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return;\n var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n if (descriptor && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) {\n descriptor.enumerable = true;\n }\n return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(key);\n });\n return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype, key))) {\n result.push(AllSymbols[key]);\n }\n });\n return result;\n};\n\n// `Symbol` constructor\n// https://tc39.github.io/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor');\n var description = !arguments.length || arguments[0] === undefined ? undefined : String(arguments[0]);\n var tag = uid(description);\n var setter = function (value) {\n if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n };\n if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n return wrap(tag, description);\n };\n\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return getInternalState(this).tag;\n });\n\n redefine($Symbol, 'withoutSetter', function (description) {\n return wrap(uid(description), description);\n });\n\n propertyIsEnumerableModule.f = $propertyIsEnumerable;\n definePropertyModule.f = $defineProperty;\n getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n wrappedWellKnownSymbolModule.f = function (name) {\n return wrap(wellKnownSymbol(name), name);\n };\n\n if (DESCRIPTORS) {\n // https://github.com/tc39/proposal-Symbol-description\n nativeDefineProperty($Symbol[PROTOTYPE], 'description', {\n configurable: true,\n get: function description() {\n return getInternalState(this).description;\n }\n });\n if (!IS_PURE) {\n redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n }\n }\n}\n\n$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n // `Symbol.for` method\n // https://tc39.github.io/ecma262/#sec-symbol.for\n 'for': function (key) {\n var string = String(key);\n if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n var symbol = $Symbol(string);\n StringToSymbolRegistry[string] = symbol;\n SymbolToStringRegistry[symbol] = string;\n return symbol;\n },\n // `Symbol.keyFor` method\n // https://tc39.github.io/ecma262/#sec-symbol.keyfor\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n if (has(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n },\n useSetter: function () { USE_SETTER = true; },\n useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n // `Object.create` method\n // https://tc39.github.io/ecma262/#sec-object.create\n create: $create,\n // `Object.defineProperty` method\n // https://tc39.github.io/ecma262/#sec-object.defineproperty\n defineProperty: $defineProperty,\n // `Object.defineProperties` method\n // https://tc39.github.io/ecma262/#sec-object.defineproperties\n defineProperties: $defineProperties,\n // `Object.getOwnPropertyDescriptor` method\n // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n // `Object.getOwnPropertyNames` method\n // https://tc39.github.io/ecma262/#sec-object.getownpropertynames\n getOwnPropertyNames: $getOwnPropertyNames,\n // `Object.getOwnPropertySymbols` method\n // https://tc39.github.io/ecma262/#sec-object.getownpropertysymbols\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return getOwnPropertySymbolsModule.f(toObject(it));\n }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.github.io/ecma262/#sec-json.stringify\nif ($stringify) {\n var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {\n var symbol = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n return $stringify([symbol]) != '[null]'\n // WebKit converts symbol values to JSON as null\n || $stringify({ a: symbol }) != '{}'\n // V8 throws on boxed symbols\n || $stringify(Object(symbol)) != '{}';\n });\n\n $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {\n // eslint-disable-next-line no-unused-vars\n stringify: function stringify(it, replacer, space) {\n var args = [it];\n var index = 1;\n var $replacer;\n while (arguments.length > index) args.push(arguments[index++]);\n $replacer = replacer;\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return $stringify.apply(null, args);\n }\n });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.github.io/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!$Symbol[PROTOTYPE][TO_PRIMITIVE]) {\n createNonEnumerableProperty($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.github.io/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n if (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n } catch (error) {\n CollectionPrototype[ITERATOR] = ArrayValues;\n }\n if (!CollectionPrototype[TO_STRING_TAG]) {\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n }\n if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n } catch (error) {\n CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n }\n }\n }\n}\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.array.iterator');\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar InternalStateModule = require('../internals/internal-state');\nvar anInstance = require('../internals/an-instance');\nvar hasOwn = require('../internals/has');\nvar bind = require('../internals/function-bind-context');\nvar classof = require('../internals/classof');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $fetch = getBuiltIn('fetch');\nvar Headers = getBuiltIn('Headers');\nvar ITERATOR = wellKnownSymbol('iterator');\nvar URL_SEARCH_PARAMS = 'URLSearchParams';\nvar URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS);\nvar getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR);\n\nvar plus = /\\+/g;\nvar sequences = Array(4);\n\nvar percentSequence = function (bytes) {\n return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\\\da-f]{2}){' + bytes + '})', 'gi'));\n};\n\nvar percentDecode = function (sequence) {\n try {\n return decodeURIComponent(sequence);\n } catch (error) {\n return sequence;\n }\n};\n\nvar deserialize = function (it) {\n var result = it.replace(plus, ' ');\n var bytes = 4;\n try {\n return decodeURIComponent(result);\n } catch (error) {\n while (bytes) {\n result = result.replace(percentSequence(bytes--), percentDecode);\n }\n return result;\n }\n};\n\nvar find = /[!'()~]|%20/g;\n\nvar replace = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+'\n};\n\nvar replacer = function (match) {\n return replace[match];\n};\n\nvar serialize = function (it) {\n return encodeURIComponent(it).replace(find, replacer);\n};\n\nvar parseSearchParams = function (result, query) {\n if (query) {\n var attributes = query.split('&');\n var index = 0;\n var attribute, entry;\n while (index < attributes.length) {\n attribute = attributes[index++];\n if (attribute.length) {\n entry = attribute.split('=');\n result.push({\n key: deserialize(entry.shift()),\n value: deserialize(entry.join('='))\n });\n }\n }\n }\n};\n\nvar updateSearchParams = function (query) {\n this.entries.length = 0;\n parseSearchParams(this.entries, query);\n};\n\nvar validateArgumentsLength = function (passed, required) {\n if (passed < required) throw TypeError('Not enough arguments');\n};\n\nvar URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) {\n setInternalState(this, {\n type: URL_SEARCH_PARAMS_ITERATOR,\n iterator: getIterator(getInternalParamsState(params).entries),\n kind: kind\n });\n}, 'Iterator', function next() {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var step = state.iterator.next();\n var entry = step.value;\n if (!step.done) {\n step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [entry.key, entry.value];\n } return step;\n});\n\n// `URLSearchParams` constructor\n// https://url.spec.whatwg.org/#interface-urlsearchparams\nvar URLSearchParamsConstructor = function URLSearchParams(/* init */) {\n anInstance(this, URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n var init = arguments.length > 0 ? arguments[0] : undefined;\n var that = this;\n var entries = [];\n var iteratorMethod, iterator, next, step, entryIterator, entryNext, first, second, key;\n\n setInternalState(that, {\n type: URL_SEARCH_PARAMS,\n entries: entries,\n updateURL: function () { /* empty */ },\n updateSearchParams: updateSearchParams\n });\n\n if (init !== undefined) {\n if (isObject(init)) {\n iteratorMethod = getIteratorMethod(init);\n if (typeof iteratorMethod === 'function') {\n iterator = iteratorMethod.call(init);\n next = iterator.next;\n while (!(step = next.call(iterator)).done) {\n entryIterator = getIterator(anObject(step.value));\n entryNext = entryIterator.next;\n if (\n (first = entryNext.call(entryIterator)).done ||\n (second = entryNext.call(entryIterator)).done ||\n !entryNext.call(entryIterator).done\n ) throw TypeError('Expected sequence with length 2');\n entries.push({ key: first.value + '', value: second.value + '' });\n }\n } else for (key in init) if (hasOwn(init, key)) entries.push({ key: key, value: init[key] + '' });\n } else {\n parseSearchParams(entries, typeof init === 'string' ? init.charAt(0) === '?' ? init.slice(1) : init : init + '');\n }\n }\n};\n\nvar URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;\n\nredefineAll(URLSearchParamsPrototype, {\n // `URLSearchParams.prototype.appent` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-append\n append: function append(name, value) {\n validateArgumentsLength(arguments.length, 2);\n var state = getInternalParamsState(this);\n state.entries.push({ key: name + '', value: value + '' });\n state.updateURL();\n },\n // `URLSearchParams.prototype.delete` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-delete\n 'delete': function (name) {\n validateArgumentsLength(arguments.length, 1);\n var state = getInternalParamsState(this);\n var entries = state.entries;\n var key = name + '';\n var index = 0;\n while (index < entries.length) {\n if (entries[index].key === key) entries.splice(index, 1);\n else index++;\n }\n state.updateURL();\n },\n // `URLSearchParams.prototype.get` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-get\n get: function get(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = name + '';\n var index = 0;\n for (; index < entries.length; index++) {\n if (entries[index].key === key) return entries[index].value;\n }\n return null;\n },\n // `URLSearchParams.prototype.getAll` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-getall\n getAll: function getAll(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = name + '';\n var result = [];\n var index = 0;\n for (; index < entries.length; index++) {\n if (entries[index].key === key) result.push(entries[index].value);\n }\n return result;\n },\n // `URLSearchParams.prototype.has` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-has\n has: function has(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = name + '';\n var index = 0;\n while (index < entries.length) {\n if (entries[index++].key === key) return true;\n }\n return false;\n },\n // `URLSearchParams.prototype.set` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-set\n set: function set(name, value) {\n validateArgumentsLength(arguments.length, 1);\n var state = getInternalParamsState(this);\n var entries = state.entries;\n var found = false;\n var key = name + '';\n var val = value + '';\n var index = 0;\n var entry;\n for (; index < entries.length; index++) {\n entry = entries[index];\n if (entry.key === key) {\n if (found) entries.splice(index--, 1);\n else {\n found = true;\n entry.value = val;\n }\n }\n }\n if (!found) entries.push({ key: key, value: val });\n state.updateURL();\n },\n // `URLSearchParams.prototype.sort` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-sort\n sort: function sort() {\n var state = getInternalParamsState(this);\n var entries = state.entries;\n // Array#sort is not stable in some engines\n var slice = entries.slice();\n var entry, entriesIndex, sliceIndex;\n entries.length = 0;\n for (sliceIndex = 0; sliceIndex < slice.length; sliceIndex++) {\n entry = slice[sliceIndex];\n for (entriesIndex = 0; entriesIndex < sliceIndex; entriesIndex++) {\n if (entries[entriesIndex].key > entry.key) {\n entries.splice(entriesIndex, 0, entry);\n break;\n }\n }\n if (entriesIndex === sliceIndex) entries.push(entry);\n }\n state.updateURL();\n },\n // `URLSearchParams.prototype.forEach` method\n forEach: function forEach(callback /* , thisArg */) {\n var entries = getInternalParamsState(this).entries;\n var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined, 3);\n var index = 0;\n var entry;\n while (index < entries.length) {\n entry = entries[index++];\n boundFunction(entry.value, entry.key, this);\n }\n },\n // `URLSearchParams.prototype.keys` method\n keys: function keys() {\n return new URLSearchParamsIterator(this, 'keys');\n },\n // `URLSearchParams.prototype.values` method\n values: function values() {\n return new URLSearchParamsIterator(this, 'values');\n },\n // `URLSearchParams.prototype.entries` method\n entries: function entries() {\n return new URLSearchParamsIterator(this, 'entries');\n }\n}, { enumerable: true });\n\n// `URLSearchParams.prototype[@@iterator]` method\nredefine(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries);\n\n// `URLSearchParams.prototype.toString` method\n// https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior\nredefine(URLSearchParamsPrototype, 'toString', function toString() {\n var entries = getInternalParamsState(this).entries;\n var result = [];\n var index = 0;\n var entry;\n while (index < entries.length) {\n entry = entries[index++];\n result.push(serialize(entry.key) + '=' + serialize(entry.value));\n } return result.join('&');\n}, { enumerable: true });\n\nsetToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n\n$({ global: true, forced: !USE_NATIVE_URL }, {\n URLSearchParams: URLSearchParamsConstructor\n});\n\n// Wrap `fetch` for correct work with polyfilled `URLSearchParams`\n// https://github.com/zloirock/core-js/issues/674\nif (!USE_NATIVE_URL && typeof $fetch == 'function' && typeof Headers == 'function') {\n $({ global: true, enumerable: true, forced: true }, {\n fetch: function fetch(input /* , init */) {\n var args = [input];\n var init, body, headers;\n if (arguments.length > 1) {\n init = arguments[1];\n if (isObject(init)) {\n body = init.body;\n if (classof(body) === URL_SEARCH_PARAMS) {\n headers = init.headers ? new Headers(init.headers) : new Headers();\n if (!headers.has('content-type')) {\n headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n init = create(init, {\n body: createPropertyDescriptor(0, String(body)),\n headers: createPropertyDescriptor(0, headers)\n });\n }\n }\n args.push(init);\n } return $fetch.apply(this, args);\n }\n });\n}\n\nmodule.exports = {\n URLSearchParams: URLSearchParamsConstructor,\n getState: getInternalParamsState\n};\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.string.iterator');\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar global = require('../internals/global');\nvar defineProperties = require('../internals/object-define-properties');\nvar redefine = require('../internals/redefine');\nvar anInstance = require('../internals/an-instance');\nvar has = require('../internals/has');\nvar assign = require('../internals/object-assign');\nvar arrayFrom = require('../internals/array-from');\nvar codeAt = require('../internals/string-multibyte').codeAt;\nvar toASCII = require('../internals/string-punycode-to-ascii');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar URLSearchParamsModule = require('../modules/web.url-search-params');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar NativeURL = global.URL;\nvar URLSearchParams = URLSearchParamsModule.URLSearchParams;\nvar getInternalSearchParamsState = URLSearchParamsModule.getState;\nvar setInternalState = InternalStateModule.set;\nvar getInternalURLState = InternalStateModule.getterFor('URL');\nvar floor = Math.floor;\nvar pow = Math.pow;\n\nvar INVALID_AUTHORITY = 'Invalid authority';\nvar INVALID_SCHEME = 'Invalid scheme';\nvar INVALID_HOST = 'Invalid host';\nvar INVALID_PORT = 'Invalid port';\n\nvar ALPHA = /[A-Za-z]/;\nvar ALPHANUMERIC = /[\\d+-.A-Za-z]/;\nvar DIGIT = /\\d/;\nvar HEX_START = /^(0x|0X)/;\nvar OCT = /^[0-7]+$/;\nvar DEC = /^\\d+$/;\nvar HEX = /^[\\dA-Fa-f]+$/;\n// eslint-disable-next-line no-control-regex\nvar FORBIDDEN_HOST_CODE_POINT = /[\\u0000\\u0009\\u000A\\u000D #%/:?@[\\\\]]/;\n// eslint-disable-next-line no-control-regex\nvar FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\\u0000\\u0009\\u000A\\u000D #/:?@[\\\\]]/;\n// eslint-disable-next-line no-control-regex\nvar LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\\u0000-\\u001F ]+|[\\u0000-\\u001F ]+$/g;\n// eslint-disable-next-line no-control-regex\nvar TAB_AND_NEW_LINE = /[\\u0009\\u000A\\u000D]/g;\nvar EOF;\n\nvar parseHost = function (url, input) {\n var result, codePoints, index;\n if (input.charAt(0) == '[') {\n if (input.charAt(input.length - 1) != ']') return INVALID_HOST;\n result = parseIPv6(input.slice(1, -1));\n if (!result) return INVALID_HOST;\n url.host = result;\n // opaque host\n } else if (!isSpecial(url)) {\n if (FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT.test(input)) return INVALID_HOST;\n result = '';\n codePoints = arrayFrom(input);\n for (index = 0; index < codePoints.length; index++) {\n result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);\n }\n url.host = result;\n } else {\n input = toASCII(input);\n if (FORBIDDEN_HOST_CODE_POINT.test(input)) return INVALID_HOST;\n result = parseIPv4(input);\n if (result === null) return INVALID_HOST;\n url.host = result;\n }\n};\n\nvar parseIPv4 = function (input) {\n var parts = input.split('.');\n var partsLength, numbers, index, part, radix, number, ipv4;\n if (parts.length && parts[parts.length - 1] == '') {\n parts.pop();\n }\n partsLength = parts.length;\n if (partsLength > 4) return input;\n numbers = [];\n for (index = 0; index < partsLength; index++) {\n part = parts[index];\n if (part == '') return input;\n radix = 10;\n if (part.length > 1 && part.charAt(0) == '0') {\n radix = HEX_START.test(part) ? 16 : 8;\n part = part.slice(radix == 8 ? 1 : 2);\n }\n if (part === '') {\n number = 0;\n } else {\n if (!(radix == 10 ? DEC : radix == 8 ? OCT : HEX).test(part)) return input;\n number = parseInt(part, radix);\n }\n numbers.push(number);\n }\n for (index = 0; index < partsLength; index++) {\n number = numbers[index];\n if (index == partsLength - 1) {\n if (number >= pow(256, 5 - partsLength)) return null;\n } else if (number > 255) return null;\n }\n ipv4 = numbers.pop();\n for (index = 0; index < numbers.length; index++) {\n ipv4 += numbers[index] * pow(256, 3 - index);\n }\n return ipv4;\n};\n\n// eslint-disable-next-line max-statements\nvar parseIPv6 = function (input) {\n var address = [0, 0, 0, 0, 0, 0, 0, 0];\n var pieceIndex = 0;\n var compress = null;\n var pointer = 0;\n var value, length, numbersSeen, ipv4Piece, number, swaps, swap;\n\n var char = function () {\n return input.charAt(pointer);\n };\n\n if (char() == ':') {\n if (input.charAt(1) != ':') return;\n pointer += 2;\n pieceIndex++;\n compress = pieceIndex;\n }\n while (char()) {\n if (pieceIndex == 8) return;\n if (char() == ':') {\n if (compress !== null) return;\n pointer++;\n pieceIndex++;\n compress = pieceIndex;\n continue;\n }\n value = length = 0;\n while (length < 4 && HEX.test(char())) {\n value = value * 16 + parseInt(char(), 16);\n pointer++;\n length++;\n }\n if (char() == '.') {\n if (length == 0) return;\n pointer -= length;\n if (pieceIndex > 6) return;\n numbersSeen = 0;\n while (char()) {\n ipv4Piece = null;\n if (numbersSeen > 0) {\n if (char() == '.' && numbersSeen < 4) pointer++;\n else return;\n }\n if (!DIGIT.test(char())) return;\n while (DIGIT.test(char())) {\n number = parseInt(char(), 10);\n if (ipv4Piece === null) ipv4Piece = number;\n else if (ipv4Piece == 0) return;\n else ipv4Piece = ipv4Piece * 10 + number;\n if (ipv4Piece > 255) return;\n pointer++;\n }\n address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;\n numbersSeen++;\n if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;\n }\n if (numbersSeen != 4) return;\n break;\n } else if (char() == ':') {\n pointer++;\n if (!char()) return;\n } else if (char()) return;\n address[pieceIndex++] = value;\n }\n if (compress !== null) {\n swaps = pieceIndex - compress;\n pieceIndex = 7;\n while (pieceIndex != 0 && swaps > 0) {\n swap = address[pieceIndex];\n address[pieceIndex--] = address[compress + swaps - 1];\n address[compress + --swaps] = swap;\n }\n } else if (pieceIndex != 8) return;\n return address;\n};\n\nvar findLongestZeroSequence = function (ipv6) {\n var maxIndex = null;\n var maxLength = 1;\n var currStart = null;\n var currLength = 0;\n var index = 0;\n for (; index < 8; index++) {\n if (ipv6[index] !== 0) {\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n currStart = null;\n currLength = 0;\n } else {\n if (currStart === null) currStart = index;\n ++currLength;\n }\n }\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n return maxIndex;\n};\n\nvar serializeHost = function (host) {\n var result, index, compress, ignore0;\n // ipv4\n if (typeof host == 'number') {\n result = [];\n for (index = 0; index < 4; index++) {\n result.unshift(host % 256);\n host = floor(host / 256);\n } return result.join('.');\n // ipv6\n } else if (typeof host == 'object') {\n result = '';\n compress = findLongestZeroSequence(host);\n for (index = 0; index < 8; index++) {\n if (ignore0 && host[index] === 0) continue;\n if (ignore0) ignore0 = false;\n if (compress === index) {\n result += index ? ':' : '::';\n ignore0 = true;\n } else {\n result += host[index].toString(16);\n if (index < 7) result += ':';\n }\n }\n return '[' + result + ']';\n } return host;\n};\n\nvar C0ControlPercentEncodeSet = {};\nvar fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\n ' ': 1, '\"': 1, '<': 1, '>': 1, '`': 1\n});\nvar pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {\n '#': 1, '?': 1, '{': 1, '}': 1\n});\nvar userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {\n '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\\\': 1, ']': 1, '^': 1, '|': 1\n});\n\nvar percentEncode = function (char, set) {\n var code = codeAt(char, 0);\n return code > 0x20 && code < 0x7F && !has(set, char) ? char : encodeURIComponent(char);\n};\n\nvar specialSchemes = {\n ftp: 21,\n file: null,\n http: 80,\n https: 443,\n ws: 80,\n wss: 443\n};\n\nvar isSpecial = function (url) {\n return has(specialSchemes, url.scheme);\n};\n\nvar includesCredentials = function (url) {\n return url.username != '' || url.password != '';\n};\n\nvar cannotHaveUsernamePasswordPort = function (url) {\n return !url.host || url.cannotBeABaseURL || url.scheme == 'file';\n};\n\nvar isWindowsDriveLetter = function (string, normalized) {\n var second;\n return string.length == 2 && ALPHA.test(string.charAt(0))\n && ((second = string.charAt(1)) == ':' || (!normalized && second == '|'));\n};\n\nvar startsWithWindowsDriveLetter = function (string) {\n var third;\n return string.length > 1 && isWindowsDriveLetter(string.slice(0, 2)) && (\n string.length == 2 ||\n ((third = string.charAt(2)) === '/' || third === '\\\\' || third === '?' || third === '#')\n );\n};\n\nvar shortenURLsPath = function (url) {\n var path = url.path;\n var pathSize = path.length;\n if (pathSize && (url.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {\n path.pop();\n }\n};\n\nvar isSingleDot = function (segment) {\n return segment === '.' || segment.toLowerCase() === '%2e';\n};\n\nvar isDoubleDot = function (segment) {\n segment = segment.toLowerCase();\n return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';\n};\n\n// States:\nvar SCHEME_START = {};\nvar SCHEME = {};\nvar NO_SCHEME = {};\nvar SPECIAL_RELATIVE_OR_AUTHORITY = {};\nvar PATH_OR_AUTHORITY = {};\nvar RELATIVE = {};\nvar RELATIVE_SLASH = {};\nvar SPECIAL_AUTHORITY_SLASHES = {};\nvar SPECIAL_AUTHORITY_IGNORE_SLASHES = {};\nvar AUTHORITY = {};\nvar HOST = {};\nvar HOSTNAME = {};\nvar PORT = {};\nvar FILE = {};\nvar FILE_SLASH = {};\nvar FILE_HOST = {};\nvar PATH_START = {};\nvar PATH = {};\nvar CANNOT_BE_A_BASE_URL_PATH = {};\nvar QUERY = {};\nvar FRAGMENT = {};\n\n// eslint-disable-next-line max-statements\nvar parseURL = function (url, input, stateOverride, base) {\n var state = stateOverride || SCHEME_START;\n var pointer = 0;\n var buffer = '';\n var seenAt = false;\n var seenBracket = false;\n var seenPasswordToken = false;\n var codePoints, char, bufferCodePoints, failure;\n\n if (!stateOverride) {\n url.scheme = '';\n url.username = '';\n url.password = '';\n url.host = null;\n url.port = null;\n url.path = [];\n url.query = null;\n url.fragment = null;\n url.cannotBeABaseURL = false;\n input = input.replace(LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');\n }\n\n input = input.replace(TAB_AND_NEW_LINE, '');\n\n codePoints = arrayFrom(input);\n\n while (pointer <= codePoints.length) {\n char = codePoints[pointer];\n switch (state) {\n case SCHEME_START:\n if (char && ALPHA.test(char)) {\n buffer += char.toLowerCase();\n state = SCHEME;\n } else if (!stateOverride) {\n state = NO_SCHEME;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case SCHEME:\n if (char && (ALPHANUMERIC.test(char) || char == '+' || char == '-' || char == '.')) {\n buffer += char.toLowerCase();\n } else if (char == ':') {\n if (stateOverride && (\n (isSpecial(url) != has(specialSchemes, buffer)) ||\n (buffer == 'file' && (includesCredentials(url) || url.port !== null)) ||\n (url.scheme == 'file' && !url.host)\n )) return;\n url.scheme = buffer;\n if (stateOverride) {\n if (isSpecial(url) && specialSchemes[url.scheme] == url.port) url.port = null;\n return;\n }\n buffer = '';\n if (url.scheme == 'file') {\n state = FILE;\n } else if (isSpecial(url) && base && base.scheme == url.scheme) {\n state = SPECIAL_RELATIVE_OR_AUTHORITY;\n } else if (isSpecial(url)) {\n state = SPECIAL_AUTHORITY_SLASHES;\n } else if (codePoints[pointer + 1] == '/') {\n state = PATH_OR_AUTHORITY;\n pointer++;\n } else {\n url.cannotBeABaseURL = true;\n url.path.push('');\n state = CANNOT_BE_A_BASE_URL_PATH;\n }\n } else if (!stateOverride) {\n buffer = '';\n state = NO_SCHEME;\n pointer = 0;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case NO_SCHEME:\n if (!base || (base.cannotBeABaseURL && char != '#')) return INVALID_SCHEME;\n if (base.cannotBeABaseURL && char == '#') {\n url.scheme = base.scheme;\n url.path = base.path.slice();\n url.query = base.query;\n url.fragment = '';\n url.cannotBeABaseURL = true;\n state = FRAGMENT;\n break;\n }\n state = base.scheme == 'file' ? FILE : RELATIVE;\n continue;\n\n case SPECIAL_RELATIVE_OR_AUTHORITY:\n if (char == '/' && codePoints[pointer + 1] == '/') {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n pointer++;\n } else {\n state = RELATIVE;\n continue;\n } break;\n\n case PATH_OR_AUTHORITY:\n if (char == '/') {\n state = AUTHORITY;\n break;\n } else {\n state = PATH;\n continue;\n }\n\n case RELATIVE:\n url.scheme = base.scheme;\n if (char == EOF) {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.query = base.query;\n } else if (char == '/' || (char == '\\\\' && isSpecial(url))) {\n state = RELATIVE_SLASH;\n } else if (char == '?') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.path.pop();\n state = PATH;\n continue;\n } break;\n\n case RELATIVE_SLASH:\n if (isSpecial(url) && (char == '/' || char == '\\\\')) {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n } else if (char == '/') {\n state = AUTHORITY;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n state = PATH;\n continue;\n } break;\n\n case SPECIAL_AUTHORITY_SLASHES:\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n if (char != '/' || buffer.charAt(pointer + 1) != '/') continue;\n pointer++;\n break;\n\n case SPECIAL_AUTHORITY_IGNORE_SLASHES:\n if (char != '/' && char != '\\\\') {\n state = AUTHORITY;\n continue;\n } break;\n\n case AUTHORITY:\n if (char == '@') {\n if (seenAt) buffer = '%40' + buffer;\n seenAt = true;\n bufferCodePoints = arrayFrom(buffer);\n for (var i = 0; i < bufferCodePoints.length; i++) {\n var codePoint = bufferCodePoints[i];\n if (codePoint == ':' && !seenPasswordToken) {\n seenPasswordToken = true;\n continue;\n }\n var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);\n if (seenPasswordToken) url.password += encodedCodePoints;\n else url.username += encodedCodePoints;\n }\n buffer = '';\n } else if (\n char == EOF || char == '/' || char == '?' || char == '#' ||\n (char == '\\\\' && isSpecial(url))\n ) {\n if (seenAt && buffer == '') return INVALID_AUTHORITY;\n pointer -= arrayFrom(buffer).length + 1;\n buffer = '';\n state = HOST;\n } else buffer += char;\n break;\n\n case HOST:\n case HOSTNAME:\n if (stateOverride && url.scheme == 'file') {\n state = FILE_HOST;\n continue;\n } else if (char == ':' && !seenBracket) {\n if (buffer == '') return INVALID_HOST;\n failure = parseHost(url, buffer);\n if (failure) return failure;\n buffer = '';\n state = PORT;\n if (stateOverride == HOSTNAME) return;\n } else if (\n char == EOF || char == '/' || char == '?' || char == '#' ||\n (char == '\\\\' && isSpecial(url))\n ) {\n if (isSpecial(url) && buffer == '') return INVALID_HOST;\n if (stateOverride && buffer == '' && (includesCredentials(url) || url.port !== null)) return;\n failure = parseHost(url, buffer);\n if (failure) return failure;\n buffer = '';\n state = PATH_START;\n if (stateOverride) return;\n continue;\n } else {\n if (char == '[') seenBracket = true;\n else if (char == ']') seenBracket = false;\n buffer += char;\n } break;\n\n case PORT:\n if (DIGIT.test(char)) {\n buffer += char;\n } else if (\n char == EOF || char == '/' || char == '?' || char == '#' ||\n (char == '\\\\' && isSpecial(url)) ||\n stateOverride\n ) {\n if (buffer != '') {\n var port = parseInt(buffer, 10);\n if (port > 0xFFFF) return INVALID_PORT;\n url.port = (isSpecial(url) && port === specialSchemes[url.scheme]) ? null : port;\n buffer = '';\n }\n if (stateOverride) return;\n state = PATH_START;\n continue;\n } else return INVALID_PORT;\n break;\n\n case FILE:\n url.scheme = 'file';\n if (char == '/' || char == '\\\\') state = FILE_SLASH;\n else if (base && base.scheme == 'file') {\n if (char == EOF) {\n url.host = base.host;\n url.path = base.path.slice();\n url.query = base.query;\n } else if (char == '?') {\n url.host = base.host;\n url.path = base.path.slice();\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.host = base.host;\n url.path = base.path.slice();\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n if (!startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\n url.host = base.host;\n url.path = base.path.slice();\n shortenURLsPath(url);\n }\n state = PATH;\n continue;\n }\n } else {\n state = PATH;\n continue;\n } break;\n\n case FILE_SLASH:\n if (char == '/' || char == '\\\\') {\n state = FILE_HOST;\n break;\n }\n if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\n if (isWindowsDriveLetter(base.path[0], true)) url.path.push(base.path[0]);\n else url.host = base.host;\n }\n state = PATH;\n continue;\n\n case FILE_HOST:\n if (char == EOF || char == '/' || char == '\\\\' || char == '?' || char == '#') {\n if (!stateOverride && isWindowsDriveLetter(buffer)) {\n state = PATH;\n } else if (buffer == '') {\n url.host = '';\n if (stateOverride) return;\n state = PATH_START;\n } else {\n failure = parseHost(url, buffer);\n if (failure) return failure;\n if (url.host == 'localhost') url.host = '';\n if (stateOverride) return;\n buffer = '';\n state = PATH_START;\n } continue;\n } else buffer += char;\n break;\n\n case PATH_START:\n if (isSpecial(url)) {\n state = PATH;\n if (char != '/' && char != '\\\\') continue;\n } else if (!stateOverride && char == '?') {\n url.query = '';\n state = QUERY;\n } else if (!stateOverride && char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (char != EOF) {\n state = PATH;\n if (char != '/') continue;\n } break;\n\n case PATH:\n if (\n char == EOF || char == '/' ||\n (char == '\\\\' && isSpecial(url)) ||\n (!stateOverride && (char == '?' || char == '#'))\n ) {\n if (isDoubleDot(buffer)) {\n shortenURLsPath(url);\n if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\n url.path.push('');\n }\n } else if (isSingleDot(buffer)) {\n if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\n url.path.push('');\n }\n } else {\n if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {\n if (url.host) url.host = '';\n buffer = buffer.charAt(0) + ':'; // normalize windows drive letter\n }\n url.path.push(buffer);\n }\n buffer = '';\n if (url.scheme == 'file' && (char == EOF || char == '?' || char == '#')) {\n while (url.path.length > 1 && url.path[0] === '') {\n url.path.shift();\n }\n }\n if (char == '?') {\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n }\n } else {\n buffer += percentEncode(char, pathPercentEncodeSet);\n } break;\n\n case CANNOT_BE_A_BASE_URL_PATH:\n if (char == '?') {\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (char != EOF) {\n url.path[0] += percentEncode(char, C0ControlPercentEncodeSet);\n } break;\n\n case QUERY:\n if (!stateOverride && char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (char != EOF) {\n if (char == \"'\" && isSpecial(url)) url.query += '%27';\n else if (char == '#') url.query += '%23';\n else url.query += percentEncode(char, C0ControlPercentEncodeSet);\n } break;\n\n case FRAGMENT:\n if (char != EOF) url.fragment += percentEncode(char, fragmentPercentEncodeSet);\n break;\n }\n\n pointer++;\n }\n};\n\n// `URL` constructor\n// https://url.spec.whatwg.org/#url-class\nvar URLConstructor = function URL(url /* , base */) {\n var that = anInstance(this, URLConstructor, 'URL');\n var base = arguments.length > 1 ? arguments[1] : undefined;\n var urlString = String(url);\n var state = setInternalState(that, { type: 'URL' });\n var baseState, failure;\n if (base !== undefined) {\n if (base instanceof URLConstructor) baseState = getInternalURLState(base);\n else {\n failure = parseURL(baseState = {}, String(base));\n if (failure) throw TypeError(failure);\n }\n }\n failure = parseURL(state, urlString, null, baseState);\n if (failure) throw TypeError(failure);\n var searchParams = state.searchParams = new URLSearchParams();\n var searchParamsState = getInternalSearchParamsState(searchParams);\n searchParamsState.updateSearchParams(state.query);\n searchParamsState.updateURL = function () {\n state.query = String(searchParams) || null;\n };\n if (!DESCRIPTORS) {\n that.href = serializeURL.call(that);\n that.origin = getOrigin.call(that);\n that.protocol = getProtocol.call(that);\n that.username = getUsername.call(that);\n that.password = getPassword.call(that);\n that.host = getHost.call(that);\n that.hostname = getHostname.call(that);\n that.port = getPort.call(that);\n that.pathname = getPathname.call(that);\n that.search = getSearch.call(that);\n that.searchParams = getSearchParams.call(that);\n that.hash = getHash.call(that);\n }\n};\n\nvar URLPrototype = URLConstructor.prototype;\n\nvar serializeURL = function () {\n var url = getInternalURLState(this);\n var scheme = url.scheme;\n var username = url.username;\n var password = url.password;\n var host = url.host;\n var port = url.port;\n var path = url.path;\n var query = url.query;\n var fragment = url.fragment;\n var output = scheme + ':';\n if (host !== null) {\n output += '//';\n if (includesCredentials(url)) {\n output += username + (password ? ':' + password : '') + '@';\n }\n output += serializeHost(host);\n if (port !== null) output += ':' + port;\n } else if (scheme == 'file') output += '//';\n output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\n if (query !== null) output += '?' + query;\n if (fragment !== null) output += '#' + fragment;\n return output;\n};\n\nvar getOrigin = function () {\n var url = getInternalURLState(this);\n var scheme = url.scheme;\n var port = url.port;\n if (scheme == 'blob') try {\n return new URL(scheme.path[0]).origin;\n } catch (error) {\n return 'null';\n }\n if (scheme == 'file' || !isSpecial(url)) return 'null';\n return scheme + '://' + serializeHost(url.host) + (port !== null ? ':' + port : '');\n};\n\nvar getProtocol = function () {\n return getInternalURLState(this).scheme + ':';\n};\n\nvar getUsername = function () {\n return getInternalURLState(this).username;\n};\n\nvar getPassword = function () {\n return getInternalURLState(this).password;\n};\n\nvar getHost = function () {\n var url = getInternalURLState(this);\n var host = url.host;\n var port = url.port;\n return host === null ? ''\n : port === null ? serializeHost(host)\n : serializeHost(host) + ':' + port;\n};\n\nvar getHostname = function () {\n var host = getInternalURLState(this).host;\n return host === null ? '' : serializeHost(host);\n};\n\nvar getPort = function () {\n var port = getInternalURLState(this).port;\n return port === null ? '' : String(port);\n};\n\nvar getPathname = function () {\n var url = getInternalURLState(this);\n var path = url.path;\n return url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\n};\n\nvar getSearch = function () {\n var query = getInternalURLState(this).query;\n return query ? '?' + query : '';\n};\n\nvar getSearchParams = function () {\n return getInternalURLState(this).searchParams;\n};\n\nvar getHash = function () {\n var fragment = getInternalURLState(this).fragment;\n return fragment ? '#' + fragment : '';\n};\n\nvar accessorDescriptor = function (getter, setter) {\n return { get: getter, set: setter, configurable: true, enumerable: true };\n};\n\nif (DESCRIPTORS) {\n defineProperties(URLPrototype, {\n // `URL.prototype.href` accessors pair\n // https://url.spec.whatwg.org/#dom-url-href\n href: accessorDescriptor(serializeURL, function (href) {\n var url = getInternalURLState(this);\n var urlString = String(href);\n var failure = parseURL(url, urlString);\n if (failure) throw TypeError(failure);\n getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\n }),\n // `URL.prototype.origin` getter\n // https://url.spec.whatwg.org/#dom-url-origin\n origin: accessorDescriptor(getOrigin),\n // `URL.prototype.protocol` accessors pair\n // https://url.spec.whatwg.org/#dom-url-protocol\n protocol: accessorDescriptor(getProtocol, function (protocol) {\n var url = getInternalURLState(this);\n parseURL(url, String(protocol) + ':', SCHEME_START);\n }),\n // `URL.prototype.username` accessors pair\n // https://url.spec.whatwg.org/#dom-url-username\n username: accessorDescriptor(getUsername, function (username) {\n var url = getInternalURLState(this);\n var codePoints = arrayFrom(String(username));\n if (cannotHaveUsernamePasswordPort(url)) return;\n url.username = '';\n for (var i = 0; i < codePoints.length; i++) {\n url.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n }),\n // `URL.prototype.password` accessors pair\n // https://url.spec.whatwg.org/#dom-url-password\n password: accessorDescriptor(getPassword, function (password) {\n var url = getInternalURLState(this);\n var codePoints = arrayFrom(String(password));\n if (cannotHaveUsernamePasswordPort(url)) return;\n url.password = '';\n for (var i = 0; i < codePoints.length; i++) {\n url.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n }),\n // `URL.prototype.host` accessors pair\n // https://url.spec.whatwg.org/#dom-url-host\n host: accessorDescriptor(getHost, function (host) {\n var url = getInternalURLState(this);\n if (url.cannotBeABaseURL) return;\n parseURL(url, String(host), HOST);\n }),\n // `URL.prototype.hostname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hostname\n hostname: accessorDescriptor(getHostname, function (hostname) {\n var url = getInternalURLState(this);\n if (url.cannotBeABaseURL) return;\n parseURL(url, String(hostname), HOSTNAME);\n }),\n // `URL.prototype.port` accessors pair\n // https://url.spec.whatwg.org/#dom-url-port\n port: accessorDescriptor(getPort, function (port) {\n var url = getInternalURLState(this);\n if (cannotHaveUsernamePasswordPort(url)) return;\n port = String(port);\n if (port == '') url.port = null;\n else parseURL(url, port, PORT);\n }),\n // `URL.prototype.pathname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-pathname\n pathname: accessorDescriptor(getPathname, function (pathname) {\n var url = getInternalURLState(this);\n if (url.cannotBeABaseURL) return;\n url.path = [];\n parseURL(url, pathname + '', PATH_START);\n }),\n // `URL.prototype.search` accessors pair\n // https://url.spec.whatwg.org/#dom-url-search\n search: accessorDescriptor(getSearch, function (search) {\n var url = getInternalURLState(this);\n search = String(search);\n if (search == '') {\n url.query = null;\n } else {\n if ('?' == search.charAt(0)) search = search.slice(1);\n url.query = '';\n parseURL(url, search, QUERY);\n }\n getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\n }),\n // `URL.prototype.searchParams` getter\n // https://url.spec.whatwg.org/#dom-url-searchparams\n searchParams: accessorDescriptor(getSearchParams),\n // `URL.prototype.hash` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hash\n hash: accessorDescriptor(getHash, function (hash) {\n var url = getInternalURLState(this);\n hash = String(hash);\n if (hash == '') {\n url.fragment = null;\n return;\n }\n if ('#' == hash.charAt(0)) hash = hash.slice(1);\n url.fragment = '';\n parseURL(url, hash, FRAGMENT);\n })\n });\n}\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\nredefine(URLPrototype, 'toJSON', function toJSON() {\n return serializeURL.call(this);\n}, { enumerable: true });\n\n// `URL.prototype.toString` method\n// https://url.spec.whatwg.org/#URL-stringification-behavior\nredefine(URLPrototype, 'toString', function toString() {\n return serializeURL.call(this);\n}, { enumerable: true });\n\nif (NativeURL) {\n var nativeCreateObjectURL = NativeURL.createObjectURL;\n var nativeRevokeObjectURL = NativeURL.revokeObjectURL;\n // `URL.createObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL\n // eslint-disable-next-line no-unused-vars\n if (nativeCreateObjectURL) redefine(URLConstructor, 'createObjectURL', function createObjectURL(blob) {\n return nativeCreateObjectURL.apply(NativeURL, arguments);\n });\n // `URL.revokeObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL\n // eslint-disable-next-line no-unused-vars\n if (nativeRevokeObjectURL) redefine(URLConstructor, 'revokeObjectURL', function revokeObjectURL(url) {\n return nativeRevokeObjectURL.apply(NativeURL, arguments);\n });\n}\n\nsetToStringTag(URLConstructor, 'URL');\n\n$({ global: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {\n URL: URLConstructor\n});\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","module.exports = jQuery;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// Promise = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t898: 0\n};\n\nvar deferredModules = [\n\t[3166]\n];\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\nvar checkDeferredModules = function() {\n\n};\nfunction checkDeferredModulesImpl() {\n\tvar result;\n\tfor(var i = 0; i < deferredModules.length; i++) {\n\t\tvar deferredModule = deferredModules[i];\n\t\tvar fulfilled = true;\n\t\tfor(var j = 1; j < deferredModule.length; j++) {\n\t\t\tvar depId = deferredModule[j];\n\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferredModules.splice(i--, 1);\n\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n\t\t}\n\t}\n\tif(deferredModules.length === 0) {\n\t\t__webpack_require__.x();\n\t\t__webpack_require__.x = function() {\n\n\t\t}\n\t}\n\treturn result;\n}\n__webpack_require__.x = function() {\n\t// reset startup function so it can be called again when more startup code is added\n\t__webpack_require__.x = function() {\n\n\t}\n\tchunkLoadingGlobal = chunkLoadingGlobal.slice();\n\tfor(var i = 0; i < chunkLoadingGlobal.length; i++) webpackJsonpCallback(chunkLoadingGlobal[i]);\n\treturn (checkDeferredModules = checkDeferredModulesImpl)();\n};\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\tvar executeModules = data[3];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0, resolves = [];\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tresolves.push(installedChunks[chunkId][0]);\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\tfor(moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t}\n\t}\n\tif(runtime) runtime(__webpack_require__);\n\tparentChunkLoadingFunction(data);\n\twhile(resolves.length) {\n\t\tresolves.shift()();\n\t}\n\n\t// add entry modules from loaded chunk to deferred list\n\tif(executeModules) deferredModules.push.apply(deferredModules, executeModules);\n\n\t// run deferred modules when all chunks ready\n\treturn checkDeferredModules();\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk_internetarchive_bookreader\"] = self[\"webpackChunk_internetarchive_bookreader\"] || [];\nvar parentChunkLoadingFunction = chunkLoadingGlobal.push.bind(chunkLoadingGlobal);\nchunkLoadingGlobal.push = webpackJsonpCallback;","// run startup\nreturn __webpack_require__.x();\n"],"sourceRoot":""}